ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vc2NzaS8wMC1JTkRFWApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWNiNWJkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpLzAwLUlOREVYCkBAIC0wLDAgKzEsNzAgQEAKKzAwLUlOREVYCisJLSB0aGlzIGZpbGUKKzUzYzcwMC50eHQKKwktIGluZm8gb24gZHJpdmVyIGZvciA1M2M3MDAgYmFzZWQgYWRhcHRlcnMKK0FNNTNDOTc0LnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIEFNNTNjOTc0IGJhc2VkIGFkYXB0ZXJzCitCdXNMb2dpYy50eHQKKwktIGluZm8gb24gZHJpdmVyIGZvciBhZGFwdGVycyB3aXRoIEJ1c0xvZ2ljIGNoaXBzCitDaGFuZ2VMb2cKKwktIENoYW5nZXMgdG8gc2NzaSBmaWxlcywgaWYgbm90IGxpc3RlZCBlbHNld2hlcmUKK0NoYW5nZUxvZy5pcHMKKwktIElCTSBTZXJ2ZVJBSUQgZHJpdmVyIENoYW5nZWxvZworQ2hhbmdlTG9nLm5jcjUzYzh4eAorCS0gQ2hhbmdlcyB0byBuY3I1M2M4eHggZHJpdmVyCitDaGFuZ2VMb2cuc3ltNTNjOHh4CisJLSBDaGFuZ2VzIHRvIHN5bTUzYzh4eCBkcml2ZXIKK0NoYW5nZUxvZy5zeW01M2M4eHhfMgorCS0gQ2hhbmdlcyB0byBzZWNvbmQgZ2VuZXJhdGlvbiBvZiBzeW01M2M4eHggZHJpdmVyCitGbGFzaFBvaW50LnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIEJ1c0xvZ2ljIEZsYXNoUG9pbnQgYWRhcHRlcnMKK0xJQ0VOU0UuRmxhc2hQb2ludAorCS0gTGljZW5jZSBvZiB0aGUgRmxhc2hwb2ludCBkcml2ZXIKK015bGV4LnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIE15bGV4IGFkYXB0ZXJzCitOaW5qYVNDU0kudHh0CisJLSBpbmZvIG9uIFdvcmtCaVQgTmluamFTQ1NJLTMyLzMyQmkgZHJpdmVyCithaGExNTJ4LnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIEFkYXB0ZWMgQUhBMTUyeCBiYXNlZCBhZGFwdGVycworYWljN3h4eC50eHQKKwktIGluZm8gb24gZHJpdmVyIGZvciBBZGFwdGVjIGNvbnRyb2xsZXJzCithaWM3eHh4X29sZC50eHQKKwktIGluZm8gb24gZHJpdmVyIGZvciBBZGFwdGVjIGNvbnRyb2xsZXJzLCBvbGQgZ2VuZXJhdGlvbgorY3BxZmMudHh0CisJLSBpbmZvIG9uIGRyaXZlciBmb3IgQ29tcGFxIFRhY2h5b24gVFMgYWRhcHRlcnMKK2RwdGkudHh0CisJLSBpbmZvIG9uIGRyaXZlciBmb3IgRFBUIFNtYXJ0UkFJRCBhbmQgQWRhcHRlYyBJMk8gUkFJRCBiYXNlZCBhZGFwdGVycworZHRjM3g4MC50eHQKKwktIGluZm8gb24gZHJpdmVyIGZvciBEVEMgMng4MCBiYXNlZCBhZGFwdGVycworZ19OQ1I1MzgwLnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIE5DUjUzODAgYW5kIE5DUjUzYzQwMCBiYXNlZCBhZGFwdGVycworaWJtbWNhLnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIElCTSBhZGFwdGVycyB3aXRoIE1DQSBidXMKK2luMjAwMC50eHQKKwktIGluZm8gb24gaW4yMDAwIGRyaXZlcgorbmNyNTNjN3h4LnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIE5DUjUzYzd4eCBiYXNlZCBhZGFwdGVycworbmNyNTNjOHh4LnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIE5DUjUzYzh4eCBiYXNlZCBhZGFwdGVycworb3NzdC50eHQKKwktIGluZm8gb24gZHJpdmVyIGZvciBPblN0cmVhbSBTQy14MCBTQ1NJIHRhcGUKK3BwYS50eHQKKwktIGluZm8gb24gZHJpdmVyIGZvciBJT21lZ2EgemlwIGRyaXZlCitxbG9naWNmYXMudHh0CisJLSBpbmZvIG9uIGRyaXZlciBmb3IgUUxvZ2ljIEZBU3h4eCBiYXNlZCBhZGFwdGVycworcWxvZ2ljaXNwLnR4dAorCS0gaW5mbyBvbiBkcml2ZXIgZm9yIFFMb2dpYyBJU1AgMTAyMCBiYXNlZCBhZGFwdGVycworc2NzaS1nZW5lcmljLnR4dAorCS0gaW5mbyBvbiB0aGUgc2cgZHJpdmVyIGZvciBnZW5lcmljIChub24tZGlzay9DRC90YXBlKSBTQ1NJIGRldmljZXMuCitzY3NpLnR4dAorCS0gc2hvcnQgYmx1cmIgb24gdXNpbmcgU0NTSSBzdXBwb3J0IGFzIGEgbW9kdWxlLgorc2NzaV9taWRfbG93X2FwaS50eHQKKwktIGluZm8gb24gQVBJIGJldHdlZW4gU0NTSSBsYXllciBhbmQgbG93IGxldmVsIGRyaXZlcnMKK3N0LnR4dAorCS0gaW5mbyBvbiBzY3NpIHRhcGUgZHJpdmVyCitzeW01M2M1MDBfY3MudHh0CisJLSBpbmZvIG9uIFBDTUNJQSBkcml2ZXIgZm9yIFN5bWJpb3MgTG9naWMgNTNjNTAwIGJhc2VkIGFkYXB0ZXJzCitzeW01M2M4eHhfMi50eHQKKwktIGluZm8gb24gc2Vjb25kIGdlbmVyYXRpb24gZHJpdmVyIGZvciBzeW01M2M4eHggYmFzZWQgYWRhcHRlcnMKK3Rtc2NzaW0udHh0CisJLSBpbmZvIG9uIGRyaXZlciBmb3IgQU01M2M5NzQgYmFzZWQgYWRhcHRlcnMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS81M2M3MDAudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpLzUzYzcwMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRhNjgxZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS81M2M3MDAudHh0CkBAIC0wLDAgKzEsMTU0IEBACitHZW5lcmFsIERlc2NyaXB0aW9uCis9PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSA1M2M3MDAgYW5kIDUzYzcwMC02NiBjaGlwcy4gIEl0IGFsc28gc3VwcG9ydHMKK3RoZSA1M2M3MTAgYnV0IG9ubHkgaW4gNTNjNzAwIGVtdWxhdGlvbiBtb2RlLiAgSXQgaXMgZnVsbCBmZWF0dXJlZCBhbmQKK2RvZXMgc3luYyAoLTY2IGFuZCA3MTAgb25seSksIGRpc2Nvbm5lY3RzIGFuZCB0YWcgY29tbWFuZCBxdWV1ZWluZy4KKworU2luY2UgdGhlIDUzYzcwMCBtdXN0IGJlIGludGVyZmFjZWQgdG8gYSBidXMsIHlvdSBuZWVkIHRvIHdyYXBwZXIgdGhlCitjYXJkIGRldGVjdG9yIGFyb3VuZCB0aGlzIGRyaXZlci4gIEZvciBhbiBleGFtcGxlLCBzZWUgdGhlCitOQ1JfRDcwMC5bY2hdIG9yIGxhc2k3MDAuW2NoXSBmaWxlcy4KKworVGhlIGNvbW1lbnRzIGluIHRoZSA1M2M3MDAuW2NoXSBmaWxlcyB0ZWxsIHlvdSB3aGljaCBwYXJ0cyB5b3UgbmVlZCB0bworZmlsbCBpbiB0byBnZXQgdGhlIGRyaXZlciB3b3JraW5nLgorCisKK0NvbXBpbGUgVGltZSBGbGFncworPT09PT09PT09PT09PT09PT09CisKK1RoZSBkcml2ZXIgbWF5IGJlIGVpdGhlciBpbyBtYXBwZWQgb3IgbWVtb3J5IG1hcHBlZC4gIFRoaXMgaXMKK3NlbGVjdGFibGUgYnkgY29uZmlndXJhdGlvbiBmbGFnczoKKworQ09ORklHXzUzQzcwMF9NRU1fTUFQUEVECisKK2RlZmluZSBpZiB0aGUgZHJpdmVyIGlzIG1lbW9yeSBtYXBwZWQuCisKK0NPTkZJR181M0M3MDBfSU9fTUFQUEVECisKK2RlZmluZSBpZiB0aGUgZHJpdmVyIGlzIHRvIGJlIGlvIG1hcHBlZC4KKworT25lIG9yIG90aGVyIG9mIHRoZSBhYm92ZSBmbGFncyAqbXVzdCogYmUgZGVmaW5lZC4KKworT3RoZXIgZmxhZ3MgYXJlOgorCitDT05GSUdfNTNDNzAwX0xFX09OX0JFCisKK2RlZmluZSBpZiB0aGUgY2hpcHNldCBtdXN0IGJlIHN1cHBvcnRlZCBpbiBsaXR0bGUgZW5kaWFuIG1vZGUgb24gYSBiaWcKK2VuZGlhbiBhcmNoaXRlY3R1cmUgKHVzZWQgZm9yIHRoZSA3MDAgb24gcGFyaXNjKS4KKworQ09ORklHXzUzQzcwMF9VU0VfQ09OU0lTVEVOVAorCithbGxvY2F0ZSBjb25zaXN0ZW50IG1lbW9yeSAoc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB5b3VyIGFyY2hpdGVjdHVyZQoraGFzIGEgbWl4dHVyZSBvZiBjb25zaXN0ZW50IGFuZCBpbmNvbnNpc3RlbnQgbWVtb3J5KS4gIEZ1bGx5Citjb25zaXN0ZW50IG9yIGZ1bGx5IGluY29uc2lzdGVudCBhcmNoaXRlY3R1cmVzIHNob3VsZCBub3QgZGVmaW5lIHRoaXMuCisKKworVXNpbmcgdGhlIENoaXAgQ29yZSBEcml2ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0luIG9yZGVyIHRvIHBsdW1iIHRoZSA1M2M3MDAgY2hpcCBjb3JlIGRyaXZlciBpbnRvIGEgd29ya2luZyBTQ1NJCitkcml2ZXIsIHlvdSBuZWVkIHRvIGtub3cgdGhyZWUgdGhpbmdzIGFib3V0IHRoZSB3YXkgdGhlIGNoaXAgaXMgd2lyZWQKK2ludG8geW91ciBzeXN0ZW0gKG9yIGV4cGFuc2lvbiBjYXJkKS4KKworMS4gVGhlIGNsb2NrIHNwZWVkIG9mIHRoZSBTQ1NJIGNvcmUKKzIuIFRoZSBpbnRlcnJ1cHQgbGluZSB1c2VkCiszLiBUaGUgbWVtb3J5IChvciBpbyBzcGFjZSkgbG9jYXRpb24gb2YgdGhlIDUzYzcwMCByZWdpc3RlcnMuCisKK09wdGlvbmFsbHksIHlvdSBtYXkgYWxzbyBuZWVkIHRvIGtub3cgb3RoZXIgdGhpbmdzLCBsaWtlIGhvdyB0byByZWFkCit0aGUgU0NTSSBJZCBmcm9tIHRoZSBjYXJkIGJpb3Mgb3Igd2hldGhlciB0aGUgY2hpcCBpcyB3aXJlZCBmb3IKK2RpZmZlcmVudGlhbCBvcGVyYXRpb24uCisKK1VzdWFsbHkgeW91IGNhbiBmaW5kIGl0ZW1zIDIuIGFuZCAzLiBmcm9tIGdlbmVyYWwgc3BlYy4gZG9jdW1lbnRzIG9yCitldmVuIGJ5IGV4YW1pbmluZyB0aGUgY29uZmlndXJhdGlvbiBvZiBhIHdvcmtpbmcgZHJpdmVyIHVuZGVyIGFub3RoZXIKK29wZXJhdGluZyBzeXN0ZW0uCisKK1RoZSBjbG9jayBzcGVlZCBpcyB1c3VhbGx5IGJ1cmllZCBkZWVwIGluIHRoZSB0ZWNobmljYWwgbGl0ZXJhdHVyZS4KK0l0IGlzIHJlcXVpcmVkIGJlY2F1c2UgaXQgaXMgdXNlZCB0byBzZXQgdXAgYm90aCB0aGUgc3luY2hyb25vdXMgYW5kCithc3luY2hyb25vdXMgZGl2aWRlcnMgZm9yIHRoZSBjaGlwLiAgQXMgYSBnZW5lcmFsIHJ1bGUgb2YgdGh1bWIsCittYW51ZmFjdHVyZXJzIHNldCB0aGUgY2xvY2sgc3BlZWQgYXQgdGhlIGxvd2VzdCBwb3NzaWJsZSBzZXR0aW5nCitjb25zaXN0ZW50IHdpdGggdGhlIGJlc3Qgb3BlcmF0aW9uIG9mIHRoZSBjaGlwIChhbHRob3VnaCBzb21lIGNob29zZQordG8gZHJpdmUgaXQgb2ZmIHRoZSBDUFUgb3IgYnVzIGNsb2NrIHJhdGhlciB0aGFuIGdvaW5nIHRvIHRoZSBleHBlbnNlCitvZiBhbiBleHRyYSBjbG9jayBjaGlwKS4gIFRoZSBiZXN0IG9wZXJhdGlvbiBjbG9jayBzcGVlZHMgYXJlOgorCis1M2M3MDAgLSAyNU1IegorNTNjNzAwLTY2IC0gNTBNSHoKKzUzYzcxMCAtIDQwTWh6CisKK1dyaXRpbmcgWW91ciBHbHVlIERyaXZlcgorPT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgd2lsbCBiZSBhIHN0YW5kYXJkIFNDU0kgZHJpdmVyIChJIGRvbid0IGtub3cgb2YgYSBnb29kIGRvY3VtZW50CitkZXNjcmliaW5nIHRoaXMsIGp1c3QgY29weSBmcm9tIHNvbWUgb3RoZXIgZHJpdmVyKSB3aXRoIGF0IGxlYXN0IGEKK2RldGVjdCBhbmQgcmVsZWFzZSBlbnRyeS4KKworSW4gdGhlIGRldGVjdCByb3V0aW5lLCB5b3UgbmVlZCB0byBhbGxvY2F0ZSBhIHN0cnVjdAorTkNSXzcwMF9Ib3N0X1BhcmFtZXRlcnMgc2l6ZWQgbWVtb3J5IGFyZWEgYW5kIGNsZWFyIGl0IChzbyB0aGF0IHRoZQorZGVmYXVsdCB2YWx1ZXMgZm9yIGV2ZXJ5dGhpbmcgYXJlIDApLiAgVGhlbiB5b3UgbXVzdCBmaWxsIGluIHRoZQorcGFyYW1ldGVycyB0aGF0IG1hdHRlciB0byB5b3UgKHNlZSBiZWxvdyksIHBsdW1iIHRoZSBOQ1JfNzAwX2ludHIKK3JvdXRpbmUgaW50byB0aGUgaW50ZXJydXB0IGxpbmUgYW5kIGNhbGwgTkNSXzcwMF9kZXRlY3Qgd2l0aCB0aGUgaG9zdAordGVtcGxhdGUgYW5kIHRoZSBuZXcgcGFyYW1ldGVycyBhcyBhcmd1bWVudHMuICBZb3Ugc2hvdWxkIGFsc28gY2FsbAordGhlIHJlbGV2YW50IHJlcXVlc3RfKl9yZWdpb24gZnVuY3Rpb24gYW5kIHBsYWNlIHRoZSByZWdpc3RlciBiYXNlCithZGRyZXNzIGludG8gdGhlIGBiYXNlJyBwb2ludGVyIG9mIHRoZSBob3N0IHBhcmFtZXRlcnMuCisKK0luIHRoZSByZWxlYXNlIHJvdXRpbmUsIHlvdSBtdXN0IGZyZWUgdGhlIE5DUl83MDBfSG9zdF9QYXJhbWV0ZXJzIHRoYXQKK3lvdSBhbGxvY2F0ZWQsIGNhbGwgdGhlIGNvcnJlc3BvbmRpbmcgcmVsZWFzZV8qX3JlZ2lvbiBhbmQgZnJlZSB0aGUKK2ludGVycnVwdC4KKworSGFuZGxpbmcgSW50ZXJydXB0cworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiBnZW5lcmFsLCB5b3Ugc2hvdWxkIGp1c3QgcGx1bWIgdGhlIGNhcmQncyBpbnRlcnJ1cHQgbGluZSBpbiB3aXRoIAorCityZXF1ZXN0X2lycShpcnEsIE5DUl83MDBfaW50ciwgPGlycSBmbGFncz4sIDxkcml2ZXIgbmFtZT4sIGhvc3QpOworCit3aGVyZSBob3N0IGlzIHRoZSByZXR1cm4gZnJvbSB0aGUgcmVsZXZhbnQgTkNSXzcwMF9kZXRlY3QoKSByb3V0aW5lLgorCitZb3UgbWF5IGFsc28gd3JpdGUgeW91ciBvd24gaW50ZXJydXB0IGhhbmRsaW5nIHJvdXRpbmUgd2hpY2ggY2FsbHMKK05DUl83MDBfaW50cigpIGRpcmVjdGx5LiAgSG93ZXZlciwgeW91IHNob3VsZCBvbmx5IHJlYWxseSBkbyB0aGlzIGlmCit5b3UgaGF2ZSBhIGNhcmQgd2l0aCBtb3JlIHRoYW4gb25lIGNoaXAgb24gaXQgYW5kIHlvdSBjYW4gcmVhZCBhCityZWdpc3RlciB0byB0ZWxsIHdoaWNoIHNldCBvZiBjaGlwcyB3YW50cyB0aGUgaW50ZXJydXB0LgorCitTZXR0YWJsZSBOQ1JfNzAwX0hvc3RfUGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBhcmUgYSBsaXN0IG9mIHRoZSB1c2VyIHNldHRhYmxlIHBhcmFtZXRlcnM6CisKK2Nsb2NrOiAoTUFOREFUT1JZKQorCitTZXQgdG8gdGhlIGNsb2NrIHNwZWVkIG9mIHRoZSBjaGlwIGluIE1Iei4KKworYmFzZTogKE1BTkRBVE9SWSkKKworc2V0IHRvIHRoZSBiYXNlIG9mIHRoZSBpbyBvciBtZW0gcmVnaW9uIGZvciB0aGUgcmVnaXN0ZXIgc2V0LiBPbiA2NAorYml0IGFyY2hpdGVjdHVyZXMgdGhpcyBpcyBvbmx5IDMyIGJpdHMgd2lkZSwgc28gdGhlIHJlZ2lzdGVycyBtdXN0IGJlCittYXBwZWQgaW50byB0aGUgbG93IDMyIGJpdHMgb2YgbWVtb3J5LgorCitwY2lfZGV2OiAoT1BUSU9OQUwpCisKK3NldCB0byB0aGUgUENJIGJvYXJkIGRldmljZS4gIExlYXZlIE5VTEwgZm9yIGEgbm9uLXBjaSBib2FyZC4gIFRoaXMgaXMKK3VzZWQgZm9yIHRoZSBwY2lfYWxsb2NfY29uc2lzdGVudCgpIGFuZCBwY2lfbWFwXyooKSBmdW5jdGlvbnMuCisKK2Rtb2RlX2V4dHJhOiAoT1BUSU9OQUwsIDUzYzcxMCBvbmx5KQorCitleHRyYSBmbGFncyBmb3IgdGhlIERNT0RFIHJlZ2lzdGVyLiAgVGhlc2UgYXJlIHVzZWQgdG8gY29udHJvbCBidXMKK291dHB1dCBwaW5zIG9uIHRoZSA3MTAuICBUaGUgc2V0dGluZ3Mgc2hvdWxkIGJlIGEgY29tYmluYXRpb24gb2YKK0RNT0RFX0ZDMSBhbmQgRE1PREVfRkMyLiAgV2hhdCB0aGVzZSBwaW5zIGFjdHVhbGx5IGRvIGlzIGVudGlyZWx5IHVwCit0byB0aGUgYm9hcmQgZGVzaWduZXIuICBVc3VhbGx5IGl0IGlzIHNhZmUgdG8gaWdub3JlIHRoaXMgc2V0dGluZy4KKworZGlmZmVyZW50aWFsOiAoT1BUSU9OQUwpCisKK3NldCB0byAxIGlmIHRoZSBjaGlwIGRyaXZlcyBhIGRpZmZlcmVudGlhbCBidXMuCisKK2ZvcmNlX2xlX29uX2JlOiAoT1BUSU9OQUwsIG9ubHkgaWYgQ09ORklHXzUzQzcwMF9MRV9PTl9CRSBpcyBzZXQpCisKK3NldCB0byAxIGlmIHRoZSBjaGlwIGlzIG9wZXJhdGluZyBpbiBsaXR0bGUgZW5kaWFuIG1vZGUgb24gYSBiaWcKK2VuZGlhbiBhcmNoaXRlY3R1cmUuCisKK2NoaXA3MTA6IChPUFRJT05BTCkKKworc2V0IHRvIDEgaWYgdGhlIGNoaXAgaXMgYSA1M2M3MTAuCisKK2J1cnN0X2Rpc2FibGU6IChPUFRJT05BTCwgNTNjNzEwIG9ubHkpCisKK2Rpc2FibGUgOCBieXRlIGJ1cnN0aW5nIGZvciBETUEgdHJhbnNmZXJzLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvQnVzTG9naWMudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL0J1c0xvZ2ljLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODAyM2JhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0J1c0xvZ2ljLnR4dApAQCAtMCwwICsxLDU2NiBAQAorCSAgIEJ1c0xvZ2ljIE11bHRpTWFzdGVyIGFuZCBGbGFzaFBvaW50IFNDU0kgRHJpdmVyIGZvciBMaW51eAorCisJCQkgVmVyc2lvbiAyLjAuMTUgZm9yIExpbnV4IDIuMAorCQkJIFZlcnNpb24gMi4xLjE1IGZvciBMaW51eCAyLjEKKworCQkJICAgICAgUFJPRFVDVElPTiBSRUxFQVNFCisKKwkJCQkxNyBBdWd1c3QgMTk5OAorCisJCQkgICAgICAgTGVvbmFyZCBOLiBadWJrb2ZmCisJCQkgICAgICAgRGFuZGVsaW9uIERpZ2l0YWwKKwkJCSAgICAgICBsbnpAZGFuZGVsaW9uLmNvbQorCisJIENvcHlyaWdodCAxOTk1LTE5OTggYnkgTGVvbmFyZCBOLiBadWJrb2ZmIDxsbnpAZGFuZGVsaW9uLmNvbT4KKworCisJCQkJIElOVFJPRFVDVElPTgorCitCdXNMb2dpYywgSW5jLiBkZXNpZ25lZCBhbmQgbWFudWZhY3R1cmVkIGEgdmFyaWV0eSBvZiBoaWdoIHBlcmZvcm1hbmNlIFNDU0kKK2hvc3QgYWRhcHRlcnMgd2hpY2ggc2hhcmUgYSBjb21tb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFjcm9zcyBhIGRpdmVyc2UKK2NvbGxlY3Rpb24gb2YgYnVzIGFyY2hpdGVjdHVyZXMgYnkgdmlydHVlIG9mIHRoZWlyIE11bHRpTWFzdGVyIEFTSUMgdGVjaG5vbG9neS4KK0J1c0xvZ2ljIHdhcyBhY3F1aXJlZCBieSBNeWxleCBDb3Jwb3JhdGlvbiBpbiBGZWJydWFyeSAxOTk2LCBidXQgdGhlIHByb2R1Y3RzCitzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIgb3JpZ2luYXRlZCB1bmRlciB0aGUgQnVzTG9naWMgbmFtZSBhbmQgc28gdGhhdCBuYW1lIGlzCityZXRhaW5lZCBpbiB0aGUgc291cmNlIGNvZGUgYW5kIGRvY3VtZW50YXRpb24uCisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIGFsbCBwcmVzZW50IEJ1c0xvZ2ljIE11bHRpTWFzdGVyIEhvc3QgQWRhcHRlcnMsIGFuZCBzaG91bGQKK3N1cHBvcnQgYW55IGZ1dHVyZSBNdWx0aU1hc3RlciBkZXNpZ25zIHdpdGggbGl0dGxlIG9yIG5vIG1vZGlmaWNhdGlvbi4gIE1vcmUKK3JlY2VudGx5LCBCdXNMb2dpYyBpbnRyb2R1Y2VkIHRoZSBGbGFzaFBvaW50IEhvc3QgQWRhcHRlcnMsIHdoaWNoIGFyZSBsZXNzCitjb3N0bHkgYW5kIHJlbHkgb24gdGhlIGhvc3QgQ1BVLCByYXRoZXIgdGhhbiBpbmNsdWRpbmcgYW4gb25ib2FyZCBwcm9jZXNzb3IuCitEZXNwaXRlIG5vdCBoYXZpbmcgYW4gb25ib2FyZCBDUFUsIHRoZSBGbGFzaFBvaW50IEhvc3QgQWRhcHRlcnMgcGVyZm9ybSB2ZXJ5Cit3ZWxsIGFuZCBoYXZlIHZlcnkgbG93IGNvbW1hbmQgbGF0ZW5jeS4gIEJ1c0xvZ2ljIGhhcyByZWNlbnRseSBwcm92aWRlZCBtZSB3aXRoCit0aGUgRmxhc2hQb2ludCBEcml2ZXIgRGV2ZWxvcGVyJ3MgS2l0LCB3aGljaCBjb21wcmlzZXMgZG9jdW1lbnRhdGlvbiBhbmQgZnJlZWx5CityZWRpc3RyaWJ1dGFibGUgc291cmNlIGNvZGUgZm9yIHRoZSBGbGFzaFBvaW50IFNDQ0IgTWFuYWdlci4gIFRoZSBTQ0NCIE1hbmFnZXIKK2lzIHRoZSBsaWJyYXJ5IG9mIGNvZGUgdGhhdCBydW5zIG9uIHRoZSBob3N0IENQVSBhbmQgcGVyZm9ybXMgZnVuY3Rpb25zCithbmFsb2dvdXMgdG8gdGhlIGZpcm13YXJlIG9uIHRoZSBNdWx0aU1hc3RlciBIb3N0IEFkYXB0ZXJzLiAgVGhhbmtzIHRvIHRoZWlyCitoYXZpbmcgcHJvdmlkZWQgdGhlIFNDQ0IgTWFuYWdlciwgdGhpcyBkcml2ZXIgbm93IHN1cHBvcnRzIHRoZSBGbGFzaFBvaW50IEhvc3QKK0FkYXB0ZXJzIGFzIHdlbGwuCisKK015IHByaW1hcnkgZ29hbHMgaW4gd3JpdGluZyB0aGlzIGNvbXBsZXRlbHkgbmV3IEJ1c0xvZ2ljIGRyaXZlciBmb3IgTGludXggYXJlCit0byBhY2hpZXZlIHRoZSBmdWxsIHBlcmZvcm1hbmNlIHRoYXQgQnVzTG9naWMgU0NTSSBIb3N0IEFkYXB0ZXJzIGFuZCBtb2Rlcm4KK1NDU0kgcGVyaXBoZXJhbHMgYXJlIGNhcGFibGUgb2YsIGFuZCB0byBwcm92aWRlIGEgaGlnaGx5IHJvYnVzdCBkcml2ZXIgdGhhdCBjYW4KK2JlIGRlcGVuZGVkIHVwb24gZm9yIGhpZ2ggcGVyZm9ybWFuY2UgbWlzc2lvbiBjcml0aWNhbCBhcHBsaWNhdGlvbnMuICBBbGwgb2YKK3RoZSBtYWpvciBwZXJmb3JtYW5jZSBmZWF0dXJlcyBjYW4gYmUgY29uZmlndXJlZCBmcm9tIHRoZSBMaW51eCBrZXJuZWwgY29tbWFuZAorbGluZSBvciBhdCBtb2R1bGUgaW5pdGlhbGl6YXRpb24gdGltZSwgYWxsb3dpbmcgaW5kaXZpZHVhbCBpbnN0YWxsYXRpb25zIHRvCit0dW5lIGRyaXZlciBwZXJmb3JtYW5jZSBhbmQgZXJyb3IgcmVjb3ZlcnkgdG8gdGhlaXIgcGFydGljdWxhciBuZWVkcy4KKworVGhlIGxhdGVzdCBpbmZvcm1hdGlvbiBvbiBMaW51eCBzdXBwb3J0IGZvciBCdXNMb2dpYyBTQ1NJIEhvc3QgQWRhcHRlcnMsIGFzCit3ZWxsIGFzIHRoZSBtb3N0IHJlY2VudCByZWxlYXNlIG9mIHRoaXMgZHJpdmVyIGFuZCB0aGUgbGF0ZXN0IGZpcm13YXJlIGZvciB0aGUKK0JULTk0OC85NTgvOTU4RCwgd2lsbCBhbHdheXMgYmUgYXZhaWxhYmxlIGZyb20gbXkgTGludXggSG9tZSBQYWdlIGF0IFVSTAorImh0dHA6Ly93d3cuZGFuZGVsaW9uLmNvbS9MaW51eC8iLgorCitCdWcgcmVwb3J0cyBzaG91bGQgYmUgc2VudCB2aWEgZWxlY3Ryb25pYyBtYWlsIHRvICJsbnpAZGFuZGVsaW9uLmNvbSIuICBQbGVhc2UKK2luY2x1ZGUgd2l0aCB0aGUgYnVnIHJlcG9ydCB0aGUgY29tcGxldGUgY29uZmlndXJhdGlvbiBtZXNzYWdlcyByZXBvcnRlZCBieSB0aGUKK2RyaXZlciBhbmQgU0NTSSBzdWJzeXN0ZW0gYXQgc3RhcnR1cCwgYWxvbmcgd2l0aCBhbnkgc3Vic2VxdWVudCBzeXN0ZW0gbWVzc2FnZXMKK3JlbGV2YW50IHRvIFNDU0kgb3BlcmF0aW9ucywgYW5kIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncworaGFyZHdhcmUgY29uZmlndXJhdGlvbi4KKworTXlsZXggaGFzIGJlZW4gYW4gZXhjZWxsZW50IGNvbXBhbnkgdG8gd29yayB3aXRoIGFuZCBJIGhpZ2hseSByZWNvbW1lbmQgdGhlaXIKK3Byb2R1Y3RzIHRvIHRoZSBMaW51eCBjb21tdW5pdHkuICBJbiBOb3ZlbWJlciAxOTk1LCBJIHdhcyBvZmZlcmVkIHRoZQorb3Bwb3J0dW5pdHkgdG8gYmVjb21lIGEgYmV0YSB0ZXN0IHNpdGUgZm9yIHRoZWlyIGxhdGVzdCBNdWx0aU1hc3RlciBwcm9kdWN0LAordGhlIEJULTk0OCBQQ0kgVWx0cmEgU0NTSSBIb3N0IEFkYXB0ZXIsIGFuZCB0aGVuIGFnYWluIGZvciB0aGUgQlQtOTU4IFBDSSBXaWRlCitVbHRyYSBTQ1NJIEhvc3QgQWRhcHRlciBpbiBKYW51YXJ5IDE5OTYuICBUaGlzIHdhcyBtdXR1YWxseSBiZW5lZmljaWFsIHNpbmNlCitNeWxleCByZWNlaXZlZCBhIGRlZ3JlZSBhbmQga2luZCBvZiB0ZXN0aW5nIHRoYXQgdGhlaXIgb3duIHRlc3RpbmcgZ3JvdXAgY2Fubm90CityZWFkaWx5IGFjaGlldmUsIGFuZCB0aGUgTGludXggY29tbXVuaXR5IGhhcyBhdmFpbGFibGUgaGlnaCBwZXJmb3JtYW5jZSBob3N0CithZGFwdGVycyB0aGF0IGhhdmUgYmVlbiB3ZWxsIHRlc3RlZCB3aXRoIExpbnV4IGV2ZW4gYmVmb3JlIGJlaW5nIGJyb3VnaHQgdG8KK21hcmtldC4gIFRoaXMgcmVsYXRpb25zaGlwIGhhcyBhbHNvIGdpdmVuIG1lIHRoZSBvcHBvcnR1bml0eSB0byBpbnRlcmFjdAorZGlyZWN0bHkgd2l0aCB0aGVpciB0ZWNobmljYWwgc3RhZmYsIHRvIHVuZGVyc3RhbmQgbW9yZSBhYm91dCB0aGUgaW50ZXJuYWwKK3dvcmtpbmdzIG9mIHRoZWlyIHByb2R1Y3RzLCBhbmQgaW4gdHVybiB0byBlZHVjYXRlIHRoZW0gYWJvdXQgdGhlIG5lZWRzIGFuZAorcG90ZW50aWFsIG9mIHRoZSBMaW51eCBjb21tdW5pdHkuCisKK01vcmUgcmVjZW50bHksIE15bGV4IGhhcyByZWFmZmlybWVkIHRoZSBjb21wYW55J3MgaW50ZXJlc3QgaW4gc3VwcG9ydGluZyB0aGUKK0xpbnV4IGNvbW11bml0eSwgYW5kIEkgYW0gbm93IHdvcmtpbmcgb24gYSBMaW51eCBkcml2ZXIgZm9yIHRoZSBEQUM5NjAgUENJIFJBSUQKK0NvbnRyb2xsZXJzLiAgTXlsZXgncyBpbnRlcmVzdCBhbmQgc3VwcG9ydCBpcyBncmVhdGx5IGFwcHJlY2lhdGVkLgorCitVbmxpa2Ugc29tZSBvdGhlciB2ZW5kb3JzLCBpZiB5b3UgY29udGFjdCBNeWxleCBUZWNobmljYWwgU3VwcG9ydCB3aXRoIGEKK3Byb2JsZW0gYW5kIGFyZSBydW5uaW5nIExpbnV4LCB0aGV5IHdpbGwgbm90IHRlbGwgeW91IHRoYXQgeW91ciB1c2Ugb2YgdGhlaXIKK3Byb2R1Y3RzIGlzIHVuc3VwcG9ydGVkLiAgVGhlaXIgbGF0ZXN0IHByb2R1Y3QgbWFya2V0aW5nIGxpdGVyYXR1cmUgZXZlbiBzdGF0ZXMKKyJNeWxleCBTQ1NJIGhvc3QgYWRhcHRlcnMgYXJlIGNvbXBhdGlibGUgd2l0aCBhbGwgbWFqb3Igb3BlcmF0aW5nIHN5c3RlbXMKK2luY2x1ZGluZzogLi4uIExpbnV4IC4uLiIuCisKK015bGV4IENvcnBvcmF0aW9uIGlzIGxvY2F0ZWQgYXQgMzQ1NTEgQXJkZW53b29kIEJsdmQuLCBGcmVtb250LCBDYWxpZm9ybmlhCis5NDU1NSwgVVNBIGFuZCBjYW4gYmUgcmVhY2hlZCBhdCA1MTAvNzk2LTYxMDAgb3Igb24gdGhlIFdvcmxkIFdpZGUgV2ViIGF0CitodHRwOi8vd3d3Lm15bGV4LmNvbS4gIE15bGV4IEhCQSBUZWNobmljYWwgU3VwcG9ydCBjYW4gYmUgcmVhY2hlZCBieSBlbGVjdHJvbmljCittYWlsIGF0IHRlY2hzdXBAbXlsZXguY29tLCBieSBWb2ljZSBhdCA1MTAvNjA4LTI0MDAsIG9yIGJ5IEZBWCBhdCA1MTAvNzQ1LTc3MTUuCitDb250YWN0IGluZm9ybWF0aW9uIGZvciBvZmZpY2VzIGluIEV1cm9wZSBhbmQgSmFwYW4gaXMgYXZhaWxhYmxlIG9uIHRoZSBXZWIKK3NpdGUuCisKKworCQkJCURSSVZFUiBGRUFUVVJFUworCitvIENvbmZpZ3VyYXRpb24gUmVwb3J0aW5nIGFuZCBUZXN0aW5nCisKKyAgRHVyaW5nIHN5c3RlbSBpbml0aWFsaXphdGlvbiwgdGhlIGRyaXZlciByZXBvcnRzIGV4dGVuc2l2ZWx5IG9uIHRoZSBob3N0CisgIGFkYXB0ZXIgaGFyZHdhcmUgY29uZmlndXJhdGlvbiwgaW5jbHVkaW5nIHRoZSBzeW5jaHJvbm91cyB0cmFuc2ZlciBwYXJhbWV0ZXJzCisgIHJlcXVlc3RlZCBhbmQgbmVnb3RpYXRlZCB3aXRoIGVhY2ggdGFyZ2V0IGRldmljZS4gIEF1dG9TQ1NJIHNldHRpbmdzIGZvcgorICBTeW5jaHJvbm91cyBOZWdvdGlhdGlvbiwgV2lkZSBOZWdvdGlhdGlvbiwgYW5kIERpc2Nvbm5lY3QvUmVjb25uZWN0IGFyZQorICByZXBvcnRlZCBmb3IgZWFjaCB0YXJnZXQgZGV2aWNlLCBhcyB3ZWxsIGFzIHRoZSBzdGF0dXMgb2YgVGFnZ2VkIFF1ZXVpbmcuCisgIElmIHRoZSBzYW1lIHNldHRpbmcgaXMgaW4gZWZmZWN0IGZvciBhbGwgdGFyZ2V0IGRldmljZXMsIHRoZW4gYSBzaW5nbGUgd29yZAorICBvciBwaHJhc2UgaXMgdXNlZDsgb3RoZXJ3aXNlLCBhIGxldHRlciBpcyBwcm92aWRlZCBmb3IgZWFjaCB0YXJnZXQgZGV2aWNlIHRvCisgIGluZGljYXRlIHRoZSBpbmRpdmlkdWFsIHN0YXR1cy4gIFRoZSBmb2xsb3dpbmcgZXhhbXBsZXMKKyAgc2hvdWxkIGNsYXJpZnkgdGhpcyByZXBvcnRpbmcgZm9ybWF0OgorCisgICAgU3luY2hyb25vdXMgTmVnb3RpYXRpb246IFVsdHJhCisKKyAgICAgIFN5bmNocm9ub3VzIG5lZ290aWF0aW9uIGlzIGVuYWJsZWQgZm9yIGFsbCB0YXJnZXQgZGV2aWNlcyBhbmQgdGhlIGhvc3QKKyAgICAgIGFkYXB0ZXIgd2lsbCBhdHRlbXB0IHRvIG5lZ290aWF0ZSBmb3IgMjAuMCBtZWdhLXRyYW5zZmVycy9zZWNvbmQuCisKKyAgICBTeW5jaHJvbm91cyBOZWdvdGlhdGlvbjogRmFzdAorCisgICAgICBTeW5jaHJvbm91cyBuZWdvdGlhdGlvbiBpcyBlbmFibGVkIGZvciBhbGwgdGFyZ2V0IGRldmljZXMgYW5kIHRoZSBob3N0CisgICAgICBhZGFwdGVyIHdpbGwgYXR0ZW1wdCB0byBuZWdvdGlhdGUgZm9yIDEwLjAgbWVnYS10cmFuc2ZlcnMvc2Vjb25kLgorCisgICAgU3luY2hyb25vdXMgTmVnb3RpYXRpb246IFNsb3cKKworICAgICAgU3luY2hyb25vdXMgbmVnb3RpYXRpb24gaXMgZW5hYmxlZCBmb3IgYWxsIHRhcmdldCBkZXZpY2VzIGFuZCB0aGUgaG9zdAorICAgICAgYWRhcHRlciB3aWxsIGF0dGVtcHQgdG8gbmVnb3RpYXRlIGZvciA1LjAgbWVnYS10cmFuc2ZlcnMvc2Vjb25kLgorCisgICAgU3luY2hyb25vdXMgTmVnb3RpYXRpb246IERpc2FibGVkCisKKyAgICAgIFN5bmNocm9ub3VzIG5lZ290aWF0aW9uIGlzIGRpc2FibGVkIGFuZCBhbGwgdGFyZ2V0IGRldmljZXMgYXJlIGxpbWl0ZWQgdG8KKyAgICAgIGFzeW5jaHJvbm91cyBvcGVyYXRpb24uCisKKyAgICBTeW5jaHJvbm91cyBOZWdvdGlhdGlvbjogVUZTTlVVVSNVVVVVVVVVVQorCisgICAgICBTeW5jaHJvbm91cyBuZWdvdGlhdGlvbiB0byBVbHRyYSBzcGVlZCBpcyBlbmFibGVkIGZvciB0YXJnZXQgZGV2aWNlcyAwCisgICAgICBhbmQgNCB0aHJvdWdoIDE1LCB0byBGYXN0IHNwZWVkIGZvciB0YXJnZXQgZGV2aWNlIDEsIHRvIFNsb3cgc3BlZWQgZm9yCisgICAgICB0YXJnZXQgZGV2aWNlIDIsIGFuZCBpcyBub3QgcGVybWl0dGVkIHRvIHRhcmdldCBkZXZpY2UgMy4gIFRoZSBob3N0CisgICAgICBhZGFwdGVyJ3MgU0NTSSBJRCBpcyByZXByZXNlbnRlZCBieSB0aGUgIiMiLgorCisgICAgVGhlIHN0YXR1cyBvZiBXaWRlIE5lZ290aWF0aW9uLCBEaXNjb25uZWN0L1JlY29ubmVjdCwgYW5kIFRhZ2dlZCBRdWV1aW5nCisgICAgYXJlIHJlcG9ydGVkIGFzICJFbmFibGVkIiwgRGlzYWJsZWQiLCBvciBhIHNlcXVlbmNlIG9mICJZIiBhbmQgIk4iIGxldHRlcnMuCisKK28gUGVyZm9ybWFuY2UgRmVhdHVyZXMKKworICBCdXNMb2dpYyBTQ1NJIEhvc3QgQWRhcHRlcnMgZGlyZWN0bHkgaW1wbGVtZW50IFNDU0ktMiBUYWdnZWQgUXVldWluZywgYW5kIHNvCisgIHN1cHBvcnQgaGFzIGJlZW4gaW5jbHVkZWQgaW4gdGhlIGRyaXZlciB0byB1dGlsaXplIHRhZ2dlZCBxdWV1aW5nIHdpdGggYW55CisgIHRhcmdldCBkZXZpY2VzIHRoYXQgcmVwb3J0IGhhdmluZyB0aGUgdGFnZ2VkIHF1ZXVpbmcgY2FwYWJpbGl0eS4gIFRhZ2dlZAorICBxdWV1aW5nIGFsbG93cyBmb3IgbXVsdGlwbGUgb3V0c3RhbmRpbmcgY29tbWFuZHMgdG8gYmUgaXNzdWVkIHRvIGVhY2ggdGFyZ2V0CisgIGRldmljZSBvciBsb2dpY2FsIHVuaXQsIGFuZCBjYW4gaW1wcm92ZSBJL08gcGVyZm9ybWFuY2Ugc3Vic3RhbnRpYWxseS4gIEluCisgIGFkZGl0aW9uLCBCdXNMb2dpYydzIFN0cmljdCBSb3VuZCBSb2JpbiBNb2RlIGlzIHVzZWQgdG8gb3B0aW1pemUgaG9zdCBhZGFwdGVyCisgIHBlcmZvcm1hbmNlLCBhbmQgc2NhdHRlci9nYXRoZXIgSS9PIGNhbiBzdXBwb3J0IGFzIG1hbnkgc2VnbWVudHMgYXMgY2FuIGJlCisgIGVmZmVjdGl2ZWx5IHV0aWxpemVkIGJ5IHRoZSBMaW51eCBJL08gc3Vic3lzdGVtLiAgQ29udHJvbCBvdmVyIHRoZSB1c2Ugb2YKKyAgdGFnZ2VkIHF1ZXVpbmcgZm9yIGVhY2ggdGFyZ2V0IGRldmljZSBhcyB3ZWxsIGFzIGluZGl2aWR1YWwgc2VsZWN0aW9uIG9mIHRoZQorICB0YWdnZWQgcXVldWUgZGVwdGggaXMgYXZhaWxhYmxlIHRocm91Z2ggZHJpdmVyIG9wdGlvbnMgcHJvdmlkZWQgb24gdGhlIGtlcm5lbAorICBjb21tYW5kIGxpbmUgb3IgYXQgbW9kdWxlIGluaXRpYWxpemF0aW9uIHRpbWUuICBCeSBkZWZhdWx0LCB0aGUgcXVldWUgZGVwdGgKKyAgaXMgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIHRoZSBob3N0IGFkYXB0ZXIncyB0b3RhbCBxdWV1ZSBkZXB0aCBhbmQKKyAgdGhlIG51bWJlciwgdHlwZSwgc3BlZWQsIGFuZCBjYXBhYmlsaXRpZXMgb2YgdGhlIHRhcmdldCBkZXZpY2VzIGZvdW5kLiAgSW4KKyAgYWRkaXRpb24sIHRhZ2dlZCBxdWV1aW5nIGlzIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgd2hlbmV2ZXIgdGhlIGhvc3QgYWRhcHRlcgorICBmaXJtd2FyZSB2ZXJzaW9uIGlzIGtub3duIG5vdCB0byBpbXBsZW1lbnQgaXQgY29ycmVjdGx5LCBvciB3aGVuZXZlciBhIHRhZ2dlZAorICBxdWV1ZSBkZXB0aCBvZiAxIGlzIHNlbGVjdGVkLiAgVGFnZ2VkIHF1ZXVpbmcgaXMgYWxzbyBkaXNhYmxlZCBmb3IgaW5kaXZpZHVhbAorICB0YXJnZXQgZGV2aWNlcyBpZiBkaXNjb25uZWN0L3JlY29ubmVjdCBpcyBkaXNhYmxlZCBmb3IgdGhhdCBkZXZpY2UuCisKK28gUm9idXN0bmVzcyBGZWF0dXJlcworCisgIFRoZSBkcml2ZXIgaW1wbGVtZW50cyBleHRlbnNpdmUgZXJyb3IgcmVjb3ZlcnkgcHJvY2VkdXJlcy4gIFdoZW4gdGhlIGhpZ2hlcgorICBsZXZlbCBwYXJ0cyBvZiB0aGUgU0NTSSBzdWJzeXN0ZW0gcmVxdWVzdCB0aGF0IGEgdGltZWQgb3V0IGNvbW1hbmQgYmUgcmVzZXQsCisgIGEgc2VsZWN0aW9uIGlzIG1hZGUgYmV0d2VlbiBhIGZ1bGwgaG9zdCBhZGFwdGVyIGhhcmQgcmVzZXQgYW5kIFNDU0kgYnVzIHJlc2V0CisgIHZlcnN1cyBzZW5kaW5nIGEgYnVzIGRldmljZSByZXNldCBtZXNzYWdlIHRvIHRoZSBpbmRpdmlkdWFsIHRhcmdldCBkZXZpY2UKKyAgYmFzZWQgb24gdGhlIHJlY29tbWVuZGF0aW9uIG9mIHRoZSBTQ1NJIHN1YnN5c3RlbS4gIEVycm9yIHJlY292ZXJ5IHN0cmF0ZWdpZXMKKyAgYXJlIHNlbGVjdGFibGUgdGhyb3VnaCBkcml2ZXIgb3B0aW9ucyBpbmRpdmlkdWFsbHkgZm9yIGVhY2ggdGFyZ2V0IGRldmljZSwKKyAgYW5kIGFsc28gaW5jbHVkZSBzZW5kaW5nIGEgYnVzIGRldmljZSByZXNldCB0byB0aGUgc3BlY2lmaWMgdGFyZ2V0IGRldmljZQorICBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbW1hbmQgYmVpbmcgcmVzZXQsIGFzIHdlbGwgYXMgc3VwcHJlc3NpbmcgZXJyb3IKKyAgcmVjb3ZlcnkgZW50aXJlbHkgdG8gYXZvaWQgcGVydHVyYmluZyBhbiBpbXByb3Blcmx5IGZ1bmN0aW9uaW5nIGRldmljZS4gIElmCisgIHRoZSBidXMgZGV2aWNlIHJlc2V0IGVycm9yIHJlY292ZXJ5IHN0cmF0ZWd5IGlzIHNlbGVjdGVkIGFuZCBzZW5kaW5nIGEgYnVzCisgIGRldmljZSByZXNldCBkb2VzIG5vdCByZXN0b3JlIGNvcnJlY3Qgb3BlcmF0aW9uLCB0aGUgbmV4dCBjb21tYW5kIHRoYXQgaXMKKyAgcmVzZXQgd2lsbCBmb3JjZSBhIGZ1bGwgaG9zdCBhZGFwdGVyIGhhcmQgcmVzZXQgYW5kIFNDU0kgYnVzIHJlc2V0LiAgU0NTSSBidXMKKyAgcmVzZXRzIGNhdXNlZCBieSBvdGhlciBkZXZpY2VzIGFuZCBkZXRlY3RlZCBieSB0aGUgaG9zdCBhZGFwdGVyIGFyZSBhbHNvCisgIGhhbmRsZWQgYnkgaXNzdWluZyBhIHNvZnQgcmVzZXQgdG8gdGhlIGhvc3QgYWRhcHRlciBhbmQgcmUtaW5pdGlhbGl6YXRpb24uCisgIEZpbmFsbHksIGlmIHRhZ2dlZCBxdWV1aW5nIGlzIGFjdGl2ZSBhbmQgbW9yZSB0aGFuIG9uZSBjb21tYW5kIHJlc2V0IG9jY3VycworICBpbiBhIDEwIG1pbnV0ZSBpbnRlcnZhbCwgb3IgaWYgYSBjb21tYW5kIHJlc2V0IG9jY3VycyB3aXRoaW4gdGhlIGZpcnN0IDEwCisgIG1pbnV0ZXMgb2Ygb3BlcmF0aW9uLCB0aGVuIHRhZ2dlZCBxdWV1aW5nIHdpbGwgYmUgZGlzYWJsZWQgZm9yIHRoYXQgdGFyZ2V0CisgIGRldmljZS4gIFRoZXNlIGVycm9yIHJlY292ZXJ5IG9wdGlvbnMgaW1wcm92ZSBvdmVyYWxsIHN5c3RlbSByb2J1c3RuZXNzIGJ5CisgIHByZXZlbnRpbmcgaW5kaXZpZHVhbCBlcnJhbnQgZGV2aWNlcyBmcm9tIGNhdXNpbmcgdGhlIHN5c3RlbSBhcyBhIHdob2xlIHRvCisgIGxvY2sgdXAgb3IgY3Jhc2gsIGFuZCB0aGVyZWJ5IGFsbG93aW5nIGEgY2xlYW4gc2h1dGRvd24gYW5kIHJlc3RhcnQgYWZ0ZXIgdGhlCisgIG9mZmVuZGluZyBjb21wb25lbnQgaXMgcmVtb3ZlZC4KKworbyBQQ0kgQ29uZmlndXJhdGlvbiBTdXBwb3J0CisKKyAgT24gUENJIHN5c3RlbXMgcnVubmluZyBrZXJuZWxzIGNvbXBpbGVkIHdpdGggUENJIEJJT1Mgc3VwcG9ydCBlbmFibGVkLCB0aGlzCisgIGRyaXZlciB3aWxsIGludGVycm9nYXRlIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBhbmQgdXNlIHRoZSBJL08gcG9ydAorICBhZGRyZXNzZXMgYXNzaWduZWQgYnkgdGhlIHN5c3RlbSBCSU9TLCByYXRoZXIgdGhhbiB0aGUgSVNBIGNvbXBhdGlibGUgSS9PCisgIHBvcnQgYWRkcmVzc2VzLiAgVGhlIElTQSBjb21wYXRpYmxlIEkvTyBwb3J0IGFkZHJlc3MgaXMgdGhlbiBkaXNhYmxlZCBieSB0aGUKKyAgZHJpdmVyLiAgT24gUENJIHN5c3RlbXMgaXQgaXMgYWxzbyByZWNvbW1lbmRlZCB0aGF0IHRoZSBBdXRvU0NTSSB1dGlsaXR5IGJlCisgIHVzZWQgdG8gZGlzYWJsZSB0aGUgSVNBIGNvbXBhdGlibGUgSS9PIHBvcnQgZW50aXJlbHkgYXMgaXQgaXMgbm90IG5lY2Vzc2FyeS4KKyAgVGhlIElTQSBjb21wYXRpYmxlIEkvTyBwb3J0IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgb24gdGhlIEJULTk0OC85NTgvOTU4RC4KKworbyAvcHJvYyBGaWxlIFN5c3RlbSBTdXBwb3J0CisKKyAgQ29waWVzIG9mIHRoZSBob3N0IGFkYXB0ZXIgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiB0b2dldGhlciB3aXRoIHVwZGF0ZWQKKyAgZGF0YSB0cmFuc2ZlciBhbmQgZXJyb3IgcmVjb3Zlcnkgc3RhdGlzdGljcyBhcmUgYXZhaWxhYmxlIHRocm91Z2ggdGhlCisgIC9wcm9jL3Njc2kvQnVzTG9naWMvPE4+IGludGVyZmFjZS4KKworbyBTaGFyZWQgSW50ZXJydXB0cyBTdXBwb3J0CisKKyAgT24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgc2hhcmVkIGludGVycnVwdHMsIGFueSBudW1iZXIgb2YgQnVzTG9naWMgSG9zdAorICBBZGFwdGVycyBtYXkgc2hhcmUgdGhlIHNhbWUgaW50ZXJydXB0IHJlcXVlc3QgY2hhbm5lbC4KKworCisJCQkgICAgU1VQUE9SVEVEIEhPU1QgQURBUFRFUlMKKworVGhlIGZvbGxvd2luZyBsaXN0IGNvbXByaXNlcyB0aGUgc3VwcG9ydGVkIEJ1c0xvZ2ljIFNDU0kgSG9zdCBBZGFwdGVycyBhcyBvZgordGhlIGRhdGUgb2YgdGhpcyBkb2N1bWVudC4gIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgYW55b25lIHB1cmNoYXNpbmcgYSBCdXNMb2dpYworSG9zdCBBZGFwdGVyIG5vdCBpbiB0aGUgZm9sbG93aW5nIHRhYmxlIGNvbnRhY3QgdGhlIGF1dGhvciBiZWZvcmVoYW5kIHRvIHZlcmlmeQordGhhdCBpdCBpcyBvciB3aWxsIGJlIHN1cHBvcnRlZC4KKworRmxhc2hQb2ludCBTZXJpZXMgUENJIEhvc3QgQWRhcHRlcnM6CisKK0ZsYXNoUG9pbnQgTFQgKEJULTkzMCkJVWx0cmEgU0NTSS0zCitGbGFzaFBvaW50IExUIChCVC05MzBSKQlVbHRyYSBTQ1NJLTMgd2l0aCBSQUlEUGx1cworRmxhc2hQb2ludCBMVCAoQlQtOTIwKQlVbHRyYSBTQ1NJLTMgKEJULTkzMCB3aXRob3V0IEJJT1MpCitGbGFzaFBvaW50IERMIChCVC05MzIpCUR1YWwgQ2hhbm5lbCBVbHRyYSBTQ1NJLTMKK0ZsYXNoUG9pbnQgREwgKEJULTkzMlIpCUR1YWwgQ2hhbm5lbCBVbHRyYSBTQ1NJLTMgd2l0aCBSQUlEUGx1cworRmxhc2hQb2ludCBMVyAoQlQtOTUwKQlXaWRlIFVsdHJhIFNDU0ktMworRmxhc2hQb2ludCBMVyAoQlQtOTUwUikJV2lkZSBVbHRyYSBTQ1NJLTMgd2l0aCBSQUlEUGx1cworRmxhc2hQb2ludCBEVyAoQlQtOTUyKQlEdWFsIENoYW5uZWwgV2lkZSBVbHRyYSBTQ1NJLTMKK0ZsYXNoUG9pbnQgRFcgKEJULTk1MlIpCUR1YWwgQ2hhbm5lbCBXaWRlIFVsdHJhIFNDU0ktMyB3aXRoIFJBSURQbHVzCisKK011bHRpTWFzdGVyICJXIiBTZXJpZXMgSG9zdCBBZGFwdGVyczoKKworQlQtOTQ4CSAgICBQQ0kJCVVsdHJhIFNDU0ktMworQlQtOTU4CSAgICBQQ0kJCVdpZGUgVWx0cmEgU0NTSS0zCitCVC05NThECSAgICBQQ0kJCVdpZGUgRGlmZmVyZW50aWFsIFVsdHJhIFNDU0ktMworCitNdWx0aU1hc3RlciAiQyIgU2VyaWVzIEhvc3QgQWRhcHRlcnM6CisKK0JULTk0NkMJICAgIFBDSQkJRmFzdCBTQ1NJLTIKK0JULTk1NkMJICAgIFBDSQkJV2lkZSBGYXN0IFNDU0ktMgorQlQtOTU2Q0QgICAgUENJCQlXaWRlIERpZmZlcmVudGlhbCBGYXN0IFNDU0ktMgorQlQtNDQ1QwkgICAgVkxCCQlGYXN0IFNDU0ktMgorQlQtNzQ3QwkgICAgRUlTQQlGYXN0IFNDU0ktMgorQlQtNzU3QwkgICAgRUlTQQlXaWRlIEZhc3QgU0NTSS0yCitCVC03NTdDRCAgICBFSVNBCVdpZGUgRGlmZmVyZW50aWFsIEZhc3QgU0NTSS0yCitCVC01NDVDCSAgICBJU0EJCUZhc3QgU0NTSS0yCitCVC01NDBDRiAgICBJU0EJCUZhc3QgU0NTSS0yCisKK011bHRpTWFzdGVyICJTIiBTZXJpZXMgSG9zdCBBZGFwdGVyczoKKworQlQtNDQ1UwkgICAgVkxCCQlGYXN0IFNDU0ktMgorQlQtNzQ3UwkgICAgRUlTQQlGYXN0IFNDU0ktMgorQlQtNzQ3RAkgICAgRUlTQQlEaWZmZXJlbnRpYWwgRmFzdCBTQ1NJLTIKK0JULTc1N1MJICAgIEVJU0EJV2lkZSBGYXN0IFNDU0ktMgorQlQtNzU3RAkgICAgRUlTQQlXaWRlIERpZmZlcmVudGlhbCBGYXN0IFNDU0ktMgorQlQtNTQ1UwkgICAgSVNBCQlGYXN0IFNDU0ktMgorQlQtNTQyRAkgICAgSVNBCQlEaWZmZXJlbnRpYWwgRmFzdCBTQ1NJLTIKK0JULTc0MkEJICAgIEVJU0EJU0NTSS0yICg3NDJBIHJldmlzaW9uIEgpCitCVC01NDJCCSAgICBJU0EJCVNDU0ktMiAoNTQyQiByZXZpc2lvbiBIKQorCitNdWx0aU1hc3RlciAiQSIgU2VyaWVzIEhvc3QgQWRhcHRlcnM6CisKK0JULTc0MkEJICAgIEVJU0EJU0NTSS0yICg3NDJBIHJldmlzaW9ucyBBIC0gRykKK0JULTU0MkIJICAgIElTQQkJU0NTSS0yICg1NDJCIHJldmlzaW9ucyBBIC0gRykKKworQU1JIEZhc3REaXNrIEhvc3QgQWRhcHRlcnMgdGhhdCBhcmUgdHJ1ZSBCdXNMb2dpYyBNdWx0aU1hc3RlciBjbG9uZXMgYXJlIGFsc28KK3N1cHBvcnRlZCBieSB0aGlzIGRyaXZlci4KKworQnVzTG9naWMgU0NTSSBIb3N0IEFkYXB0ZXJzIGFyZSBhdmFpbGFibGUgcGFja2FnZWQgYm90aCBhcyBiYXJlIGJvYXJkcyBhbmQgYXMKK3JldGFpbCBraXRzLiAgVGhlIEJULSBtb2RlbCBudW1iZXJzIGFib3ZlIHJlZmVyIHRvIHRoZSBiYXJlIGJvYXJkIHBhY2thZ2luZy4KK1RoZSByZXRhaWwga2l0IG1vZGVsIG51bWJlcnMgYXJlIGZvdW5kIGJ5IHJlcGxhY2luZyBCVC0gd2l0aCBLVC0gaW4gdGhlIGFib3ZlCitsaXN0LiAgVGhlIHJldGFpbCBraXQgaW5jbHVkZXMgdGhlIGJhcmUgYm9hcmQgYW5kIG1hbnVhbCBhcyB3ZWxsIGFzIGNhYmxpbmcgYW5kCitkcml2ZXIgbWVkaWEgYW5kIGRvY3VtZW50YXRpb24gdGhhdCBhcmUgbm90IHByb3ZpZGVkIHdpdGggYmFyZSBib2FyZHMuCisKKworCQkJIEZMQVNIUE9JTlQgSU5TVEFMTEFUSU9OIE5PVEVTCisKK28gUkFJRFBsdXMgU3VwcG9ydAorCisgIEZsYXNoUG9pbnQgSG9zdCBBZGFwdGVycyBub3cgaW5jbHVkZSBSQUlEUGx1cywgTXlsZXgncyBib290YWJsZSBzb2Z0d2FyZQorICBSQUlELiAgUkFJRFBsdXMgaXMgbm90IHN1cHBvcnRlZCBvbiBMaW51eCwgYW5kIHRoZXJlIGFyZSBubyBwbGFucyB0byBzdXBwb3J0CisgIGl0LiAgVGhlIE1EIGRyaXZlciBpbiBMaW51eCAyLjAgcHJvdmlkZXMgZm9yIGNvbmNhdGVuYXRpb24gKExJTkVBUikgYW5kCisgIHN0cmlwaW5nIChSQUlELTApLCBhbmQgc3VwcG9ydCBmb3IgbWlycm9yaW5nIChSQUlELTEpLCBmaXhlZCBwYXJpdHkgKFJBSUQtNCksCisgIGFuZCBkaXN0cmlidXRlZCBwYXJpdHkgKFJBSUQtNSkgaXMgYXZhaWxhYmxlIHNlcGFyYXRlbHkuICBUaGUgYnVpbHQtaW4gTGludXgKKyAgUkFJRCBzdXBwb3J0IGlzIGdlbmVyYWxseSBtb3JlIGZsZXhpYmxlIGFuZCBpcyBleHBlY3RlZCB0byBwZXJmb3JtIGJldHRlcgorICB0aGFuIFJBSURQbHVzLCBzbyB0aGVyZSBpcyBsaXR0bGUgaW1wZXR1cyB0byBpbmNsdWRlIFJBSURQbHVzIHN1cHBvcnQgaW4gdGhlCisgIEJ1c0xvZ2ljIGRyaXZlci4KKworbyBFbmFibGluZyBVbHRyYVNDU0kgVHJhbnNmZXJzCisKKyAgRmxhc2hQb2ludCBIb3N0IEFkYXB0ZXJzIHNoaXAgd2l0aCB0aGVpciBjb25maWd1cmF0aW9uIHNldCB0byAiRmFjdG9yeQorICBEZWZhdWx0IiBzZXR0aW5ncyB0aGF0IGFyZSBjb25zZXJ2YXRpdmUgYW5kIGRvIG5vdCBhbGxvdyBmb3IgVWx0cmFTQ1NJIHNwZWVkCisgIHRvIGJlIG5lZ290aWF0ZWQuICBUaGlzIHJlc3VsdHMgaW4gZmV3ZXIgcHJvYmxlbXMgd2hlbiB0aGVzZSBob3N0IGFkYXB0ZXJzCisgIGFyZSBpbnN0YWxsZWQgaW4gc3lzdGVtcyB3aXRoIGNhYmxpbmcgb3IgdGVybWluYXRpb24gdGhhdCBpcyBub3Qgc3VmZmljaWVudAorICBmb3IgVWx0cmFTQ1NJIG9wZXJhdGlvbiwgb3Igd2hlcmUgZXhpc3RpbmcgU0NTSSBkZXZpY2VzIGRvIG5vdCBwcm9wZXJseQorICByZXNwb25kIHRvIHN5bmNocm9ub3VzIHRyYW5zZmVyIG5lZ290aWF0aW9uIGZvciBVbHRyYVNDU0kgc3BlZWQuICBBdXRvU0NTSQorICBtYXkgYmUgdXNlZCB0byBsb2FkICJPcHRpbXVtIFBlcmZvcm1hbmNlIiBzZXR0aW5ncyB3aGljaCBhbGxvdyBVbHRyYVNDU0kKKyAgc3BlZWQgdG8gYmUgbmVnb3RpYXRlZCB3aXRoIGFsbCBkZXZpY2VzLCBvciBVbHRyYVNDU0kgc3BlZWQgY2FuIGJlIGVuYWJsZWQgb24KKyAgYW4gaW5kaXZpZHVhbCBiYXNpcy4gIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgU0NBTSBiZSBtYW51YWxseSBkaXNhYmxlZCBhZnRlcgorICB0aGUgIk9wdGltdW0gUGVyZm9ybWFuY2UiIHNldHRpbmdzIGFyZSBsb2FkZWQuCisKKworCQkgICAgICBCVC05NDgvOTU4Lzk1OEQgSU5TVEFMTEFUSU9OIE5PVEVTCisKK1RoZSBCVC05NDgvOTU4Lzk1OEQgUENJIFVsdHJhIFNDU0kgSG9zdCBBZGFwdGVycyBoYXZlIHNvbWUgZmVhdHVyZXMgd2hpY2ggbWF5CityZXF1aXJlIGF0dGVudGlvbiBpbiBzb21lIGNpcmN1bXN0YW5jZXMgd2hlbiBpbnN0YWxsaW5nIExpbnV4LgorCitvIFBDSSBJL08gUG9ydCBBc3NpZ25tZW50cworCisgIFdoZW4gY29uZmlndXJlZCB0byBmYWN0b3J5IGRlZmF1bHQgc2V0dGluZ3MsIHRoZSBCVC05NDgvOTU4Lzk1OEQgd2lsbCBvbmx5CisgIHJlY29nbml6ZSB0aGUgUENJIEkvTyBwb3J0IGFzc2lnbm1lbnRzIG1hZGUgYnkgdGhlIG1vdGhlcmJvYXJkJ3MgUENJIEJJT1MuCisgIFRoZSBCVC05NDgvOTU4Lzk1OEQgd2lsbCBub3QgcmVzcG9uZCB0byBhbnkgb2YgdGhlIElTQSBjb21wYXRpYmxlIEkvTyBwb3J0cworICB0aGF0IHByZXZpb3VzIEJ1c0xvZ2ljIFNDU0kgSG9zdCBBZGFwdGVycyByZXNwb25kIHRvLiAgVGhpcyBkcml2ZXIgc3VwcG9ydHMKKyAgdGhlIFBDSSBJL08gcG9ydCBhc3NpZ25tZW50cywgc28gdGhpcyBpcyB0aGUgcHJlZmVycmVkIGNvbmZpZ3VyYXRpb24uCisgIEhvd2V2ZXIsIGlmIHRoZSBvYnNvbGV0ZSBCdXNMb2dpYyBkcml2ZXIgbXVzdCBiZSB1c2VkIGZvciBhbnkgcmVhc29uLCBzdWNoIGFzCisgIGEgTGludXggZGlzdHJpYnV0aW9uIHRoYXQgZG9lcyBub3QgeWV0IHVzZSB0aGlzIGRyaXZlciBpbiBpdHMgYm9vdCBrZXJuZWwsCisgIEJ1c0xvZ2ljIGhhcyBwcm92aWRlZCBhbiBBdXRvU0NTSSBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBlbmFibGUgYSBsZWdhY3kgSVNBCisgIGNvbXBhdGlibGUgSS9PIHBvcnQuCisKKyAgVG8gZW5hYmxlIHRoaXMgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBvcHRpb24sIGludm9rZSB0aGUgQXV0b1NDU0kgdXRpbGl0eSB2aWEKKyAgQ3RybC1CIGF0IHN5c3RlbSBzdGFydHVwIGFuZCBzZWxlY3QgIkFkYXB0ZXIgQ29uZmlndXJhdGlvbiIsICJWaWV3L01vZGlmeQorICBDb25maWd1cmF0aW9uIiwgYW5kIHRoZW4gY2hhbmdlIHRoZSAiSVNBIENvbXBhdGlibGUgUG9ydCIgc2V0dGluZyBmcm9tCisgICJEaXNhYmxlIiB0byAiUHJpbWFyeSIgb3IgIkFsdGVybmF0ZSIuICBPbmNlIHRoaXMgZHJpdmVyIGhhcyBiZWVuIGluc3RhbGxlZCwKKyAgdGhlICJJU0EgQ29tcGF0aWJsZSBQb3J0IiBvcHRpb24gc2hvdWxkIGJlIHNldCBiYWNrIHRvICJEaXNhYmxlIiB0byBhdm9pZAorICBwb3NzaWJsZSBmdXR1cmUgSS9PIHBvcnQgY29uZmxpY3RzLiAgVGhlIG9sZGVyIEJULTk0NkMvOTU2Qy85NTZDRCBhbHNvIGhhdmUKKyAgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiwgYnV0IHRoZSBmYWN0b3J5IGRlZmF1bHQgc2V0dGluZyBpcyAiUHJpbWFyeSIuCisKK28gUENJIFNsb3QgU2Nhbm5pbmcgT3JkZXIKKworICBJbiBzeXN0ZW1zIHdpdGggbXVsdGlwbGUgQnVzTG9naWMgUENJIEhvc3QgQWRhcHRlcnMsIHRoZSBvcmRlciBpbiB3aGljaCB0aGUKKyAgUENJIHNsb3RzIGFyZSBzY2FubmVkIG1heSBhcHBlYXIgcmV2ZXJzZWQgd2l0aCB0aGUgQlQtOTQ4Lzk1OC85NThEIGFzCisgIGNvbXBhcmVkIHRvIHRoZSBCVC05NDZDLzk1NkMvOTU2Q0QuICBGb3IgYm9vdGluZyBmcm9tIGEgU0NTSSBkaXNrIHRvIHdvcmsKKyAgY29ycmVjdGx5LCBpdCBpcyBuZWNlc3NhcnkgdGhhdCB0aGUgaG9zdCBhZGFwdGVyJ3MgQklPUyBhbmQgdGhlIGtlcm5lbCBhZ3JlZQorICBvbiB3aGljaCBkaXNrIGlzIHRoZSBib290IGRldmljZSwgd2hpY2ggcmVxdWlyZXMgdGhhdCB0aGV5IHJlY29nbml6ZSB0aGUgUENJCisgIGhvc3QgYWRhcHRlcnMgaW4gdGhlIHNhbWUgb3JkZXIuICBUaGUgbW90aGVyYm9hcmQncyBQQ0kgQklPUyBwcm92aWRlcyBhCisgIHN0YW5kYXJkIHdheSBvZiBlbnVtZXJhdGluZyB0aGUgUENJIGhvc3QgYWRhcHRlcnMsIHdoaWNoIGlzIHVzZWQgYnkgdGhlIExpbnV4CisgIGtlcm5lbC4gIFNvbWUgUENJIEJJT1MgaW1wbGVtZW50YXRpb25zIGVudW1lcmF0ZSB0aGUgUENJIHNsb3RzIGluIG9yZGVyIG9mCisgIGluY3JlYXNpbmcgYnVzIG51bWJlciBhbmQgZGV2aWNlIG51bWJlciwgd2hpbGUgb3RoZXJzIGRvIHNvIGluIHRoZSBvcHBvc2l0ZQorICBkaXJlY3Rpb24uCisKKyAgVW5mb3J0dW5hdGVseSwgTWljcm9zb2Z0IGRlY2lkZWQgdGhhdCBXaW5kb3dzIDk1IHdvdWxkIGFsd2F5cyBlbnVtZXJhdGUgdGhlCisgIFBDSSBzbG90cyBpbiBvcmRlciBvZiBpbmNyZWFzaW5nIGJ1cyBudW1iZXIgYW5kIGRldmljZSBudW1iZXIgcmVnYXJkbGVzcyBvZgorICB0aGUgUENJIEJJT1MgZW51bWVyYXRpb24sIGFuZCByZXF1aXJlcyB0aGF0IHRoZWlyIHNjaGVtZSBiZSBzdXBwb3J0ZWQgYnkgdGhlCisgIGhvc3QgYWRhcHRlcidzIEJJT1MgdG8gcmVjZWl2ZSBXaW5kb3dzIDk1IGNlcnRpZmljYXRpb24uICBUaGVyZWZvcmUsIHRoZQorICBmYWN0b3J5IGRlZmF1bHQgc2V0dGluZ3Mgb2YgdGhlIEJULTk0OC85NTgvOTU4RCBlbnVtZXJhdGUgdGhlIGhvc3QgYWRhcHRlcnMKKyAgYnkgaW5jcmVhc2luZyBidXMgbnVtYmVyIGFuZCBkZXZpY2UgbnVtYmVyLiAgVG8gZGlzYWJsZSB0aGlzIGZlYXR1cmUsIGludm9rZQorICB0aGUgQXV0b1NDU0kgdXRpbGl0eSB2aWEgQ3RybC1CIGF0IHN5c3RlbSBzdGFydHVwIGFuZCBzZWxlY3QgIkFkYXB0ZXIKKyAgQ29uZmlndXJhdGlvbiIsICJWaWV3L01vZGlmeSBDb25maWd1cmF0aW9uIiwgcHJlc3MgQ3RybC1GMTAsIGFuZCB0aGVuIGNoYW5nZQorICB0aGUgIlVzZSBCdXMgQW5kIERldmljZSAjIEZvciBQQ0kgU2Nhbm5pbmcgU2VxLiIgb3B0aW9uIHRvIE9GRi4KKworICBUaGlzIGRyaXZlciB3aWxsIGludGVycm9nYXRlIHRoZSBzZXR0aW5nIG9mIHRoZSBQQ0kgU2Nhbm5pbmcgU2VxdWVuY2Ugb3B0aW9uCisgIHNvIGFzIHRvIHJlY29nbml6ZSB0aGUgaG9zdCBhZGFwdGVycyBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGV5IGFyZSBlbnVtZXJhdGVkCisgIGJ5IHRoZSBob3N0IGFkYXB0ZXIncyBCSU9TLgorCitvIEVuYWJsaW5nIFVsdHJhU0NTSSBUcmFuc2ZlcnMKKworICBUaGUgQlQtOTQ4Lzk1OC85NThEIHNoaXAgd2l0aCB0aGVpciBjb25maWd1cmF0aW9uIHNldCB0byAiRmFjdG9yeSBEZWZhdWx0IgorICBzZXR0aW5ncyB0aGF0IGFyZSBjb25zZXJ2YXRpdmUgYW5kIGRvIG5vdCBhbGxvdyBmb3IgVWx0cmFTQ1NJIHNwZWVkIHRvIGJlCisgIG5lZ290aWF0ZWQuICBUaGlzIHJlc3VsdHMgaW4gZmV3ZXIgcHJvYmxlbXMgd2hlbiB0aGVzZSBob3N0IGFkYXB0ZXJzIGFyZQorICBpbnN0YWxsZWQgaW4gc3lzdGVtcyB3aXRoIGNhYmxpbmcgb3IgdGVybWluYXRpb24gdGhhdCBpcyBub3Qgc3VmZmljaWVudCBmb3IKKyAgVWx0cmFTQ1NJIG9wZXJhdGlvbiwgb3Igd2hlcmUgZXhpc3RpbmcgU0NTSSBkZXZpY2VzIGRvIG5vdCBwcm9wZXJseSByZXNwb25kCisgIHRvIHN5bmNocm9ub3VzIHRyYW5zZmVyIG5lZ290aWF0aW9uIGZvciBVbHRyYVNDU0kgc3BlZWQuICBBdXRvU0NTSSBtYXkgYmUKKyAgdXNlZCB0byBsb2FkICJPcHRpbXVtIFBlcmZvcm1hbmNlIiBzZXR0aW5ncyB3aGljaCBhbGxvdyBVbHRyYVNDU0kgc3BlZWQgdG8gYmUKKyAgbmVnb3RpYXRlZCB3aXRoIGFsbCBkZXZpY2VzLCBvciBVbHRyYVNDU0kgc3BlZWQgY2FuIGJlIGVuYWJsZWQgb24gYW4KKyAgaW5kaXZpZHVhbCBiYXNpcy4gIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgU0NBTSBiZSBtYW51YWxseSBkaXNhYmxlZCBhZnRlciB0aGUKKyAgIk9wdGltdW0gUGVyZm9ybWFuY2UiIHNldHRpbmdzIGFyZSBsb2FkZWQuCisKKworCQkJCURSSVZFUiBPUFRJT05TCisKK0J1c0xvZ2ljIERyaXZlciBPcHRpb25zIG1heSBiZSBzcGVjaWZpZWQgZWl0aGVyIHZpYSB0aGUgTGludXggS2VybmVsIENvbW1hbmQKK0xpbmUgb3IgdmlhIHRoZSBMb2FkYWJsZSBLZXJuZWwgTW9kdWxlIEluc3RhbGxhdGlvbiBGYWNpbGl0eS4gIERyaXZlciBPcHRpb25zCitmb3IgbXVsdGlwbGUgaG9zdCBhZGFwdGVycyBtYXkgYmUgc3BlY2lmaWVkIGVpdGhlciBieSBzZXBhcmF0aW5nIHRoZSBvcHRpb24KK3N0cmluZ3MgYnkgYSBzZW1pY29sb24sIG9yIGJ5IHNwZWNpZnlpbmcgbXVsdGlwbGUgIkJ1c0xvZ2ljPSIgc3RyaW5ncyBvbiB0aGUKK2NvbW1hbmQgbGluZS4gIEluZGl2aWR1YWwgb3B0aW9uIHNwZWNpZmljYXRpb25zIGZvciBhIHNpbmdsZSBob3N0IGFkYXB0ZXIgYXJlCitzZXBhcmF0ZWQgYnkgY29tbWFzLiAgVGhlIFByb2JpbmcgYW5kIERlYnVnZ2luZyBPcHRpb25zIGFwcGx5IHRvIGFsbCBob3N0CithZGFwdGVycyB3aGVyZWFzIHRoZSByZW1haW5pbmcgb3B0aW9ucyBhcHBseSBpbmRpdmlkdWFsbHkgb25seSB0byB0aGUKK3NlbGVjdGVkIGhvc3QgYWRhcHRlci4KKworVGhlIEJ1c0xvZ2ljIERyaXZlciBQcm9iaW5nIE9wdGlvbnMgY29tcHJpc2UgdGhlIGZvbGxvd2luZzoKKworSU86PGludGVnZXI+CisKKyAgVGhlICJJTzoiIG9wdGlvbiBzcGVjaWZpZXMgYW4gSVNBIEkvTyBBZGRyZXNzIHRvIGJlIHByb2JlZCBmb3IgYSBub24tUENJCisgIE11bHRpTWFzdGVyIEhvc3QgQWRhcHRlci4gIElmIG5laXRoZXIgIklPOiIgbm9yICJOb1Byb2JlSVNBIiBvcHRpb25zIGFyZQorICBzcGVjaWZpZWQsIHRoZW4gdGhlIHN0YW5kYXJkIGxpc3Qgb2YgQnVzTG9naWMgTXVsdGlNYXN0ZXIgSVNBIEkvTyBBZGRyZXNzZXMKKyAgd2lsbCBiZSBwcm9iZWQgKDB4MzMwLCAweDMzNCwgMHgyMzAsIDB4MjM0LCAweDEzMCwgYW5kIDB4MTM0KS4gIE11bHRpcGxlCisgICJJTzoiIG9wdGlvbnMgbWF5IGJlIHNwZWNpZmllZCB0byBwcmVjaXNlbHkgZGV0ZXJtaW5lIHRoZSBJL08gQWRkcmVzc2VzIHRvCisgIGJlIHByb2JlZCwgYnV0IHRoZSBwcm9iZSBvcmRlciB3aWxsIGFsd2F5cyBmb2xsb3cgdGhlIHN0YW5kYXJkIGxpc3QuCisKK05vUHJvYmUKKworICBUaGUgIk5vUHJvYmUiIG9wdGlvbiBkaXNhYmxlcyBhbGwgcHJvYmluZyBhbmQgdGhlcmVmb3JlIG5vIEJ1c0xvZ2ljIEhvc3QKKyAgQWRhcHRlcnMgd2lsbCBiZSBkZXRlY3RlZC4KKworTm9Qcm9iZUlTQQorCisgIFRoZSAiTm9Qcm9iZUlTQSIgb3B0aW9uIGRpc2FibGVzIHByb2Jpbmcgb2YgdGhlIHN0YW5kYXJkIEJ1c0xvZ2ljIElTQSBJL08KKyAgQWRkcmVzc2VzIGFuZCB0aGVyZWZvcmUgb25seSBQQ0kgTXVsdGlNYXN0ZXIgYW5kIEZsYXNoUG9pbnQgSG9zdCBBZGFwdGVycworICB3aWxsIGJlIGRldGVjdGVkLgorCitOb1Byb2JlUENJCisKKyAgVGhlICJOb1Byb2JlUENJIiBvcHRpb25zIGRpc2FibGVzIHRoZSBpbnRlcnJvZ2F0aW9uIG9mIFBDSSBDb25maWd1cmF0aW9uCisgIFNwYWNlIGFuZCB0aGVyZWZvcmUgb25seSBJU0EgTXVsdGltYXN0ZXIgSG9zdCBBZGFwdGVycyB3aWxsIGJlIGRldGVjdGVkLCBhcworICB3ZWxsIGFzIFBDSSBNdWx0aW1hc3RlciBIb3N0IEFkYXB0ZXJzIHRoYXQgaGF2ZSB0aGVpciBJU0EgQ29tcGF0aWJsZSBJL08KKyAgUG9ydCBzZXQgdG8gIlByaW1hcnkiIG9yICJBbHRlcm5hdGUiLgorCitOb1NvcnRQQ0kKKworICBUaGUgIk5vU29ydFBDSSIgb3B0aW9uIGZvcmNlcyBQQ0kgTXVsdGlNYXN0ZXIgSG9zdCBBZGFwdGVycyB0byBiZQorICBlbnVtZXJhdGVkIGluIHRoZSBvcmRlciBwcm92aWRlZCBieSB0aGUgUENJIEJJT1MsIGlnbm9yaW5nIGFueSBzZXR0aW5nIG9mCisgIHRoZSBBdXRvU0NTSSAiVXNlIEJ1cyBBbmQgRGV2aWNlICMgRm9yIFBDSSBTY2FubmluZyBTZXEuIiBvcHRpb24uCisKK011bHRpTWFzdGVyRmlyc3QKKworICBUaGUgIk11bHRpTWFzdGVyRmlyc3QiIG9wdGlvbiBmb3JjZXMgTXVsdGlNYXN0ZXIgSG9zdCBBZGFwdGVycyB0byBiZSBwcm9iZWQKKyAgYmVmb3JlIEZsYXNoUG9pbnQgSG9zdCBBZGFwdGVycy4gIEJ5IGRlZmF1bHQsIGlmIGJvdGggRmxhc2hQb2ludCBhbmQgUENJCisgIE11bHRpTWFzdGVyIEhvc3QgQWRhcHRlcnMgYXJlIHByZXNlbnQsIHRoaXMgZHJpdmVyIHdpbGwgcHJvYmUgZm9yCisgIEZsYXNoUG9pbnQgSG9zdCBBZGFwdGVycyBmaXJzdCB1bmxlc3MgdGhlIEJJT1MgcHJpbWFyeSBkaXNrIGlzIGNvbnRyb2xsZWQKKyAgYnkgdGhlIGZpcnN0IFBDSSBNdWx0aU1hc3RlciBIb3N0IEFkYXB0ZXIsIGluIHdoaWNoIGNhc2UgTXVsdGlNYXN0ZXIgSG9zdAorICBBZGFwdGVycyB3aWxsIGJlIHByb2JlZCBmaXJzdC4KKworRmxhc2hQb2ludEZpcnN0CisKKyAgVGhlICJGbGFzaFBvaW50Rmlyc3QiIG9wdGlvbiBmb3JjZXMgRmxhc2hQb2ludCBIb3N0IEFkYXB0ZXJzIHRvIGJlIHByb2JlZAorICBiZWZvcmUgTXVsdGlNYXN0ZXIgSG9zdCBBZGFwdGVycy4KKworVGhlIEJ1c0xvZ2ljIERyaXZlciBUYWdnZWQgUXVldWluZyBPcHRpb25zIGFsbG93IGZvciBleHBsaWNpdGx5IHNwZWNpZnlpbmcKK3RoZSBRdWV1ZSBEZXB0aCBhbmQgd2hldGhlciBUYWdnZWQgUXVldWluZyBpcyBwZXJtaXR0ZWQgZm9yIGVhY2ggVGFyZ2V0CitEZXZpY2UgKGFzc3VtaW5nIHRoYXQgdGhlIFRhcmdldCBEZXZpY2Ugc3VwcG9ydHMgVGFnZ2VkIFF1ZXVpbmcpLiAgVGhlIFF1ZXVlCitEZXB0aCBpcyB0aGUgbnVtYmVyIG9mIFNDU0kgQ29tbWFuZHMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSBjb25jdXJyZW50bHkKK3ByZXNlbnRlZCBmb3IgZXhlY3V0aW9uIChlaXRoZXIgdG8gdGhlIEhvc3QgQWRhcHRlciBvciBUYXJnZXQgRGV2aWNlKS4gIE5vdGUKK3RoYXQgZXhwbGljaXRseSBlbmFibGluZyBUYWdnZWQgUXVldWluZyBtYXkgbGVhZCB0byBwcm9ibGVtczsgdGhlIG9wdGlvbiB0bworZW5hYmxlIG9yIGRpc2FibGUgVGFnZ2VkIFF1ZXVpbmcgaXMgcHJvdmlkZWQgcHJpbWFyaWx5IHRvIGFsbG93IGRpc2FibGluZworVGFnZ2VkIFF1ZXVpbmcgb24gVGFyZ2V0IERldmljZXMgdGhhdCBkbyBub3QgaW1wbGVtZW50IGl0IGNvcnJlY3RseS4gIFRoZQorZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZToKKworUXVldWVEZXB0aDo8aW50ZWdlcj4KKworICBUaGUgIlF1ZXVlRGVwdGg6IiBvciBRRDoiIG9wdGlvbiBzcGVjaWZpZXMgdGhlIFF1ZXVlIERlcHRoIHRvIHVzZSBmb3IgYWxsCisgIFRhcmdldCBEZXZpY2VzIHRoYXQgc3VwcG9ydCBUYWdnZWQgUXVldWluZywgYXMgd2VsbCBhcyB0aGUgbWF4aW11bSBRdWV1ZQorICBEZXB0aCBmb3IgZGV2aWNlcyB0aGF0IGRvIG5vdCBzdXBwb3J0IFRhZ2dlZCBRdWV1aW5nLiAgSWYgbm8gUXVldWUgRGVwdGgKKyAgb3B0aW9uIGlzIHByb3ZpZGVkLCB0aGUgUXVldWUgRGVwdGggd2lsbCBiZSBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkgYmFzZWQKKyAgb24gdGhlIEhvc3QgQWRhcHRlcidzIFRvdGFsIFF1ZXVlIERlcHRoIGFuZCB0aGUgbnVtYmVyLCB0eXBlLCBzcGVlZCwgYW5kCisgIGNhcGFiaWxpdGllcyBvZiB0aGUgZGV0ZWN0ZWQgVGFyZ2V0IERldmljZXMuICBGb3IgSG9zdCBBZGFwdGVycyB0aGF0CisgIHJlcXVpcmUgSVNBIEJvdW5jZSBCdWZmZXJzLCB0aGUgUXVldWUgRGVwdGggaXMgYXV0b21hdGljYWxseSBzZXQgYnkgZGVmYXVsdAorICB0byBCdXNMb2dpY19UYWdnZWRRdWV1ZURlcHRoQkIgb3IgQnVzTG9naWNfVW50YWdnZWRRdWV1ZURlcHRoQkIgdG8gYXZvaWQKKyAgZXhjZXNzaXZlIHByZWFsbG9jYXRpb24gb2YgRE1BIEJvdW5jZSBCdWZmZXIgbWVtb3J5LiAgVGFyZ2V0IERldmljZXMgdGhhdAorICBkbyBub3Qgc3VwcG9ydCBUYWdnZWQgUXVldWluZyBhbHdheXMgaGF2ZSB0aGVpciBRdWV1ZSBEZXB0aCBzZXQgdG8KKyAgQnVzTG9naWNfVW50YWdnZWRRdWV1ZURlcHRoIG9yIEJ1c0xvZ2ljX1VudGFnZ2VkUXVldWVEZXB0aEJCLCB1bmxlc3MgYQorICBsb3dlciBRdWV1ZSBEZXB0aCBvcHRpb24gaXMgcHJvdmlkZWQuICBBIFF1ZXVlIERlcHRoIG9mIDEgYXV0b21hdGljYWxseQorICBkaXNhYmxlcyBUYWdnZWQgUXVldWluZy4KKworUXVldWVEZXB0aDpbPGludGVnZXI+LDxpbnRlZ2VyPi4uLl0KKworICBUaGUgIlF1ZXVlRGVwdGg6Wy4uLl0iIG9yICJRRDpbLi4uXSIgb3B0aW9uIHNwZWNpZmllcyB0aGUgUXVldWUgRGVwdGgKKyAgaW5kaXZpZHVhbGx5IGZvciBlYWNoIFRhcmdldCBEZXZpY2UuICBJZiBhbiA8aW50ZWdlcj4gaXMgb21pdHRlZCwgdGhlCisgIGFzc29jaWF0ZWQgVGFyZ2V0IERldmljZSB3aWxsIGhhdmUgaXRzIFF1ZXVlIERlcHRoIHNlbGVjdGVkIGF1dG9tYXRpY2FsbHkuCisKK1RhZ2dlZFF1ZXVpbmc6RGVmYXVsdAorCisgIFRoZSAiVGFnZ2VkUXVldWluZzpEZWZhdWx0IiBvciAiVFE6RGVmYXVsdCIgb3B0aW9uIHBlcm1pdHMgVGFnZ2VkIFF1ZXVpbmcKKyAgYmFzZWQgb24gdGhlIGZpcm13YXJlIHZlcnNpb24gb2YgdGhlIEJ1c0xvZ2ljIEhvc3QgQWRhcHRlciBhbmQgYmFzZWQgb24KKyAgd2hldGhlciB0aGUgUXVldWUgRGVwdGggYWxsb3dzIHF1ZXVpbmcgbXVsdGlwbGUgY29tbWFuZHMuCisKK1RhZ2dlZFF1ZXVpbmc6RW5hYmxlCisKKyAgVGhlICJUYWdnZWRRdWV1aW5nOkVuYWJsZSIgb3IgIlRROkVuYWJsZSIgb3B0aW9uIGVuYWJsZXMgVGFnZ2VkIFF1ZXVpbmcgZm9yCisgIGFsbCBUYXJnZXQgRGV2aWNlcyBvbiB0aGlzIEhvc3QgQWRhcHRlciwgb3ZlcnJpZGluZyBhbnkgbGltaXRhdGlvbiB0aGF0CisgIHdvdWxkIG90aGVyd2lzZSBiZSBpbXBvc2VkIGJhc2VkIG9uIHRoZSBIb3N0IEFkYXB0ZXIgZmlybXdhcmUgdmVyc2lvbi4KKworVGFnZ2VkUXVldWluZzpEaXNhYmxlCisKKyAgVGhlICJUYWdnZWRRdWV1aW5nOkRpc2FibGUiIG9yICJUUTpEaXNhYmxlIiBvcHRpb24gZGlzYWJsZXMgVGFnZ2VkIFF1ZXVpbmcKKyAgZm9yIGFsbCBUYXJnZXQgRGV2aWNlcyBvbiB0aGlzIEhvc3QgQWRhcHRlci4KKworVGFnZ2VkUXVldWluZzo8VGFyZ2V0LVNwZWM+CisKKyAgVGhlICJUYWdnZWRRdWV1aW5nOjxUYXJnZXQtU3BlYz4iIG9yICJUUTo8VGFyZ2V0LVNwZWM+IiBvcHRpb24gY29udHJvbHMKKyAgVGFnZ2VkIFF1ZXVpbmcgaW5kaXZpZHVhbGx5IGZvciBlYWNoIFRhcmdldCBEZXZpY2UuICA8VGFyZ2V0LVNwZWM+IGlzIGEKKyAgc2VxdWVuY2Ugb2YgIlkiLCAiTiIsIGFuZCAiWCIgY2hhcmFjdGVycy4gICJZIiBlbmFibGVzIFRhZ2dlZCBRdWV1aW5nLCAiTiIKKyAgZGlzYWJsZXMgVGFnZ2VkIFF1ZXVpbmcsIGFuZCAiWCIgYWNjZXB0cyB0aGUgZGVmYXVsdCBiYXNlZCBvbiB0aGUgZmlybXdhcmUKKyAgdmVyc2lvbi4gIFRoZSBmaXJzdCBjaGFyYWN0ZXIgcmVmZXJzIHRvIFRhcmdldCBEZXZpY2UgMCwgdGhlIHNlY29uZCB0bworICBUYXJnZXQgRGV2aWNlIDEsIGFuZCBzbyBvbjsgaWYgdGhlIHNlcXVlbmNlIG9mICJZIiwgIk4iLCBhbmQgIlgiIGNoYXJhY3RlcnMKKyAgZG9lcyBub3QgY292ZXIgYWxsIHRoZSBUYXJnZXQgRGV2aWNlcywgdW5zcGVjaWZpZWQgY2hhcmFjdGVycyBhcmUgYXNzdW1lZAorICB0byBiZSAiWCIuCisKK1RoZSBCdXNMb2dpYyBEcml2ZXIgTWlzY2VsbGFuZW91cyBPcHRpb25zIGNvbXByaXNlIHRoZSBmb2xsb3dpbmc6CisKK0J1c1NldHRsZVRpbWU6PHNlY29uZHM+CisKKyAgVGhlICJCdXNTZXR0bGVUaW1lOiIgb3IgIkJTVDoiIG9wdGlvbiBzcGVjaWZpZXMgdGhlIEJ1cyBTZXR0bGUgVGltZSBpbgorICBzZWNvbmRzLiAgVGhlIEJ1cyBTZXR0bGUgVGltZSBpcyB0aGUgYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBiZXR3ZWVuIGEgSG9zdAorICBBZGFwdGVyIEhhcmQgUmVzZXQgd2hpY2ggaW5pdGlhdGVzIGEgU0NTSSBCdXMgUmVzZXQgYW5kIGlzc3VpbmcgYW55IFNDU0kKKyAgQ29tbWFuZHMuICBJZiB1bnNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gQnVzTG9naWNfRGVmYXVsdEJ1c1NldHRsZVRpbWUuCisKK0luaGliaXRUYXJnZXRJbnF1aXJ5CisKKyAgVGhlICJJbmhpYml0VGFyZ2V0SW5xdWlyeSIgb3B0aW9uIGluaGliaXRzIHRoZSBleGVjdXRpb24gb2YgYW4gSW5xdWlyZQorICBUYXJnZXQgRGV2aWNlcyBvciBJbnF1aXJlIEluc3RhbGxlZCBEZXZpY2VzIGNvbW1hbmQgb24gTXVsdGlNYXN0ZXIgSG9zdAorICBBZGFwdGVycy4gIFRoaXMgbWF5IGJlIG5lY2Vzc2FyeSB3aXRoIHNvbWUgb2xkZXIgVGFyZ2V0IERldmljZXMgdGhhdCBkbyBub3QKKyAgcmVzcG9uZCBjb3JyZWN0bHkgd2hlbiBMb2dpY2FsIFVuaXRzIGFib3ZlIDAgYXJlIGFkZHJlc3NlZC4KKworVGhlIEJ1c0xvZ2ljIERyaXZlciBEZWJ1Z2dpbmcgT3B0aW9ucyBjb21wcmlzZSB0aGUgZm9sbG93aW5nOgorCitUcmFjZVByb2JlCisKKyAgVGhlICJUcmFjZVByb2JlIiBvcHRpb24gZW5hYmxlcyB0cmFjaW5nIG9mIEhvc3QgQWRhcHRlciBQcm9iaW5nLgorCitUcmFjZUhhcmR3YXJlUmVzZXQKKworICBUaGUgIlRyYWNlSGFyZHdhcmVSZXNldCIgb3B0aW9uIGVuYWJsZXMgdHJhY2luZyBvZiBIb3N0IEFkYXB0ZXIgSGFyZHdhcmUKKyAgUmVzZXQuCisKK1RyYWNlQ29uZmlndXJhdGlvbgorCisgIFRoZSAiVHJhY2VDb25maWd1cmF0aW9uIiBvcHRpb24gZW5hYmxlcyB0cmFjaW5nIG9mIEhvc3QgQWRhcHRlcgorICBDb25maWd1cmF0aW9uLgorCitUcmFjZUVycm9ycworCisgIFRoZSAiVHJhY2VFcnJvcnMiIG9wdGlvbiBlbmFibGVzIHRyYWNpbmcgb2YgU0NTSSBDb21tYW5kcyB0aGF0IHJldHVybiBhbgorICBlcnJvciBmcm9tIHRoZSBUYXJnZXQgRGV2aWNlLiAgVGhlIENEQiBhbmQgU2Vuc2UgRGF0YSB3aWxsIGJlIHByaW50ZWQgZm9yCisgIGVhY2ggU0NTSSBDb21tYW5kIHRoYXQgZmFpbHMuCisKK0RlYnVnCisKKyAgVGhlICJEZWJ1ZyIgb3B0aW9uIGVuYWJsZXMgYWxsIGRlYnVnZ2luZyBvcHRpb25zLgorCitUaGUgZm9sbG93aW5nIGV4YW1wbGVzIGRlbW9uc3RyYXRlIHNldHRpbmcgdGhlIFF1ZXVlIERlcHRoIGZvciBUYXJnZXQgRGV2aWNlcworMSBhbmQgMiBvbiB0aGUgZmlyc3QgaG9zdCBhZGFwdGVyIHRvIDcgYW5kIDE1LCB0aGUgUXVldWUgRGVwdGggZm9yIGFsbCBUYXJnZXQKK0RldmljZXMgb24gdGhlIHNlY29uZCBob3N0IGFkYXB0ZXIgdG8gMzEsIGFuZCB0aGUgQnVzIFNldHRsZSBUaW1lIG9uIHRoZQorc2Vjb25kIGhvc3QgYWRhcHRlciB0byAzMCBzZWNvbmRzLgorCitMaW51eCBLZXJuZWwgQ29tbWFuZCBMaW5lOgorCisgIGxpbnV4IEJ1c0xvZ2ljPVF1ZXVlRGVwdGg6Wyw3LDE1XTtRdWV1ZURlcHRoOjMxLEJ1c1NldHRsZVRpbWU6MzAKKworTElMTyBMaW51eCBCb290IExvYWRlciAoaW4gL2V0Yy9saWxvLmNvbmYpOgorCisgIGFwcGVuZCA9ICJCdXNMb2dpYz1RdWV1ZURlcHRoOlssNywxNV07UXVldWVEZXB0aDozMSxCdXNTZXR0bGVUaW1lOjMwIgorCitJTlNNT0QgTG9hZGFibGUgS2VybmVsIE1vZHVsZSBJbnN0YWxsYXRpb24gRmFjaWxpdHk6CisKKyAgaW5zbW9kIEJ1c0xvZ2ljLm8gXAorICAgICAgJ0J1c0xvZ2ljPSJRdWV1ZURlcHRoOlssNywxNV07UXVldWVEZXB0aDozMSxCdXNTZXR0bGVUaW1lOjMwIicKKworTk9URTogTW9kdWxlIFV0aWxpdGllcyAyLjEuNzEgb3IgbGF0ZXIgaXMgcmVxdWlyZWQgZm9yIGNvcnJlY3QgcGFyc2luZworICAgICAgb2YgZHJpdmVyIG9wdGlvbnMgY29udGFpbmluZyBjb21tYXMuCisKKworCQkJICAgICAgRFJJVkVSIElOU1RBTExBVElPTgorCitUaGlzIGRpc3RyaWJ1dGlvbiB3YXMgcHJlcGFyZWQgZm9yIExpbnV4IGtlcm5lbCB2ZXJzaW9uIDIuMC4zNSwgYnV0IHNob3VsZCBiZQorY29tcGF0aWJsZSB3aXRoIDIuMC40IG9yIGFueSBsYXRlciAyLjAgc2VyaWVzIGtlcm5lbC4KKworVG8gaW5zdGFsbCB0aGUgbmV3IEJ1c0xvZ2ljIFNDU0kgZHJpdmVyLCB5b3UgbWF5IHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzLAorcmVwbGFjaW5nICIvdXNyL3NyYyIgd2l0aCB3aGVyZXZlciB5b3Uga2VlcCB5b3VyIExpbnV4IGtlcm5lbCBzb3VyY2UgdHJlZToKKworICBjZCAvdXNyL3NyYworICB0YXIgLXh2emYgQnVzTG9naWMtMi4wLjE1LnRhci5negorICBtdiBSRUFETUUuKiBMSUNFTlNFLiogQnVzTG9naWMuW2NoXSBGbGFzaFBvaW50LmMgbGludXgvZHJpdmVycy9zY3NpCisgIHBhdGNoIC1wMCA8IEJ1c0xvZ2ljLnBhdGNoIChvbmx5IGZvciAyLjAuMzMgYW5kIGJlbG93KQorICBjZCBsaW51eAorICBtYWtlIGNvbmZpZworICBtYWtlIHpJbWFnZQorCitUaGVuIGluc3RhbGwgImFyY2gvaTM4Ni9ib290L3pJbWFnZSIgYXMgeW91ciBzdGFuZGFyZCBrZXJuZWwsIHJ1biBsaWxvIGlmCithcHByb3ByaWF0ZSwgYW5kIHJlYm9vdC4KKworCisJCSAgICAgIEJVU0xPR0lDIEFOTk9VTkNFTUVOVFMgTUFJTElORyBMSVNUCisKK1RoZSBCdXNMb2dpYyBBbm5vdW5jZW1lbnRzIE1haWxpbmcgTGlzdCBwcm92aWRlcyBhIGZvcnVtIGZvciBpbmZvcm1pbmcgTGludXgKK3VzZXJzIG9mIG5ldyBkcml2ZXIgcmVsZWFzZXMgYW5kIG90aGVyIGFubm91bmNlbWVudHMgcmVnYXJkaW5nIExpbnV4IHN1cHBvcnQKK2ZvciBCdXNMb2dpYyBTQ1NJIEhvc3QgQWRhcHRlcnMuICBUbyBqb2luIHRoZSBtYWlsaW5nIGxpc3QsIHNlbmQgYSBtZXNzYWdlIHRvCisiYnVzbG9naWMtYW5ub3VuY2UtcmVxdWVzdEBkYW5kZWxpb24uY29tIiB3aXRoIHRoZSBsaW5lICJzdWJzY3JpYmUiIGluIHRoZQorbWVzc2FnZSBib2R5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy4xOTkyLTE5OTcgYi9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLjE5OTItMTk5NwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzg4ZWUyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy4xOTkyLTE5OTcKQEAgLTAsMCArMSwyMDIzIEBACitTYXQgSmFuIDE4IDE1OjUxOjQ1IDE5OTcgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHRhbXUuZWR1PgorCisJKiBEb24ndCBwbGF5IHdpdGggdXNhZ2VfY291bnQgZGlyZWN0bHksIGluc3RlYWQgaGFuZCBhcm91bmQKKwl0aGUgbW9kdWxlIGhlYWRlciBhbmQgdXNlIHRoZSBtb2R1bGUgbWFjcm9zLgorCitGcmkgTWF5IDE3IDAwOjAwOjAwIDE5OTYgIExlb25hcmQgTi4gWnVia29mZiA8bG56QGRhbmRlbGlvbi5jb20+CisKKwkqIEJ1c0xvZ2ljIERyaXZlciBWZXJzaW9uIDIuMC4zIFJlbGVhc2VkLgorCitUdWUgQXByIDE2IDIxOjAwOjAwIDE5OTYgIExlb25hcmQgTi4gWnVia29mZiA8bG56QGRhbmRlbGlvbi5jb20+CisKKwkqIEJ1c0xvZ2ljIERyaXZlciBWZXJzaW9uIDEuMy4yIFJlbGVhc2VkLgorCitTdW4gRGVjIDMxIDIzOjI2OjAwIDE5OTUgIExlb25hcmQgTi4gWnVia29mZiA8bG56QGRhbmRlbGlvbi5jb20+CisKKwkqIEJ1c0xvZ2ljIERyaXZlciBWZXJzaW9uIDEuMy4xIFJlbGVhc2VkLgorCitGcmkgTm92IDEwIDE1OjI5OjQ5IDE5OTUgIExlb25hcmQgTi4gWnVia29mZiA8bG56QGRhbmRlbGlvbi5jb20+CisKKwkqIFJlbGVhc2VkIG5ldyBCdXNMb2dpYyBkcml2ZXIuCisKK1dlZCBBdWcgIDkgMjI6Mzc6MDQgMTk5NSAgQW5kcmllcyBCcm91d2VyICA8YWViQGN3aS5ubD4KKworCUFzIGEgcHJlcGFyYXRpb24gZm9yIG5ldyBkZXZpY2UgY29kZSwgc2VwYXJhdGVkIHRoZSB2YXJpb3VzCisJZnVuY3Rpb25zIHRoZSByZXF1ZXN0LT5kZXYgZmllbGQgaGFkIGludG8gdGhlIGRldmljZSBwcm9wZXIsCisJcmVxdWVzdC0+cnFfZGV2IGFuZCBhIHN0YXR1cyBmaWVsZCByZXF1ZXN0LT5ycV9zdGF0dXMuCisKKwlUaGUgMm5kIGFyZ3VtZW50IG9mIGJpb3NfcGFyYW0gaXMgbm93IGEga2Rldl90LgorCitXZWQgSnVsIDE5IDEwOjQzOjE1IDE5OTUgIE1pY2hhZWwgTmV1ZmZlciAgPG5ldWZmZXJAZ29vZnkuemR2LnVuaS1tYWluei5kZT4KKworICAgICAgICAqIHNjc2kuYyAoc2NzaV9wcm9jX2luZm8pOiAvcHJvYy9zY3NpL3Njc2kgbm93IGFsc28gbGlzdHMgYWxsCisJYXR0YWNoZWQgZGV2aWNlcy4KKworCSogc2NzaV9wcm9jLmMgKHByb2NfcHJpbnRfc2NzaWRldmljZSk6IEFkZGVkLiBVc2VkIGJ5IHNjc2kuYyBhbmQKKwllYXRhX2RtYV9wcm9jLmMgdG8gcHJvZHVjZSBzb21lIGRldmljZSBpbmZvIGZvciAvcHJvYy9zY3NpLgorCisJKiBlYXRhX2RtYS5jIChlYXRhX3F1ZXVlKShlYXRhX2ludF9oYW5kbGVyKShlYXRhX3Njc2lfZG9uZSk6CisJQ2hhbmdlZCBoYW5kbGluZyBvZiBpbnRlcm5hbCBTQ1NJIGNvbW1hbmRzIHNlbmQgdG8gdGhlIEhCQS4KKworCitXZWQgSnVsIDE5IDEwOjA5OjE3IDE5OTUgIE1pY2hhZWwgTmV1ZmZlciAgPG5ldWZmZXJAZ29vZnkuemR2LnVuaS1tYWluei5kZT4KKworCSogTGludXggMS4zLjExIHJlbGVhc2VkLgorCisJKiBlYXRhX2RtYS5jIChlYXRhX3F1ZXVlKShlYXRhX2ludF9oYW5kbGVyKTogQWRkZWQgY29kZSB0byBkbworCWNvbW1hbmQgbGF0ZW5jeSBtZWFzdXJlbWVudHMgaWYgcmVxdWVzdGVkIGJ5IHJvb3QgdGhyb3VnaAorCS9wcm9jL3Njc2kgaW50ZXJmYWNlLgorCVRocm91Z2hvdXQgVXNlIEhaIGNvbnN0YW50IGZvciB0aW1lIHJlZmVyZW5jZXMuCisKKwkqIGVhdGFfcGlvLmM6IFVzZSBIWiBjb25zdGFudCBmb3IgdGltZSByZWZlcmVuY2VzLgorCisJKiBhaWM3eHh4LmMsIGFpYzd4eHguaCwgYWljN3h4eF9hc20uYzogQ2hhbmdlZCBjb3B5cmlnaHQgZnJvbSBCU0QKKwl0byBHTlUgc3R5bGUuCisKKwkqIHNjc2kuaDogQWRkZWQgUkVBRF8xMiBjb21tYW5kIG9wY29kZSBjb25zdGFudAorCitXZWQgSnVsIDE5IDA5OjI1OjMwIDE5OTUgIE1pY2hhZWwgTmV1ZmZlciA8bmV1ZmZlckBnb29meS56ZHYudW5pLW1haW56LmRlPgorCisJKiBMaW51eCAxLjMuMTAgcmVsZWFzZWQuCisKKwkqIHNjc2lfcHJvYy5jIChkaXNwYXRjaF9zY3NpX2luZm8pOiBSZW1vdmVkIHVudXNlZCB2YXJpYWJsZS4KKworV2VkIEp1bCAxOSAwOToyNTozMCAxOTk1ICBNaWNoYWVsIE5ldWZmZXIgIDxuZXVmZmVyQGdvb2Z5Lnpkdi51bmktbWFpbnouZGU+CisKKwkqIExpbnV4IDEuMy45IHJlbGVhc2VkLgorCisJKiBzY3NpLmMgQmxhY2tsaXN0IGNvbmNlcHQgZXhwYW5kZWQgdG8gJ3N1cHBvcnQnIG1vcmUgZGV2aWNlCisJZGVmaWNpZW5jaWVzLiBibGFja2xpc3RbXSByZW5hbWVkIHRvIGRldmljZV9saXN0W10KKwkoc2Nhbl9zY3Npcyk6IENvZGUgY2xlYW51cC4KKworCSogc2NzaV9kZWJ1Zy5jIChzY3NpX2RlYnVnX3Byb2NfaW5mbyk6IEFkZGVkIHN1cHBvcnQgdG8gY29udHJvbAorCWRldmljZSBsb2NrdXAgc2ltdWxhdGlvbiB2aWEgL3Byb2Mvc2NzaSBpbnRlcmZhY2UuCisKKworV2VkIEp1bCAxOSAwOToyMjozNCAxOTk1ICBNaWNoYWVsIE5ldWZmZXIgIDxuZXVmZmVyQGdvb2Z5Lnpkdi51bmktbWFpbnouZGU+CisKKwkqIExpbnV4IDEuMy43IHJlbGVhc2VkLgorCisJKiBzY3NpX3Byb2MuYzogRml4ZWQgYSBudW1iZXIgb2YgYnVncyBpbiBkaXJlY3RvcnkgaGFuZGxpbmcKKworV2VkIEp1bCAxOSAwOToxODoyOCAxOTk1ICBNaWNoYWVsIE5ldWZmZXIgIDxuZXVmZmVyQGdvb2Z5Lnpkdi51bmktbWFpbnouZGU+CisKKwkqIExpbnV4IDEuMy41IHJlbGVhc2VkLgorCisJKiBOYXRpdmUgd2lkZSwgbXVsdGljaGFubmVsIGFuZCAvcHJvYy9zY3NpIHN1cHBvcnQgbm93IGluIG9mZmljaWFsCisJa2VybmVsIGRpc3RyaWJ1dGlvbi4KKworICAgICAgICAqIHNjc2kuYy9oLCBob3N0cy5jL2ggZXQgYWwgcmVpbmRlbnRlZCB0byBpbmNyZWFzZSByZWFkYWJpbGl0eQorCShlc3BlY2lhbGx5IG9uIDgwIGNvbHVtbiB3aWRlIHRlcm1pbmFscykuCisKKwkqIHNjc2kuYywgc2NzaV9wcm9jLmMsIC4uLy4uL2ZzL3Byb2MvaW5vZGUuYzogQWRkZWQKKwkvcHJvYy9zY3NpL3Njc2kgd2hpY2ggYWxsb3dzIHJvb3QgdG8gc2NhbiBmb3IgaG90cGx1Z2dlZCBkZXZpY2VzLgorCisJKiBzY3NpLmMgKHNjc2lfcHJvY19pbmZvKTogQWRkZWQsIHRvIHN1cHBvcnQgL3Byb2Mvc2NzaS9zY3NpLgorCShzY2FuX3Njc2lzKTogQWRkZWQgc29tZSAnc3BhZ2hldHRpJyBjb2RlIHRvIGFsbG93IHNjYW5uaW5nIGZvcgorCXNpbmdsZSBkZXZpY2VzLgorCQorCitUaHUgSnVuIDIwIDE1OjIwOjI3IDE5OTUgIE1pY2hhZWwgTmV1ZmZlciAgPG5ldWZmZXJAZ29vZnkuemR2LnVuaS1tYWluei5kZT4KKworICAgICAgICAqIHByb2MuYzogUmVuYW1lZCB0byBzY3NpX3Byb2MuYworCitNb24gSnVuIDEyIDIwOjMyOjQ1IDE5OTUgIE1pY2hhZWwgTmV1ZmZlciAgPG5ldWZmZXJAZ29vZnkuemR2LnVuaS1tYWluei5kZT4KKworCSogTGludXggMS4zLjAgcmVsZWFzZWQuCisKK01vbiBNYXkgMTUgMTk6MzM6MTQgMTk5NSAgTWljaGFlbCBOZXVmZmVyICA8bmV1ZmZlckBnb29meS56ZHYudW5pLW1haW56LmRlPgorCisJKiBzY3NpLmM6IEFkZGVkIG5hdGl2ZSBtdWx0aWNoYW5uZWwgYW5kIHdpZGUgc2NzaSBzdXBwb3J0LgorCisJKiBwcm9jLmMgKGRpc3BhdGNoX3Njc2lfaW5mbykgKGJ1aWxkX3Byb2NfZGlyX2hiYV9lbnRyaWVzKToKKwlVcGRhdGVkIC9wcm9jL3Njc2kgaW50ZXJmYWNlLgorCitUaHUgTWF5ICA0IDE3OjU4OjQ4IDE5OTUgIE1pY2hhZWwgTmV1ZmZlciAgPG5ldWZmZXJAZ29vZnkuemR2LnVuaS1tYWluei5kZT4KKworCSogc2QuYyAocmVxdWV1ZV9zZF9yZXF1ZXN0KTogWmVybyBvdXQgdGhlIHNjYXR0ZXJsaXN0IG9ubHkgaWYKKwlzY3NpX21hbGxvYyByZXR1cm5lZCBtZW1vcnkgZm9yIGl0LgorCisJKiBlYXRhX2RtYS5jIChyZWdpc3Rlcl9IQkEpIChlYXRhX3F1ZXVlKTogQWRkIHN1cHBvcnQgZm9yCisJbGFyZ2Ugc2NhdHRlci9nYXRoZXIgdGFibGVzIGFuZCBzZXQgdXNlX2NsdXN0ZXJpbmcgYWNjb3JkaW5nbHkKKworCSogaG9zdHMuYzogTWFrZSB1c2VfY2x1c3RlcmluZyBjaGFuZ2VhYmxlIGluIHRoZSBTY3NpX0hvc3Qgc3RydWN0dXJlLgorCitXZWQgQXByIDEyIDE1OjI1OjUyIDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjIuNSByZWxlYXNlZC4KKworCSogYnVzbG9naWMuYzogVXBkYXRlIHRvIHZlcnNpb24gMS4xNSAoRnJvbSBMZW9uYXJkIE4uIFp1YmtvZmYpLgorCUZpeGVkIGludGVycnVwdCByb3V0aW5lIHRvIGF2b2lkIHJhY2VzIHdoZW4gaGFuZGxpbmcgbXVsdGlwbGUKKwljb21wbGV0ZSBjb21tYW5kcyBwZXIgaW50ZXJydXB0LiAgU2VlbXMgdG8gY29tZSB1cCB3aXRoIGZhc3RlcgorCWNhcmRzLgorCisJKiBlYXRhX2RtYS5jOiBVcGRhdGUgdG8gMi4zLjVyLiBNb2R1bGFyaXplLiBJbXByb3ZlZCBlcnJvciBoYW5kbGluZworICAgICAgICB0aHJvdWdob3V0IGFuZCBmaXhlZCBidWcgaW50ZXJydXB0IHJvdXRpbmUgd2hpY2ggcmVzdWx0ZWQgaW4gc2hpZnRlZAorICAgICAgICBzdGF0dXMgYnl0ZXMuIEFkZGVkIGJsaW5rIExFRCBzdGF0ZSBjaGVja3MgZm9yIElTQSBhbmQgRUlTQSBIQkFzLgorICAgICAgICBNZW1vcnkgbWFuYWdlbWVudCBidWcgc2VlbXMgdG8gaGF2ZSBkaXNhcHBlYXJlZCA9PT4gaW5jcmVhc2luZworICAgICAgICBDX1BfTF9DVVJSRU5UX01BWCB0byAxNiBmb3Igbm93LiBEZWNyZWFzaW5nIENfUF9MX0RJViB0byAzIGZvcgorICAgICAgICBwZXJmb3JtYW5jZSByZWFzb25zLgorCisJKiBzY3NpLmM6IElmIHdlIGdldCBhIEZNSywgRU9NLCBvciBJTEkgd2hlbiBhdHRlbXB0aW5nIHRvIHNjYW4KKwl0aGUgYnVzLCBhc3N1bWUgdGhhdCBpdCB3YXMganVzdCBub2lzZSBvbiB0aGUgYnVzLCBhbmQgaWdub3JlCisJdGhlIGRldmljZS4KKworCSogc2NzaS5oOiBVcGRhdGUgYW5kIGFkZCBhIGJ1bmNoIG9mIG1pc3NpbmcgY29tbWFuZHMgd2hpY2ggd2UKKwl3ZXJlIG5ldmVyIHVzaW5nLgorCisJKiBzZC5jOiBVc2UgcmVzdG9yZV9mbGFncyBpbiBkb19zZF9yZXF1ZXN0IC0gdGhpcyBtYXkgcmVzdWx0IGluCisJbGF0ZW5jeSBjb25kaXRpb25zLCBidXQgaXQgZ2V0cyByaWQgb2YgcmFjZXMgYW5kIGNyYXNoZXMuCisJRG8gbm90IHNhdmUgZmxhZ3MgYWdhaW4gd2hlbiBzZWFyY2hpbmcgZm9yIGEgc2Vjb25kIGNvbW1hbmQgdG8KKwlxdWV1ZS4KKworCSogc3QuYzogVXNlIGJ5dGVzLCBub3QgU1RQLT5idWZmZXItPmJ1ZmZlcl9zaXplIHdoZW4gcmVhZGluZworCWZyb20gdGFwZS4KKworCitUdWUgQXByICA0IDA5OjQyOjA4IDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjIuNCByZWxlYXNlZC4KKworCSogc3QuYzogRml4IHR5cG8gLSByZXN0b3Jpbmcgd3JvbmcgZmxhZ3MuCisKK1dlZCBNYXIgMjkgMDY6NTU6MTIgMTk5NSAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMi4zIHJlbGVhc2VkLgorCisJKiBzdC5jOiBQZXJmb3JtIHNvbWUgd2FpdGluZyBvcGVyYXRpb25zIHdpdGggaW50ZXJydXB0cyBvZmYuCisJSXMgdGhpcyBjb3JyZWN0Pz8/CisKK1dlZCBNYXIgMjIgMTA6MzQ6MjYgMTk5NSAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMi4yIHJlbGVhc2VkLgorCisJKiBhaGExNTJ4LmM6IE1vZHVsYXJpemUuICBBZGQgc3VwcG9ydCBmb3IgUENNQ0lBLgorCisJKiBlYXRhLmM6IFVwZGF0ZSB0byB2ZXJzaW9uIDIuMC4gIEZpeGVkIGJ1ZyBwcmV2ZW50aW5nIG1lZGlhCisJZGV0ZWN0aW9uLiAgSWYgc2NzaV9yZWdpc3Rlcl9ob3N0IHJldHVybnMgTlVMTCwgZmFpbCBncmFjZWZ1bGx5LgorCisJKiBzY3NpLmM6IERldGVjdCBhcyBORUMgKGZvciBwaG90by1jZCBwdXJwb3NlcykgZm9yIHRoZSA4NAorCWFuZCAyNSBtb2RlbHMgYXMgIk5FQ19PTERDRFIiLgorCisJKiBzY3NpLmg6IEFkZCBkZWZpbmUgZm9yIE5FQ19PTERDRFIKKworCSogc3IuYzogQWRkIGhhbmRsaW5nIGZvciBORUNfT0xEQ0RSLiAgVHJlYXQgYXMgdW5rbm93bi4KKworCSogdTE0LTM0Zi5jOiBVcGRhdGUgdG8gdmVyc2lvbiAyLjAuICBGaXhlZCBzYW1lIGJ1ZyBhcyBpbgorCWVhdGEuYy4KKworCitNb24gTWFyICA2IDExOjExOjIwIDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjIuMCByZWxlYXNlZC4gIFllYWghISEKKworCSogTWlub3Igc3BlbGxpbmcvcHVuY3R1YXRpb24gY2hhbmdlcyB0aHJvdWdob3V0LiAgTm90aGluZworCXN1YnN0YW50aXZlLgorCitNb24gRmViIDIwIDIxOjMzOjAzIDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuOTUgcmVsZWFzZWQuCisKKwkqIHFsb2dpYy5jOiBVcGRhdGUgdG8gdmVyc2lvbiAwLjQxLgorCisJKiBzZWFnYXRlLmM6IENoYW5nZSBzb21lIG1lc3NhZ2UgdG8gYmUgbW9yZSBkZXNjcmlwdGl2ZSBhYm91dCB3aGF0CisJd2UgZGV0ZWN0ZWQuCisKKwkqIHNyLmM6IHNwZWxsaW5nL3doaXRlc3BhY2UgY2hhbmdlcy4KKworTW9uIEZlYiAyMCAyMTozMzowMyAxOTk1ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjk0IHJlbGVhc2VkLgorCitNb24gRmViIDIwIDA4OjU3OjE3IDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuOTMgcmVsZWFzZWQuCisKKwkqIGhvc3RzLmg6IENoYW5nZSBpb19wb3J0IHRvIGxvbmcgaW50IGZyb20gc2hvcnQuCisKKyAJKiA1M2M3LDh4eC5jOiBjcmFzaCBvbiBBRU4gZml4ZWQsIFNDU0kgcmVzZXQgaXMgbm8gbG9uZ2VyIGEgTk9QLAorIAkgIE5VTEwgcG9pbnRlciBwYW5pYyBvbiBvZGQgVURDcyBmaXhlZCwgdHdvIGJ1Z3MgaW4gZGlhZ25vc3RpYyBvdXRwdXQKKyAJICBmaXhlZCwgc2hvdWxkIGluaXRpYWxpemUgY29ycmVjdGx5IGlmIGxlZnQgcnVubmluZywgbm93IGxvYWRhYmxlLAorICAJICBuZXcgbWVtb3J5IGFsbG9jYXRpb24sIGV4dHJhbmVvdXMgZGlhZ25vc3RpYyBvdXRwdXQgc3VwcHJlc3NlZCwKKyAJICBzcGx4KCkgcmVwbGFjZWQgd2l0aCBzYXZlL3Jlc3RvcmUgZmxhZ3MuIFsgRHJldyBdCisKKwkqIGhvc3RzLmMsIGhvc3RzLmgsIHNjc2lfaW9jdGwuYywgc2QuYywgc2RfaW9jdGwuYywgc2cuYywgc3IuYywKKwlzcl9pb2N0bC5jOiBBZGQgc3BlY2lhbCBqdW5rIGF0IGVuZCB0aGF0IEVtYWNzIHdpbGwgdXNlIGZvcgorCWZvcm1hdHRpbmcgdGhlIGZpbGUuCisKKwkqIHFsb2dpYy5jOiBVcGRhdGUgdG8gdjAuNDBhLiAgSW1wcm92ZSBwYXJpdHkgaGFuZGxpbmcuCisKKwkqIHNjc2kuYzogQWRkIEhpdGFjaGkgREszMTJDIHRvIGJsYWNrbGlzdC4gIENoYW5nZSAifTsiIHRvICJ9IiBpbgorCW1hbnkgcGxhY2VzLiAgVXNlIHNjc2lfaW5pdF9tYWxsb2MgdG8gZ2V0IGNvbW1hbmQgYmxvY2sgLSBtYXkKKwluZWVkIHRoaXMgdG8gYmUgZG1hIGNvbXBhdGlibGUgZm9yIHNvbWUgaG9zdCBhZGFwdGVycy4KKwlSZXN0b3JlIGludGVycnVwdHMgYWZ0ZXIgdW5yZWdpc3RlcmluZyBhIGhvc3QuCisKKwkqIHNkLmM6IFVzZSBzdGkgaW5zdGVhZCBvZiByZXN0b3JlIGZsYWdzIC0gY2F1c2VzIGxhdGVuY3kgcHJvYmxlbXMuCisKKwkqIHNlYWdhdGUuYzogVXNlIGNvbnRyb2xsZXJfdHlwZSB0byBkZXRlcm1pbmUgc3RyaW5nIHVzZWQgd2hlbgorCXJlZ2lzdGVyaW5nIGlycS4KKworCSogc3IuYzogTW9yZSBwaG90by1jZCBoYWNrcyB0byBtYWtlIHN1cmUgd2UgZ2V0IHRoZSB4YSBzdHVmZiByaWdodC4KKwkqIHNyLmgsIHNyLmM6IENoYW5nZSBpc194YSB0byB4YV9mbGFncyBmaWVsZC4KKworCSogc3QuYzogRGlzYWJsZSByZXRyaWVzIGZvciB3cml0ZSBvcGVyYXRpb25zLgorCitXZWQgRmViIDE1IDEwOjUyOjU2IDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuOTIgcmVsZWFzZWQuCisKKwkqIGVhdGEuYzogVXBkYXRlIHRvIDEuMTcuCisKKwkqIGVhdGFfZG1hLmM6IFVwZGF0ZSB0byAyLjMxYS4gQWRkIG1vcmUgc3VwcG9ydCBmb3IgL3Byb2Mvc2NzaS4KKyAgICAgICAgQ29udGludWluZyBtb2R1bGFyaXphdGlvbi4gTGVzcyBjcmFzaGVzIGJlY2F1c2Ugb2YgdGhlIGJ1ZyBpbiB0aGUKKyAgICAgICAgbWVtb3J5IG1hbmFnZW1lbnQgPT0+IGluY3JlYXNlIENfUF9MX0NVUlJFTlRfTUFYIHRvIDEwCisgICAgICAgIGFuZCBkZWNyZWFzZSBDX1BfTF9ESVYgdG8gNC4KKworCSogaG9zdHMuYzogSWYgd2UgcmVtb3ZlIGxhc3QgaG9zdCByZWdpc3RlcmVkLCByZXVzZSBob3N0IG51bWJlci4KKwlXaGVuIGZyZWVpbmcgbWVtb3J5IGZyb20gaG9zdCBiZWluZyBkZXJlZ2lzdGVyZWQsIGZyZWUgZXh0cmFfYnl0ZXMKKwl0b28uCisKKwkqIHNjc2kuYyAoc2Nhbl9zY3Npcyk6IG1lbXNldChTRHBudCwgMCkgYW5kIHNldCBTQ21kLmRldmljZSB0byBTRHBudC4KKwlDaGFuZ2UgbWVtb3J5IGFsbG9jYXRpb24gdG8gd29yayBhcm91bmQgYnVncyBpbiBfX2dldF9kbWFfcGFnZXMuCisJRG8gbm90IGZyZWUgaG9zdCBpZiB1c2FnZSBjb3VudCBpcyBub3QgemVybyAoZm9yIG1vZHVsZXMpLgorCisJKiBzcl9pb2N0bC5jOiBJbmNyZWFzZSBJT0NUTF9USU1FT1VUIHRvIDMwMDAuCisKKwkqIHN0LmM6IEFsbG93IGZvciBTVF9FWFRSQV9ERVZTIGluIHN0IGRhdGEgc3RydWN0dXJlcy4KKworCSogdTE0LTM0Zi5jOiBVcGRhdGUgdG8gMS4xNy4KKworVGh1IEZlYiAgOSAxMDoxMToxNiAxOTk1ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjkxIHJlbGVhc2VkLgorCisJKiBlYXRhLmM6IFVwZGF0ZSB0byAxLjE2LiAgVXNlIHdpc2hfYmxvY2sgaW5zdGVhZCBvZiBob3N0LT5ibG9jay4KKworCSogaG9zdHMuYzogSW5pdGlhbGl6ZSB3aXNoX2Jsb2NrIHRvIDAuCisKKwkqIGhvc3RzLmg6IEFkZCB3aXNoX2Jsb2NrLgorCisJKiBzY3NpLmM6IFVzZSB3aXNoX2Jsb2NrIGFzIGluZGljYXRvciB0aGF0IHRoZSBob3N0IHNob3VsZCBiZSBhZGRlZAorCXRvIGJsb2NrIGxpc3QuCisKKwkqIHNnLmM6IEFkZCBTR19FWFRSQV9ERVZTIHRvIG51bWJlciBvZiBzbG90cy4KKworCSogdTE0LTM0Zi5jOiBVc2Ugd2lzaF9ibG9jay4KKworVHVlIEZlYiAgNyAxMTo0NjowNCAxOTk1ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjkwIHJlbGVhc2VkLgorCisJKiBlYXRhLmM6IENoYW5nZSBuYW1pbmcgZnJvbSBlYXRhXyogdG8gZWF0YTJ4XyouICBOb3cgYXQgdmVycyAxLjE1LgorCVVwZGF0ZSBpbnRlcnJ1cHQgaGFuZGxlciB0byB0YWtlIHB0X3JlZ3MgYXMgYXJnLiAgQWxsb3cgYmxvY2tpbmcKKwlldmVuIGlmIGxvYWRlZCBhcyBtb2R1bGUuICBJbml0aWFsaXplIHRhcmdldF90aW1lX291dCBhcnJheS4KKwlEbyBub3QgcHV0IHN0aSgpOyBpbiB0aW1pbmcgbG9vcC4KKworCSogaG9zdHMuYzogRG8gbm90IHJldXNlIGhvc3QgbnVtYmVycy4KKwlVc2Ugc2NzaV9tYWtlX2Jsb2NrZWRfbGlzdCB0byBnZW5lcmF0ZSBibG9ja2luZyBsaXN0LgorCisJKiBzY3JpcHRfYXNtLnBsOiAgQmVhdHMgbWUuICBEb24ndCBrbm93IHBlcmwuICBTb21ldGhpbmcgdG8gZG8gd2l0aAorCXBoYXNlIGluZGV4LgorCisJKiBzY3NpLmMgKHNjc2lfbWFrZV9ibG9ja2VkX2xpc3QpOiBOZXcgZnVuY3Rpb24gLSBjb2RlIGNvcGllZCBmcm9tCisJaG9zdHMuYy4KKworCSogc2NzaS5jOiBVcGRhdGUgY29kZSB0byBkaXNhYmxlIHBob3RvIENEIGZvciBUb3NoaWJhIGNkcm9tcy4KKwlVc2UganVzdCBtYW51ZmFjdHVyZXIgbmFtZSwgbm90IG1vZGVsIG51bWJlci4KKworCSogc3IuYzogRml4IHNldHRpbmcgZGVuc2l0eSBmb3IgVG9zaGliYSBkcml2ZXMuCisKKwkqIHUxNC0zNGYuYzogQ2xlYXIgdGFyZ2V0X3RpbWVfb3V0IGFycmF5IGR1cmluZyByZXNldC4KKworV2VkIEZlYiAgMSAwOToyMDo0NSAxOTk1ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjg5IHJlbGVhc2VkLgorCisJKiBNYWtlZmlsZSwgdTE0LTM0Zi5jOiBNb2R1bGFyaXplLgorCisJKiBNYWtlZmlsZSwgZWF0YS5jOiBNb2R1bGFyaXplLiAgTm93IHZlcnNpb24gMS4xNAorCisJKiBOQ1I1MzgwLmM6IFVwZGF0ZSBpbnRlcnJ1cHQgaGFuZGxlciB3aXRoIG5ldyBhcmdsaXN0LiAgTWlub3IKKwljbGVhbnVwcy4KKworCSogZWF0YV9kbWEuYzogQmVnaW4gdG8gbW9kdWxhcml6ZS4gIEFkZCBob29rcyBmb3IgL3Byb2Mvc2NzaS4KKwlOZXcgdmVyc2lvbiAyLjMuMGEuIEFkZCBjb2RlIGluIGludGVycnVwdCBoYW5kbGVyIHRvIGFsbG93CisgICAgICAgIGNlcnRhaW4gQ0RST00gZHJpdmVycyB0byBiZSBkZXRlY3RlZCB3aGljaCByZXR1cm4gYQorICAgICAgICBDSEVDS19DT05ESVRJT04gZHVyaW5nIFNDU0kgYnVzIHNjYW4uIEFkZCBvcGNvZGUgY2hlY2sgdG8gZ2V0CisgICAgICAgIGFsbCBEQVRBIElOIGFuZCBEQVRBIE9VVCBwaGFzZXMgcmlnaHQuIFV0aWxpemUgSEJBX2ludGVycHJldCBmbGFnLgorCUltcHJvdmVtZW50cyBpbiBIQkEgaWRlbnRpZmljYXRpb24uIFZhcmlvdXMgb3RoZXIgbWlub3Igc3R1ZmYuCisKKwkqIGhvc3RzLmM6IEluaXRpYWxpemUgLT5kbWFfY2hhbm5lbCBhbmQgLT5pb19wb3J0IHdoZW4gcmVnaXN0ZXJpbmcKKwlhIG5ldyBob3N0LgorCisJKiBxbG9naWMuYzogTW9kdWxhcml6ZSBhbmQgYWRkIFBDTUNJQSBzdXBwb3J0LgorCisJKiBzY3NpLmM6IEFkZCBIaXRhY2hpIHRvIGJsYWNrbGlzdC4KKworCSogc2NzaS5jOiBDaGFuZ2UgZGVmYXVsdCB0byBubyBsdW4gc2NhbiAodG9vIG1hbnkgcHJvYmxlbSBkZXZpY2VzKS4KKworCSogc2NzaS5oOiBEZWZpbmUgUVVFVUVfRlVMTCBjb25kaXRpb24uCisKKwkqIHNkLmM6IERvIG5vdCBjaGVjayBmb3Igbm9uLWV4aXN0ZW50IHBhcnRpdGlvbiB1bnRpbCBhZnRlcgorCW5ldyBtZWRpYSBjaGVjay4KKworCSogc2cuYzogVW5kbyBwcmV2aW91cyBjaGFuZ2Ugd2hpY2ggd2FzIHdyb25nLgorCisJKiBzcl9pb2N0bC5jOiBJbmNyZWFzZSBJT0NUTF9USU1FT1VUIHRvIDIwMDAuCisKKwkqIHN0LmM6IFBhdGNoZXMgZnJvbSBLYWkgLSBpbXByb3ZlIGZpbGVtYXJrIGhhbmRsaW5nLgorCitUdWUgSmFuIDMxIDE3OjMyOjEyIDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuODggcmVsZWFzZWQuCisKKwkqIFRocm91Z2hvdXQgLSBzcGVsbGluZy9ncmFtbWFyIGZpeHVwcy4KKworCSogc2NzaS5jOiBNYWtlIHN1cmUgdGhhdCBhbGwgYnVmZmVycyBhcmUgMTYgYnl0ZSBhbGlnbmVkIC0gc29tZQorCWRyaXZlcnMgKGJ1c2xvZ2ljKSBuZWVkIHRoaXMuCisKKwkqIHNjc2kuYyAoc2Nhbl9zY3Npcyk6IFJlbW92ZSBtZXNzYWdlIHByaW50ZWQuCisKKwkqIHNjc2kuYyAoc2NzaV9pbml0KTogTW92ZSBtZXNzYWdlIGhlcmUuCisKK01vbiBKYW4gMzAgMDY6NDA6MjUgMTk5NSAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS44NyByZWxlYXNlZC4KKworCSogc3IuYzogUGhvdG8tY2QgcmVsYXRlZCBjaGFuZ2VzLiAoR2VyZCBLbm9ycj8/KS4KKworCSogc3QuYzogQ2hhbmdlcyBmcm9tIEthaSByZWxhdGVkIHRvIEVPTSBkZXRlY3Rpb24uCisKK01vbiBKYW4gMjMgMjM6NTM6MTAgMTk5NSAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS44NiByZWxlYXNlZC4KKworCSogNTNjNyw4eHguaDogQ2hhbmdlIFNHIHNpemUgdG8gMTI3LgorCisJKiBlYXRhX2RtYTogVXBkYXRlIHRvIHZlcnNpb24gMi4xMGkuIFJlbW92ZSBidWcgaW4gdGhlIHJlZ2lzdHJhdGlvbgorICAgICAgICBvZiBtdWx0aXBsZSBIQkFzIGFuZCBjaGFubmVscy4gTWlub3Igb3RoZXIgaW1wcm92ZW1lbnRzIGFuZCBzdHlsaXN0aWMKKyAgICAgICAgY2hhbmdlcy4KKworCSogc2NzaS5jOiBUZXN0IGZvciBUb3NoaWJhIFhNLTM0MDFUQSBhbmQgZXhjbHVkZSBmcm9tIGRldGVjdGlvbgorCWFzIHRvc2hpYmEgZHJpdmUgLSBwaG90byBjZCBkb2VzIG5vdCB3b3JrIHdpdGggdGhpcyBkcml2ZS4KKworCSogc3IuYzogIFVwZGF0ZSBwaG90b2NkIGNvZGUuCisKK01vbiBKYW4gMjMgMjM6NTM6MTAgMTk5NSAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS44NSByZWxlYXNlZC4KKworCSogc3QuYywgc3RfaW9jdGwuYywgc2cuYywgc2RfaW9jdGwuYywgc2NzaV9pb2N0bC5jLCBob3N0cy5jOgorCWluY2x1ZGUgbGludXgvbW0uaAorCisJKiBxbG9naWMuYywgYnVzbG9naWMuYywgYWhhMTU0Mi5jOiBJbmNsdWRlIGxpbnV4L21vZHVsZS5oLgorCitTdW4gSmFuIDIyIDIyOjA4OjQ2IDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuODQgcmVsZWFzZWQuCisKKwkqIE1ha2VmaWxlOiBTdXBwb3J0IGZvciBsb2FkYWJsZSBRTE9HSUMgYm9hcmRzLgorCisJKiBhaGExNTJ4LmM6IFVwZGF0ZSB0byB2ZXJzaW9uIDEuOCBmcm9tIEp1ZXJnZW4uCisKKwkqIGVhdGFfZG1hLmM6IFVwZGF0ZSBmcm9tIE1pY2hhZWwgTmV1ZmZlci4KKyAgICAgICAgUmVtb3ZlIGhhcmQgbGltaXQgb2YgMiBjb21tYW5kcyBwZXIgbHVuIGFuZCBtYWtlIGl0IGJldHRlcgorICAgICAgICBjb25maWd1cmFibGUuIEltcHJvdmVtZW50cyBpbiBIQkEgaWRlbnRpZmljYXRpb24uCisKKwkqIGluMjAwMC5jOiBGaXggYmlvc3BhcmFtIHRvIHN1cHBvcnQgbGFyZ2UgZGlza3MuCisKKwkqIHFsb2dpYy5jOiBNaW5vciBjaGFuZ2VzIChjaGFuZ2Ugc3RpIC0+IHJlc3RvcmVfZmxhZ3MpLgorCitXZWQgSmFuIDE4IDIzOjMzOjA5IDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuODMgcmVsZWFzZWQuCisKKwkqIGFoYTE1NDIuYyhhaGExNTQyX2ludHJfaGFuZGxlKTogVXNlIGFyZ3VtZW50cyBoYW5kZWQgZG93biB0byBmaW5kCisJd2hpY2ggaXJxLgorCisJKiBidXNsb2dpYy5jOiBMaWtld2lzZS4KKworCSogZWF0YV9kbWEuYzogVXNlIG1pbiBvZiAyIGNtZF9wZXJfbHVuIGZvciBPQ1NfZW5hYmxlZCBib2FyZHMuCisKKwkqIHNjc2kuYzogTWFrZSBSRUNPVkVSRURfRVJST1IgYSBTVUdHRVNUX0lTX09LLgorCisJKiBzZC5jOiBGYWlsIGlmIHdlIGFyZSBvcGVuaW5nIGEgbm9uLWV4aXN0ZW50IHBhcnRpdGlvbi4KKworCSogc3IuYzogQnVtcCBTUl9USU1FT1VUIHRvIDE1MDAwLgorCURvIG5vdCBwcm9iZSBmb3IgbWVkaWEgc2l6ZSBhdCBib290IHRpbWUoaGFyZCBvbiBjaGFuZ2VycykuCisJRmxhZyBkZXZpY2UgYXMgbmVlZGluZyBzZWN0b3Igc2l6ZSBpbnN0ZWFkLgorCisJKiBzcl9pb2N0bC5jOiBSZW1vdmUgQ0RST01NVUxUSVNFU1NJT05fU1lTIGlvY3RsLgorCisJKiB1bHRyYXN0b3IuYzogRml4IGJ1ZyBpbiBjYWxsIHRvIHVsdHJhc3Rvcl9pbnRlcnJ1cHQgKHdyb25nICNhcmdzKS4KKworTW9uIEphbiAxNiAwNzoxODoyMyAxOTk1ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjgyIHJlbGVhc2VkLgorCisJVGhyb3VnaG91dC4KKwktIENoYW5nZSBhbGwgaW50ZXJydXB0IGhhbmRsZXJzIHRvIGFjY2VwdCBuZXcgY2FsbGluZyBjb252ZW50aW9uLgorCUluIHBhcnRpY3VsYXIsIHdlIG5vdyByZWNlaXZlIHRoZSBpcnEgbnVtYmVyIGFzIG9uZSBvZiB0aGUgYXJndW1lbnRzLgorCisJKiBNb3JlIG1pbm9yIHNwZWxsaW5nIGNvcnJlY3Rpb25zIGluIHNvbWUgb2YgdGhlIG5ldyBmaWxlcy4KKworCSogYWhhMTU0Mi5jLCBidXNsb2dpYy5jOiBDbGVhbiB1cCBpbnRlcnJ1cHQgaGFuZGxlciBhIGxpdHRsZSBub3cKKwl0aGF0IHdlIHJlY2VpdmUgdGhlIGlycSBhcyBhbiBhcmcuCisKKwkqIGFoYTI3NHguYzogcy9zbmFyZl9yZWdpb24vcmVxdWVzdF9yZWdpb24vCisKKwkqIGVhdGEuYzogVXBkYXRlIHRvIHZlcnNpb24gMS4xMi4gICBGaXggc29tZSBjb21tZW50cyBhbmQgZGlzcGxheSBhCisJbWVzc2FnZSBpZiB3ZSBjYW5ub3QgcmVzZXJ2ZSB0aGUgcG9ydCBhZGRyZXNzZXMuCisKKwkqIHUxNC0zNGYuYzogVXBkYXRlIHRvIHZlcnNpb24gMS4xMy4gICBGaXggc29tZSBjb21tZW50cyBhbmQgZGlzcGxheSBhCisJbWVzc2FnZSBpZiB3ZSBjYW5ub3QgcmVzZXJ2ZSB0aGUgcG9ydCBhZGRyZXNzZXMuCisKKwkqIGVhdGFfZG1hLmM6IERlZmluZSBnZXRfYm9hcmRfZGF0YSBmdW5jdGlvbiAoc2VuZCBJTlFVSVJZIGNvbW1hbmQpLgorCVVzZSB0byBpbXByb3ZlIGRldGVjdGlvbiBvZiB2YXJpYW50cyBvZiBkaWZmZXJlbnQgRFBUIGJvYXJkcy4gIENoYW5nZQorCXZlcnNpb24gc3VibnVtYmVyIHRvICIwZyIuCisKKwkqIGZkb21haW4uYzogIFVwZGF0ZSB0byB2ZXJzaW9uIDUuMjYuICBJbXByb3ZlIGRldGVjdGlvbiBvZiBzb21lIGJvYXJkcworCXJlcGFja2FnZWQgYnkgSUJNLgorCisJKiBzY3NpLmMgKHNjc2lfcmVnaXN0ZXJfaG9zdCk6IENoYW5nZSAibmFtZSIgdG8gY29uc3QgY2hhciAqLgorCisJKiBzci5jOiBGaXggcHJvYmxlbSBpbiBzZXQgbW9kZSBjb21tYW5kIGZvciBUb3NoaWJhIGRyaXZlcy4KKworCSogc3IuYzogRml4IHR5cG8gZnJvbSBwYXRjaCA4MS4KKworRnJpIEphbiAxMyAxMjo1NDo0NiAxOTk1ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjgxIHJlbGVhc2VkLiAgQ29kZWZyZWV6ZSBmb3IgMS4yIHJlbGVhc2UgYW5ub3VuY2VkLgorCisJQmlnIGNoYW5nZXMgaGVyZS4KKworCSogZWF0YV9kbWEuKjogTmV3IGZpbGVzIGZyb20gTWljaGFlbCBOZXVmZmVyLgorCShuZXVmZmVyQGdvb2Z5Lnpkdi51bmktbWFpbnouZGUpLiAgU2hvdWxkIHN1cHBvcnQKKwlhbGwgZWF0YS9kcHQgY2FyZHMuCisKKwkqIGhvc3RzLmMsIE1ha2VmaWxlOiBBZGQgZWF0YV9kbWEuCisKKwkqIFJFQURNRS5zdDogRG9jdW1lbnQgTVRFT00uCisKKwlQYXRjaGVzIGZyb20gbWUgKEVSWSkgdG8gZmluaXNoIHN1cHBvcnQgZm9yIGxvdy1sZXZlbCBsb2FkYWJsZSBzY3NpLgorCUl0IG5vdyB3b3JrcywgYW5kIGlzIGFjdHVhbGx5IHVzZWZ1bC4KKworCSogVGhyb3VnaG91dCAtIGFkZCBuZXcgYXJndW1lbnQgdG8gc2NzaV9pbml0X21hbGxvYyB0aGF0IHRha2VzIGFuCisJYWRkaXRpb25hbCBwYXJhbWV0ZXIuICBUaGlzIGlzIHVzZWQgYXMgYSBwcmlvcml0eSB0byBrbWFsbG9jLAorCWFuZCB5b3UgY2FuIHNwZWNpZnkgdGhlIEdGUF9ETUEgZmxhZyBpZiB5b3UgbmVlZCBETUEtYWJsZSBtZW1vcnkuCisKKwkqIE1ha2VmaWxlOiBGb3Igc291cmNlIGZpbGVzIHRoYXQgYXJlIGxvYWRhYmxlLCBhbHdheXMgYWRkIG5hbWUKKwl0byBTQ1NJX1NSQ1MuICBGaWxsIGluIG1vZHVsZXM6IHRhcmdldC4KKworCSogaG9zdHMuYzogIENoYW5nZSBuZXh0X2hvc3QgdG8gbmV4dF9zY3NpX2hvc3QsIGFuZCBtYWtlIGdsb2JhbC4KKwlQcmludCBob3N0cyBhZnRlciB3ZSBoYXZlIGlkZW50aWZpZWQgYWxsIG9mIHRoZW0uICBVc2UgaW5mbygpCisJZnVuY3Rpb24gaWYgcHJlc2VudCwgb3RoZXJ3aXNlIHVzZSBuYW1lIGZpZWxkLgorCisJKiBob3N0cy5oOiBDaGFuZ2UgYXR0YWNoIGZ1bmN0aW9uIHRvIHJldHVybiBpbnQsIG5vdCB2b2lkLgorCURlZmluZSBudW1iZXIgb2YgZGV2aWNlIHNsb3RzIHRvIGFsbG93IGZvciBsb2FkYWJsZSBkZXZpY2VzLgorCURlZmluZSB0YWdzIHRvIHRlbGwgc2NzaSBtb2R1bGUgY29kZSB3aGF0IHR5cGUgb2YgbW9kdWxlIHdlCisJYXJlIGxvYWRpbmcuCisKKwkqIHNjc2kuYzogRml4IHNjYW5fc2NzaXMgc28gdGhhdCBpdCBjYW4gYmUgcnVuIGJ5IGEgdXNlciBwcm9jZXNzLgorCURvIG5vdCB1c2Ugd2FpdGluZyBsb29wcyAtIHVzZSB1cCBhbmQgZG93biBtZWNoYW5pc20gYXMgbG9uZworCWFzIGN1cnJlbnQgIT0gdGFza1swXS4KKworCSogc2NzaS5jKHNjYW5fc2NzaXMpOiBEbyBub3QgdXNlIHN0YWNrIHZhcmlhYmxlcyBmb3IgSS9PIC0gdGhpcworCWNvdWxkIGJlID4gMTZNYiBpZiB3ZSBhcmUgbG9hZGluZyBhIG1vZHVsZSBhdCBydW50aW1lIChpLmUuIHVzZQorCXNjc2lfaW5pdF9tYWxsb2MgdG8gZ2V0IHNvbWUgbWVtb3J5IHdlIGtub3cgd2lsbCBiZSBzYWZlKS4KKworCSogc2NzaS5jOiBDaGFuZ2UgZG1hIGZyZWVsaXN0IHRvIGJlIGEgc2V0IG9mIHBhZ2VzLiAgVGhpcyBhbGxvd3MKKwl1cyB0byBkeW5hbWljYWxseSBhZGp1c3QgdGhlIHNpemUgb2YgdGhlIGxpc3QgYnkgYWRkaW5nIG1vcmUgcGFnZXMKKwl0byB0aGUgcGFnZWxpc3QuICBGaXggc2NzaV9tYWxsb2MgYW5kIHNjc2lfZnJlZSBhY2NvcmRpbmdseS4KKworCSogc2NzaV9tb2R1bGUuYzogRml4IGluY2x1ZGUuCisKKwkqIHNkLmM6IERlY2xhcmUgZGV0YWNoIGZ1bmN0aW9uLiAgSW5jcmVtZW50L2RlY3JlbWVudCBtb2R1bGUgdXNhZ2UKKwljb3VudCBhcyByZXF1aXJlZC4gIEZpeCBpbml0IGZ1bmN0aW9ucyB0byBhbGxvdyBsb2FkZWQgZGV2aWNlcy4KKwlSZXZhbGlkYXRlIGFsbCBuZXcgZGlza3Mgc28gd2UgZ2V0IHRoZSBwYXJ0aXRpb24gdGFibGVzLiAgRGVmaW5lCisJZGV0YWNoIGZ1bmN0aW9uLgorCisJKiBzci5jOiBMaWtld2lzZS4KKworCSogc2cuYzogRGVjbGFyZSBkZXRhY2ggZnVuY3Rpb24uICBBbGxvdyBhdHRhY2htZW50IG9mIGRldmljZXMgb24KKwlsb2FkZWQgZHJpdmVycy4KKworCSogc3QuYzogRGVjbGFyZSBkZXRhY2ggZnVuY3Rpb24uICBJbmNyZW1lbnQvZGVjcmVtZW50IG1vZHVsZSB1c2FnZQorCWNvdW50IGFzIHJlcXVpcmVkLgorCitUdWUgSmFuIDEwIDEwOjA5OjU4IDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuNzkgcmVsZWFzZWQuCisKKwlQYXRjaCBmcm9tIHNvbWUgdW5kZXRlcm1pbmVkIGluZGl2aWR1YWwgd2hvIG5lZWRzIHRvIGdldCBhIGxpZmUgOi0pLgorCisJKiBzci5jOiBBdHRhY2tlZCBieSBzcGVsbGluZyBiZWUuLi4KKworCVBhdGNoZXMgZnJvbSBHZXJkIEtub3JyOgorCisJKiBzci5jOiBtYWtlIHByaW50ayBtZXNzYWdlcyBmb3IgcGhvdG9DRCBhIGxpdHRsZSBtb3JlIGluZm9ybWF0aXZlLgorCisJKiBzcl9pb2N0bC5jOiBGaXggQ0RST01NVUxUSVNFU1NJT05fU1lTIGlvY3RsLgorCitNb24gSmFuICA5IDEwOjAxOjM3IDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuNzggcmVsZWFzZWQuCisKKwkqIE1ha2VmaWxlOiBBZGQgZW1wdHkgbW9kdWxlczogdGFyZ2V0LgorCisJKiBXaGVlZS4gIE5vdyBjaGFuZ2UgcmVnaXN0ZXJfaW9tZW0gdG8gcmVxdWVzdF9yZWdpb24uCisKKwkqIGluMjAwMC5jOiBCdWdmaXggLSBhcHBhcmVudGx5IHRoaXMgaXMgdGhlIGZpeCB0aGF0IHdlIGhhdmUKKwlhbGwgYmVlbiB3YWl0aW5nIGZvci4gIEl0IGZpeGVzIGEgcHJvYmxlbSB3aGVyZWJ5IHRoZSBkcml2ZXIKKwlpcyBub3Qgc3RhYmxlIHVuZGVyIGhlYXZ5IGxvYWQuICBSYWNlIGNvbmRpdGlvbiBhbmQgYWxsIHRoYXQuCisJUGF0Y2ggZnJvbSBQZXRlciBMdS4KKworV2VkIEphbiAgNCAyMToxNzo0MCAxOTk1ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjc3IHJlbGVhc2VkLgorCisJKiA1M2M3LDh4eC5jOiBGaXggZnJvbSBMaW51cyAtIGVtdWxhdGUgc3BseC4KKworCVRocm91Z2hvdXQ6CisKKwkJQ2hhbmdlICJzbmFyZl9yZWdpb24iIHdpdGggInJlZ2lzdGVyX2lvbWVtIi4KKworCSogc2NzaV9tb2R1bGUuYzogTmV3IGZpbGUuICBDb250YWlucyBzdXBwb3J0IGZvciBsb3ctbGV2ZWwgbG9hZGFibGUKKwkgIHNjc2kgZHJpdmVycy4gW0VSWV0uCisKKwkqIHNkLmM6IE1vcmUgcy9pbnQvbG9uZy8gY2hhbmdlcy4KKworCSogc2VhZ2F0ZS5jOiBFeHBsaWNpdGx5IGluY2x1ZGUgbGludXgvY29uZmlnLmgKKworCSogc2cuYzogSW5jcmVtZW50L2RlY3JlbWVudCBtb2R1bGUgdXNhZ2UgY291bnQgb24gb3Blbi9jbG9zZS4KKworCSogc2cuYzogQmUgYSBiaXQgbW9yZSBjYXJlZnVsIGFib3V0IHRoZSB1c2VyIG5vdCBzdXBwbHlpbmcgZW5vdWdoCisJICBpbmZvcm1hdGlvbiBmb3IgYSB2YWxpZCBjb21tYW5kLiAgUGFzcyBjb3JyZWN0IHNpemUgZG93biB0bworCSAgc2NzaV9kb19jbWQuCisKKwkqIHNyLmM6ICBNb3JlIGNoYW5nZXMgZm9yIFBob3RvLUNELiAgVGhpcyBhcHBhcmVudGx5IGJyZWFrcyBORUMgZHJpdmVzLgorCisJKiBzcl9pb2N0bC5jOiAgU3VwcG9ydCBDRFJPTU1VTFRJU0VTU0lPTiBpb2N0bC4KKworCitTdW4gSmFuICAxIDE5OjU1OjIxIDE5OTUgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuNzYgcmVsZWFzZWQuCisKKwkqIGNvbnN0YW50cy5jOiBBZGQgdHlwZSBjYXN0IGluIHN3aXRjaCBzdGF0ZW1lbnQuCisKKwkqIHNjc2kuYyAoc2NzaV9mcmVlKTogQ2hhbmdlIGRhdGF0eXBlIG9mICJvZmZzZXQiIHRvIGxvbmcuCisJICAoc2NzaV9tYWxsb2MpOiBDaGFuZ2UgYSBmZXcgbW9yZSB2YXJpYWJsZXMgdG8gbG9uZy4gIFdobworCSAgZGlkIHRoaXMgYW5kIHdoeSB3YXMgaXQgaW1wb3J0YW50PyAgNjQgYml0IG1hY2hpbmVzPworCisKKwlMb3RzIG9mIGNoYW5nZXMgdG8gdXNlIHNhdmVfc3RhdGUvcmVzdG9yZV9zdGF0ZSBpbnN0ZWFkIG9mIGNsaS9zdGkuCisJRmlsZXMgY2hhbmdlZCBpbmNsdWRlOgorCisJKiBhaGExNTQyLmM6CisJKiBhaGExNzQwLmM6CisJKiBidXNsb2dpYy5jOgorCSogaW4yMDAwLmM6CisJKiBzY3NpLmM6CisJKiBzY3NpX2RlYnVnLmM6CisJKiBzZC5jOgorCSogc3IuYzoKKwkqIHN0LmM6CisKK1dlZCBEZWMgMjggMTY6Mzg6MjkgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS43NSByZWxlYXNlZC4KKworCSogYnVzbG9naWMuYzogU3BlbGxpbmcgZml4LgorCisJKiBzY3NpLmM6IEFkZCBIUCBDMTc5MEEgYW5kIEMyNTAwQSBzY2FuamV0IHRvIGJsYWNrbGlzdC4KKworCSogc2NzaS5jOiBTcGVsbGluZyBmaXh1cC4KKworCSogc2QuYzogQWRkIHN1cHBvcnQgZm9yIHNkX2hhcmRzaXplcyAoaGFyZCBzZWN0b3Igc2l6ZXMpLgorCisJKiB1bHRyYXN0b3IuYzogVXNlIHNhdmVfZmxhZ3MvcmVzdG9yZV9mbGFncyBpbnN0ZWFkIG9mIGNsaS9zdGkuCisKK0ZyaSBEZWMgMjMgMTM6MzY6MjUgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS43NCByZWxlYXNlZC4KKworCSogUkVBRE1FLnN0OiBVcGRhdGUgZnJvbSBLYWkgTWFraXNhcmEuCisKKwkqIGVhdGEuYzogTmV3IHZlcnNpb24gZnJvbSBEYXJpbyAtIHZlcnNpb24gMS4xMS4KKwkgIHVzZSBzY3NpY2FtIGJpb3NfcGFyYW0gcm91dGluZS4gIEFkZCBzdXBwb3J0IGZvciAyMDExCisJICBhbmQgMjAyMSBib2FyZHMuCisKKwkqIGhvc3RzLmM6IEFkZCBzdXBwb3J0IGZvciBibG9ja2luZy4gIExpbmtlZCBsaXN0IGF1dG9tYXRpY2FsbHkKKwkgIGdlbmVyYXRlZCB3aGVuIHNocG50LT5ibG9jayBpcyBzZXQuCisKKwkqIHNjc2kuYzogQWRkIHNhbmt5byAmIEhQIHNjYW5qZXQgdG8gYmxhY2tsaXN0LiAgQWRkIHN1cHBvcnQgZm9yCisJICBraWNraW5nIHRoaW5ncyBsb29zZSB3aGVuIHdlIGRlYWRsb2NrLgorCisJKiBzY3NpLmM6IFJlY29nbml6ZSBzY2FubmVycyBhbmQgcHJvY2Vzc29ycyBpbiBzY2FuX3Njc2lzLgorCisJKiBzY3NpX2lvY3RsLmg6IEluY3JlYXNlIHRpbWVvdXQgdG8gOSBzZWNvbmRzLgorCisJKiBzdC5jOiBOZXcgdmVyc2lvbiBmcm9tIEthaSAtIGFkZCBiZXR0ZXIgc3VwcG9ydCBmb3IgYmFja3NwYWNlLgorCisJKiB1MTQtMzRmLmM6IE5ldyB2ZXJzaW9uIGZyb20gRGFyaW8uICBTdXBwb3J0cyBibG9ja2luZy4KKworV2VkIERlYyAxNCAxNDo0NjozMCAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjczIHJlbGVhc2VkLgorCisJKiBidXNsb2dpYy5jOiBVcGRhdGUgZnJvbSBEYXZlIEdlbnR6ZWwuICBWZXJzaW9uIDEuMTQuCisJICBBZGQgbW9kdWxlIHJlbGF0ZWQgc3R1ZmYuICAgTW9yZSBmYXVsdCB0b2xlcmFudCBpZiBvdXQgb2YKKwkgIERNQSBtZW1vcnkuCisKKwkqIGZkb21haW4uYzogTmV3IHZlcnNpb24gZnJvbSBSaWsgRmFpdGggLSB2ZXJzaW9uIDUuMjIuICBBZGQgc3VwcG9ydAorCSAgZm9yIElTQS0yMDBTIFNDU0kgYWRhcHRlci4KKworCSogaG9zdHMuYzogU3BlbGxpbmcuCisKKwkqIHFsb2dpYy5jOiBVcGRhdGUgdG8gdmVyc2lvbiAwLjM4YS4gIEFkZCBtb3JlIHN1cHBvcnQgZm9yIFBDTUNJQS4KKworCSogc2NzaS5jOiBNYXNrIGRldmljZSB0eXBlIHdpdGggMHgxZiBkdXJpbmcgc2Nhbl9zY3Npcy4KKwkgIEFkZCBzdXBwb3J0IGZvciBkZWFkbG9ja2luZywgZXJyLCBtYWtlIHRoYXQgZ2V0dGluZyBvdXQgb2YKKwkgIGRlYWRsb2NrIHNpdHVhdGlvbnMgdGhhdCBhcmUgY3JlYXRlZCB3aGVuIHdlIGFsbG93IHRoZSB1c2VyCisJICB0byBsaW1pdCByZXF1ZXN0cyB0byBvbmUgaG9zdCBhZGFwdGVyIGF0IGEgdGltZS4KKworCSogc2NzaS5jOiBCdWdmaXggLSBwYXNzIHBpZCwgbm90IFNDcG50IGFzIHNlY29uZCBhcmcgdG8KKwkgIHNjc2lfdGltZXNfb3V0LgorCisJKiBzY3NpLmM6IFJlc3RvcmUgaW50ZXJydXB0IHN0YXRlIHRvIHByZXZpb3VzIHZhbHVlIGluc3RlYWQgb2YgdXNpbmcKKwkgIGNsaS9zdGkgcGFpcnMuCisKKwkqIHNjc2kuYzogQWRkIGEgYnVuY2ggb2YgbW9kdWxlIHN0dWZmIChhbGwgY29tbWVudGVkIG91dCBmb3Igbm93KS4KKworCSogc2NzaS5jOiBDbGVhbiB1cCBzY3NpX2R1bXBfc3RhdHVzLgorCitUdWUgRGVjICA2IDEyOjM0OjIwIDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuNzIgcmVsZWFzZWQuCisKKwkqIHNnLmM6IEJ1Z2ZpeCAtIGFsd2F5cyB1c2Ugc2dfZnJlZSwgc2luY2Ugd2UgbWlnaHQgaGF2ZSBiaWcgYnVmZi4KKworRnJpIERlYyAgMiAxMToyNDo1MyAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjcxIHJlbGVhc2VkLgorCisJKiBzZy5jOiBDbGVhciBidWZmIGZpZWxkIHdoZW4gbm90IGluIHVzZS4gIE9ubHkgY2FsbCBzY3NpX2ZyZWUgaWYKKwlub24tbnVsbC4KKworCSogc2NzaS5oOiBDYWxsIHdha2VfdXAoJndhaXRfZm9yX3JlcXVlc3QpIHdoZW4gZG9uZSB3aXRoIGEKKwljb21tYW5kLgorCisJKiBzY3NpLmMgKHNjc2lfdGltZXNfb3V0KTogUGFzcyBwaWQgZG93biBzbyB0aGF0IHdlIGNhbiBwcm90ZWN0CisJYWdhaW5zdCByYWNlIGNvbmRpdGlvbnMuCisKKwkqIHNjc2kuYyAoc2NzaV9hYm9ydCk6IFplcm8gdGltZW91dCBmaWVsZCBpZiB3ZSBnZXQgdGhlCisJTk9UX1JVTk5JTkcgbWVzc2FnZSBiYWNrIGZyb20gbG93LWxldmVsIGRyaXZlci4KKworCisJKiBzY3NpLmMgKHNjc2lfZG9uZSk6IFJlc3RvcmUgY21kX2xlbiwgdXNlX3NnIGhlcmUuCisKKwkqIHNjc2kuYyAocmVxdWVzdF9zZW5zZSk6IE5vdCBoZXJlLgorCisJKiBob3N0cy5oOiBBZGQgbmV3IGZvcmJpZGRlbl9hZGRyLCBmb3JiaWRkZW5fc2l6ZSBmaWVsZHMuICBXaG8KKwlhZGRlZCB0aGVzZSBhbmQgd2h5Pz8/PworCisJKiBob3N0cy5jIChzY3NpX21lbV9pbml0KTogTWFyayBwYWdlcyBhcyByZXNlcnZlZCBpZiB0aGV5IGZhbGwgaW4KKwl0aGUgZm9yYmlkZGVuIHJlZ2lvbnMuICBJIGFtIG5vdCBzdXJlIC0gSSB0aGluayB0aGlzIGlzIHNvIHRoYXQKKwl3ZSBjYW4gZGVhbCB3aXRoIGJvYXJkcyB0aGF0IGRvIGluY29tcGxldGUgZGVjb2Rpbmcgb2YgdGhlaXIKKwlhZGRyZXNzIGxpbmVzIGZvciB0aGUgYmlvcyBjaGlwcywgYnV0IEkgYW0gbm90IGVudGlyZWx5IHN1cmUuCisKKwkqIGJ1c2xvZ2ljLmM6IFNldCBmb3JiaWRkZW5fYWRkciBzdHVmZiBpZiB1c2luZyBhIGJ1Z2d5IGJvYXJkLgorCisJKiBhaGExNzQwLmM6IFRlc3QgZm9yIE5VTEwgcG9pbnRlciBpbiBTQ3RtcC4gIFRoaXMgc2hvdWxkIG5vdAorCW9jY3VyLCBidXQgYSBuaWNlIG1lc3NhZ2UgaXMgYmV0dGVyIHRoYW4gYSBrZXJuZWwgc2VnZmF1bHQuCisKKwkqIDUzYzcsOHh4LmM6IEFkZCBuZXcgUENJIGNoaXAgSUQgZm9yIDgxNS4KKworRnJpIERlYyAgMiAxMToyNDo1MyAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjcwIHJlbGVhc2VkLgorCisJKiBDaGFuZ2VMb2csIHN0LmM6IFNwZWxsaW5nLgorCitUdWUgTm92IDI5IDE4OjQ4OjQyIDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuNjkgcmVsZWFzZWQuCisKKwkqIHUxNC0zNGYuaDogTm9uLWZ1bmN0aW9uYWwgY2hhbmdlLiAgW0RhcmlvXS4KKworCSogdTE0LTM0Zi5jOiBVc2UgYmxvY2sgZmllbGQgaW4gU2NzaV9Ib3N0IHRvIHByZXZlbnQgY29tbWFuZHMgZnJvbQorCWJlaW5nIHF1ZXVlZCB0byBtb3JlIHRoYW4gb25lIGhvc3QgYXQgdGhlIHNhbWUgdGltZSAodXNlZCB3aGVuCisJbW90aGVyYm9hcmQgZG9lcyBub3QgZGVhbCB3aXRoIG11bHRpcGxlIGJ1cy1tYXN0ZXJzIHZlcnkgd2VsbCkuCisJT25seSB3aGVuIFNJTkdMRV9IT1NUX09QRVJBVElPTlMgaXMgZGVmaW5lZC4KKwlVc2UgbmV3IGNtZF9wZXJfbHVuIGZpZWxkLiAgW0RhcmlvXQorCisJKiBlYXRhLmM6IExpa2V3aXNlLgorCisJKiBzdC5jOiBNb3JlIGNoYW5nZXMgZnJvbSBLYWkuICBBZGQgcmVhZHkgZmxhZyB0byBpbmRpY2F0ZSBkcml2ZQorCXN0YXR1cy4KKworCSogUkVBRE1FLnN0OiBEb2N1bWVudCB0aGlzLgorCisJKiBzci5jOiBCdWdmaXggKGRvIG5vdCBzdWJ0cmFjdCBDRF9CTE9DS19PRkZTRVQpIGZvciBwaG90by1jZAorCWNvZGUuCisKKwkqIHNnLmM6IEJ1Z2ZpeCAtIGZpeCBwcm9ibGVtIHdoZXJlIG9wY29kZSBpcyBub3QgY29ycmVjdGx5IHNldCB1cC4KKworCSogc2VhZ2F0ZS5bYyxoXTogVXNlICNkZWZpbmVzIHRvIHNldCBkcml2ZXIgbmFtZS4KKworCSogc2NzaV9pb2N0bC5jOiBaZXJvIGJ1ZmZlciBiZWZvcmUgZXhlY3V0aW5nIGNvbW1hbmQuCisKKwkqIHNjc2kuYzogVXNlIG5ldyBjbWRfcGVyX2x1biBmaWVsZCBpbiBTY3NpX0hvc3RzIGFzIGFwcHJvcHJpYXRlLgorCUFkZCBTb255IENEVTU1UyB0byBibGFja2xpc3QuCisKKwkqIGhvc3RzLmg6IEFkZCBuZXcgY21kX3Blcl9sdW4gZmllbGQgdG8gU2NzaV9Ib3N0cy4KKworCSogaG9zdHMuYzogSW5pdGlhbGl6ZSBjbWRfcGVyX2x1biBpbiBTY3NpX0hvc3RzIGZyb20gdGVtcGxhdGUuCisKKwkqIGJ1c2xvZ2ljLmM6IFVzZSBjbWRfcGVyX2x1biBmaWVsZCAtIGluaXRpYWxpemUgdG8gZGlmZmVyZW50CisJdmFsdWVzIGRlcGVuZGluZyB1cG9uIGJ1cyB0eXBlIChpLmUuIHVzZSAxIGlmIElTQSwgc28gd2UgZG8gbm90CisJaG9nIG1lbW9yeSkuICBVc2Ugb3RoZXIgcGF0Y2hlcyB3aGljaCBnb3QgbG9zdCBmcm9tIDEuMS42OC4KKworCSogYWhhMTU0Mi5jOiBTcGVsbGluZy4KKworVHVlIE5vdiAyOSAxNTo0Mzo1MCAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZS5haWIuY29tKQorCisJKiBMaW51eCAxLjEuNjggcmVsZWFzZWQuCisKKwlBZGQgc3VwcG9ydCBmb3IgMTIgYnl0ZSB2ZW5kb3Igc3BlY2lmaWMgY29tbWFuZHMgaW4gc2NzaS1nZW5lcmljcywKKwltb3JlIChpLmUuIHRoZSBsYXN0IG1hbmRhdG9yeSkgbG93LWxldmVsIGNoYW5nZXMgdG8gc3VwcG9ydAorCWxvYWRhYmxlIG1vZHVsZXMsIHBsdXMgYSBmZXcgb3RoZXIgY2hhbmdlcyBwZW9wbGUgaGF2ZSByZXF1ZXN0ZWQKKwlsYXRlbHkuICBDaGFuZ2VzIGJ5IG1lIChFUlkpIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuICBTcGVsbGluZworCWNoYW5nZXMgYXBwZWFyIGZyb20gc29tZSB1bmtub3duIGNvcm5lciBvZiB0aGUgdW5pdmVyc2UuCisKKwkqIFRocm91Z2hvdXQ6IENoYW5nZSBDT01NQU5EX1NJWkUoKSB0byB1c2UgU0NwbnQtPmNtZF9sZW4uCisKKwkqIFRocm91Z2hvdXQ6IENoYW5nZSBpbmZvKCkgbG93IGxldmVsIGZ1bmN0aW9uIHRvIHRha2UgYSBTY3NpX0hvc3QKKwlwb2ludGVyLiAgVGhpcyB3YXkgdGhlIGluZm8gZnVuY3Rpb24gY2FuIHJldHVybiBzcGVjaWZpYworCWluZm9ybWF0aW9uIGFib3V0IHRoZSBob3N0IGluIHF1ZXN0aW9uLCBpZiBkZXNpcmVkLgorCisJKiBBbGwgbG93LWxldmVsIGRyaXZlcnM6IEFkZCBOVUxMIGluIGluaXRpYWxpemVyIGZvciB0aGUKKwl1c2FnZV9jb3VudCBmaWVsZCBhZGRlZCB0byBTY3NpX0hvc3RfVGVtcGxhdGUuCisKKwkqIGFoYTE1MnguW2MsaF06IFJlbW92ZSByZWR1bmRhbnQgaW5mbygpIGZ1bmN0aW9uLgorCisJKiBhaGExNTQyLltjLGhdOiBMaWtld2lzZS4KKworCSogYWhhMTc0MC5bYyxoXTogTGlrZXdpc2UuCisKKwkqIGFoYTI3NHguW2MsaF06IExpa2V3aXNlLgorCisJKiBlYXRhLltjLGhdOiBMaWtld2lzZS4KKworCSogcGFzMTYuW2MsaF06IExpa2V3aXNlLgorCisJKiBzY3NpX2RlYnVnLltjLGhdOiBMaWtld2lzZS4KKworCSogdDEyOC5bYyxoXTogTGlrZXdpc2UuCisKKwkqIHUxNC0zNGYuW2MsaF06IExpa2V3aXNlLgorCisJKiB1bHRyYXN0b3IuW2MsaF06IExpa2V3aXNlLgorCisJKiB3ZDcwMDAuW2MsaF06IExpa2V3aXNlLgorCisJKiBhaGExNTQyLmM6IEFkZCBzdXBwb3J0IGZvciBjb21tYW5kIGxpbmUgb3B0aW9ucyB3aXRoIGxpbG8gdG8gc2V0CisJRE1BIHBhcmFtZXRlcnMsIEkvTyBwb3J0LiAgRnJvbSBNYXR0IEFhcm5pby4KKworCSogYnVzbG9naWMuW2MsaF06IE5ldyB2ZXJzaW9uICgxLjEzKSBmcm9tIERhdmUgR2VudHplbC4KKworCSogaG9zdHMuaDogQWRkIG5ldyBmaWVsZCB0byBTY3NpX0hvc3RzICJibG9jayIgdG8gYWxsb3cgYmxvY2tpbmcKKwlhbGwgSS9PIHRvIGNlcnRhaW4gb3RoZXIgY2FyZHMuICBIZWxwcyBwcmV2ZW50IHByb2JsZW1zIHdpdGggc29tZQorCUlTQSBtb3RoZXJib2FyZHMuCisKKwkqIGhvc3RzLmg6IEFkZCB1c2FnZV9jb3VudCB0byBTY3NpX0hvc3RfVGVtcGxhdGUuCisKKwkqIGhvc3RzLmg6IEFkZCBuX2lvX3BvcnQgdG8gU2NzaV9Ib3N0ICh1c2VkIHdoZW4gcmVsZWFzaW5nIG1vZHVsZSkuCisKKwkqIGhvc3RzLmM6IEluaXRpYWxpemUgYmxvY2sgZmllbGQuCisKKwkqIGluMjAwMC5jOiBSZW1vdmUgInN0YXRpYyIgZGVjbGFyYXRpb25zIGZyb20gZXhwb3J0ZWQgZnVuY3Rpb25zLgorCisJKiBpbjIwMDAuaDogTGlrZXdpc2UuCisKKwkqIHNjc2kuYzogQ29ycmVjdGx5IHNldCBjbWRfbGVuIGZpZWxkIGFzIHJlcXVpcmVkLiAgU2F2ZSBhbmQKKwljaGFuZ2Ugc2V0dGluZyB3aGVuIGRvaW5nIGEgcmVxdWVzdF9zZW5zZSwgcmVzdG9yZSB3aGVuIGRvbmUuCisJTW92ZSBhYm9ydCB0aW1lb3V0IG1lc3NhZ2UuICBGaXggcGFuaWMgaW4gcmVxdWVzdF9xdWV1ZWFibGUgdG8KKwlwcmludCBjb3JyZWN0IGZ1bmN0aW9uIG5hbWUuCisKKwkqIHNjc2kuYzogV2hlbiBpbmNyZW1lbnRpbmcgdXNhZ2UgY291bnQsIHdhbGsgYmxvY2sgbGlua2VkIGxpc3QKKwlmb3IgaG9zdCwgYW5kIG9yIGluIFNDU0lfSE9TVF9CTE9DSyBiaXQuICBXaGVuIGRlY3JlbWVudGluZyB1c2FnZQorCWNvdW50IHRvIDAsIGNsZWFyIHRoaXMgYml0IHRvIGFsbG93IHVzYWdlIHRvIGNvbnRpbnVlLCB3YWtlIHVwCisJcHJvY2Vzc2VzIHdhaXRpbmcuCisKKworCSogc2NzaV9pb2N0bC5jOiBJZiB3ZSBoYXZlIGFuIGluZm8oKSBmdW5jdGlvbiwgY2FsbCBpdCwgb3RoZXJ3aXNlCisJaWYgd2UgaGF2ZSBhICJuYW1lIiBmaWVsZCwgdXNlIGl0LCBlbHNlIGRvIG5vdGhpbmcuCisKKwkqIHNkLmMsIHNyLmM6IENsZWFyIGNtZF9sZW4gZmllbGQgcHJpb3IgdG8gZWFjaCBjb21tYW5kIHdlCisJZ2VuZXJhdGUuCisKKwkqIHNkLmg6IEFkZCAiaGFzX3BhcnRfdGFibGUiIGJpdCB0byByc2NzaV9kaXNrcy4KKworCSogc2cuW2MsaF06IEFkZCBzdXBwb3J0IGZvciB2ZW5kb3Igc3BlY2lmaWMgMTIgYnl0ZSBjb21tYW5kcyAoaS5lLgorCW92ZXJyaWRlIGNvbW1hbmQgbGVuZ3RoIGluIENPTU1BTkRfU0laRSkuCisKKwkqIHNyLmM6IEJ1Z2ZpeCBmcm9tIEdlcmQgaW4gcGhvdG9jZCBjb2RlLgorCisJKiBzci5jOiBCdWdmaXggaW4gZ2V0X3NlY3RvcnNpemUgLSBhbHdheXMgdXNlIHNjc2lfbWFsbG9jIGJ1ZmZlciAtCisJd2UgY2Fubm90IGd1YXJhbnRlZSB0aGF0IHRoZSBzdGFjayBpcyA8IDE2TWIuCisKK1R1ZSBOb3YgMjIgMTU6NDA6NDYgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUuYWliLmNvbSkKKworCSogTGludXggMS4xLjY3IHJlbGVhc2VkLgorCisJKiBzci5jOiBDaGFuZ2Ugc3BlbGxpbmcgb2YgbWFudWZhY3RvciB0byBtYW51ZmFjdHVyZXIuCisKKwkqIHNjc2kuaDogTGlrZXdpc2UuCisKKwkqIHNjc2kuYzogTGlrZXdpc2UuCisKKwkqIHFsb2dpYy5jOiBTcGVsbGluZyBjb3JyZWN0aW9ucy4KKworCSogaW4yMDAwLmg6IFNwZWxsaW5nIGNvcnJlY3Rpb25zLgorCisJKiBpbjIwMDAuYzogVXBkYXRlIGZyb20gQmlsbCBFYXJuZXN0LCBjaGFuZ2UgZnJvbQorCWpzaGlmZmxlQG5ldGNvbS5jb20uICBTdXBwb3J0IG5ldyBiaW9zIHZlcnNpb25zLgorCisJKiBSRUFETUUucWxvZ2ljOiBTcGVsbGluZyBjb3JyZWN0aW9uLgorCitUdWUgTm92IDIyIDE1OjQwOjQ2IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlLmFpYi5jb20pCisKKwkqIExpbnV4IDEuMS42NiByZWxlYXNlZC4KKworCSogdTE0LTM0Zi5jOiBTcGVsbGluZyBjb3JyZWN0aW9ucy4KKworCSogc3IuW2gsY106IEFkZCBzdXBwb3J0IGZvciBtdWx0aS1zZXNzaW9uIENEcyBmcm9tIEdlcmQgS25vcnIuCisKKwkqIHNjc2kuaDogQWRkIG1hbnVmYWN0b3IgZmllbGQgZm9yIGtlZXBpbmcgdHJhY2sgb2YgZGV2aWNlCisJbWFudWZhY3R1cmVyLgorCisJKiBzY3NpLmM6IE1vcmUgc3BlbGxpbmcgY29ycmVjdGlvbnMuCisKKwkqIHFsb2dpYy5oLCBxbG9naWMuYywgUkVBRE1FLnFsb2dpYzogTmV3IGRyaXZlciBmcm9tIFRvbSBaZXJ1Y2hhLgorCisJKiBpbjIwMDAuYywgaW4yMDAwLmg6IE5ldyBkcml2ZXIgZnJvbSBCcmFkIE1jTGVhbi9CaWxsIEVhcm5lc3QuCisKKwkqIGZkb21haW4uYzogU3BlbGxpbmcgY29ycmVjdGlvbi4KKworCSogZWF0YS5jOiBTcGVsbGluZyBjb3JyZWN0aW9uLgorCitGcmkgTm92IDE4IDE1OjIyOjQ0IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlLmFpYi5jb20pCisKKwkqIExpbnV4IDEuMS42NSByZWxlYXNlZC4KKworCSogZWF0YS5oOiBVcGRhdGUgdmVyc2lvbiBzdHJpbmcgdG8gMS4wOC4wMC4KKworCSogZWF0YS5jOiBTZXQgc2dfdGFibGVzaXplIGNvcnJlY3RseSBmb3IgRFBUIFBNMjAxMiBib2FyZHMuCisKKwkqIGFoYTI3NHguc2VxOiBTcGVsbCBjaGVja2luZy4KKworCSogUkVBRE1FLnN0OiBMaWtld2lzZS4KKworCSogUkVBRE1FLmFoYTI3NHg6IExpa2V3aXNlLgorCisJKiBDaGFuZ2VMb2c6IExpa2V3aXNlLgorCitUdWUgTm92IDE1IDE1OjM1OjA4IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlLmFpYi5jb20pCisKKwkqIExpbnV4IDEuMS42NCByZWxlYXNlZC4KKworCSogdTE0LTM0Zi5oOiBVcGRhdGUgdmVyc2lvbiBudW1iZXIgdG8gMS4xMC4wMS4KKworCSogdTE0LTM0Zi5jOiBVc2UgU2NzaV9Ib3N0IGNhbl9xdWV1ZSB2YXJpYWJsZSBpbnN0ZWFkIG9mIG9uZSBmcm9tIHRlbXBsYXRlLgorCisJKiBlYXRhLltjLGhdOiBOZXcgZHJpdmVyIGZvciBEUFQgYm9hcmRzIGZyb20gRGFyaW8gQmFsbGFiaW8uCisKKwkqIGJ1c2xvZ2ljLmM6IFVzZSBjYW5fcXVldWUgZmllbGQuCisKK1dlZCBOb3YgMzAgMTI6MDk6MDkgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUuYWliLmNvbSkKKworCSogTGludXggMS4xLjYzIHJlbGVhc2VkLgorCisJKiBzZC5jOiBHaXZlIEkvTyBlcnJvciBpZiB3ZSBhdHRlbXB0IDUxMiBieXRlIEkvTyB0byBhIGRpc2sgd2l0aAorCTEwMjQgYnl0ZSBzZWN0b3JzLgorCisJKiBzY3NpY2FtLmM6IE1ha2Ugc3VyZSB3ZSBkbyByZWFkIGZyb20gd2hvbGUgZGlzayAobWFzayBvZmYKKwlwYXJ0aXRpb24pLgorCisJKiBzY3NpLmM6IFVzZSBjYW5fcXVldWUgaW4gU2NzaV9Ib3N0IHN0cnVjdHVyZS4KKwlGaXggcGFuaWMgbWVzc2FnZSBhYm91dCBpbnZhbGlkIGhvc3QuCisKKwkqIGhvc3RzLmM6IEluaXRpYWxpemUgY2FuX3F1ZXVlIGZyb20gdGVtcGxhdGUuCisKKwkqIGhvc3RzLmg6IEFkZCBjYW5fcXVldWUgdG8gU2NzaV9Ib3N0IHN0cnVjdHVyZS4KKworCSogYWhhMTc0MC5jOiBQcmludCBvdXQgd2FybmluZyBhYm91dCBOVUxMIGVjYnB0ci4KKworRnJpIE5vdiAgNCAxMjo0MDozMCAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZS5haWIuY29tKQorCisJKiBMaW51eCAxLjEuNjIgcmVsZWFzZWQuCisKKwkqIGZkb21haW4uYzogVXBkYXRlIHRvIHZlcnNpb24gNS4yMC4gKEZyb20gUmlrIEZhaXRoKS4gIFN1cHBvcnQKKwlCSU9TIHZlcnNpb24gMy41LgorCisJKiBzdC5oOiBBZGQgU1RfRU9EIHN5bWJvbC4KKworCSogc3QuYzogUGF0Y2hlcyBmcm9tIEthaSBNYWtpc2FyYSAtIHN1cHBvcnQgYWRkaXRpb25hbCBkZW5zaXRpZXMsCisJYWRkIHN1cHBvcnQgZm9yIE1URlNTLCBNVEJTUywgTVRXU00gY29tbWFuZHMuCisKKwkqIFJFQURNRS5zdDogVXBkYXRlIHRvIGRvY3VtZW50IG5ldyBjb21tYW5kcy4KKworCSogc2NzaS5jOiBBZGQgTWVkaWF2aXNpb24gQ0RSLUg5M01WIHRvIGJsYWNrbGlzdC4KKworU2F0IE9jdCAyOSAyMDo1NzozNiAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZS5haWIuY29tKQorCisJKiBMaW51eCAxLjEuNjAgcmVsZWFzZWQuCisKKwkqIHUxNC0zNGYuW2MsaF06IE5ldyBkcml2ZXIgZnJvbSBEYXJpbyBCYWxsYWJpby4KKworCSogYWljNzc3MC5jLCBhaGEyNzR4X3NlcS5oLCBhaGEyNzR4LnNlcSwgYWhhMjc0eC5oLCBhaGEyNzR4LmMsCisJUkVBRE1FLmFoYTI3NHg6IE5ldyBmaWxlcywgbmV3IGRyaXZlciBmcm9tIEpvaG4gQXljb2NrLgorCisKK1R1ZSBPY3QgMTEgMDg6NDc6MzkgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS41NCByZWxlYXNlZC4KKworCSogQWRkIHRoaXJkIFBDSSBjaGlwIGlkLiAgW0RyZXddCisKKwkqIGJ1c2xvZ2ljLmM6IFNldCBCVVNMT0dJQ19DTURMVU4gYmFjayB0byAxIFtFcmljXS4KKworCSogdWx0cmFzdG9yLmM6IEZpeCBhc20gZGlyZWN0aXZlcyBmb3IgbmV3IEdDQy4KKworCSogc3IuYywgc2QuYzogVXNlIG5ldyBlbmRfc2NzaV9yZXF1ZXN0IGZ1bmN0aW9uLgorCisJKiBzY3NpLmgoZW5kX3Njc2lfcmVxdWVzdCk6IFJldHVybiBwb2ludGVyIHRvIGJsb2NrIGlmIHN0aWxsCisJYWN0aXZlLCBlbHNlIHJldHVybiBOVUxMIGlmIGluYWN0aXZlLiAgRml4ZXMgcmFjZSBjb25kaXRpb24uCisKK1N1biBPY3QgIDkgMjA6MjM6MTQgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS41MyByZWxlYXNlZC4KKworCSogc2NzaS5jOiBEbyBub3QgYWxsb2NhdGUgZG1hIGJvdW5jZSBidWZmZXJzIGlmIHdlIGhhdmUgZXhhY3RseQorCTE2TWIuCisKK0ZyaSBTZXAgIDkgMDU6MzU6MzAgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS41MSByZWxlYXNlZC4KKworCSogYWhhMTUyeC5jOiBBZGQgc3VwcG9ydCBmb3IgZGlzYWJsaW5nIHRoZSBwYXJpdHkgY2hlY2suICBVcGRhdGUKKwl0byB2ZXJzaW9uIDEuNC4gW0p1ZXJnZW5dLgorCisJKiBzZWFnYXRlLmM6IFR3ZWFrIGRlYnVnZ2luZyBtZXNzYWdlLgorCitXZWQgQXVnIDMxIDEwOjE1OjU1IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuNTAgcmVsZWFzZWQuCisKKwkqIGFoYTE1MnguYzogQWRkIGViODAwIGZvciBWdGVjaCBQbGF0aW51bSBTTVAgYm9hcmRzLiBbSnVlcmdlbl0uCisKKwkqIHNjc2kuYzogQWRkIFF1YW50dW0gUEQxMjI1UyB0byBibGFja2xpc3QuCisKK0ZyaSBBdWcgMjYgMDk6Mzg6NDUgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS40OSByZWxlYXNlZC4KKworCSogc2QuYzogRml4IGJ1ZyB3aGVuIHdlIHdlcmUgZGVsZXRpbmcgdGhlIHdyb25nIGVudHJ5IGlmIHdlCisJZ2V0IGFuIHVuc3VwcG9ydGVkIHNlY3RvciBzaXplIGRldmljZS4KKworCSogc3IuYzogQW5vdGhlciBzcGVsbGluZyBwYXRjaC4KKworVGh1IEF1ZyAyNSAwOToxNToyNyAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjQ4IHJlbGVhc2VkLgorCisJKiBUaHJvdWdob3V0OiBVc2UgbmV3IHNlbWFudGljcyBmb3IgcmVxdWVzdF9kbWEsIGFzIGFwcHJvcHJpYXRlLgorCisJKiBzci5jOiBQcmludCBjb3JyZWN0IGRldmljZSBudW1iZXIuCisKK1N1biBBdWcgMjEgMTc6NDk6MjMgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS40NyByZWxlYXNlZC4KKworCSogTkNSNTM4MC5jOiBBZGQgc3VwcG9ydCBmb3IgTElNSVRfVFJBTlNGRVJTSVpFLgorCisJKiBjb25zdGFudHMuaDogQWRkIHByb3RvdHlwZSBmb3IgcHJpbnRfU2NzaV9DbW5kLgorCisJKiBwYXMxNi5jOiBTb21lIG1vcmUgbWlub3IgdHdlYWtzLiAgVGVzdCBmb3IgTWVkaWF2aXNpb24gYm9hcmQuCisJQWxsb3cgZm9yIGRpc2tzID4gMUdiLiAgW0RyZXc/P10KKworCSogc3IuYzogU2V0IFNDcG50LT50cmFuc2ZlcnNpemUuCisKK1R1ZSBBdWcgMTYgMTc6Mjk6MzUgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS40NiByZWxlYXNlZC4KKworCSogVGhyb3VnaG91dDogTW9yZSBzcGVsbGluZyBmaXh1cHMuCisKKwkqIGJ1c2xvZ2ljLmM6IEFkZCBhIGZldyBtb3JlIGZpeHVwcyBmcm9tIERhdmUuICBEaXNrIHRyYW5zbGF0aW9uCisJbWFpbmx5LgorCisJKiBwYXMxNi5jOiBBZGQgYSBmZXcgcGF0Y2hlcyAoRHJldz8pLgorCisKK1RodSBBdWcgMTEgMjA6NDU6MTUgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS40NCByZWxlYXNlZC4KKworCSogaG9zdHMuYzogQWRkIHR5cGUgY2FzdHMgZm9yIHNjc2lfaW5pdF9tYWxsb2MuCisKKwkqIHNjc2ljYW0uYzogQWRkIHR5cGUgY2FzdC4KKworV2VkIEF1ZyAxMCAxOToyMzowMSAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjQzIHJlbGVhc2VkLgorCisJKiBUaHJvdWdob3V0OiBTcGVsbGluZyBjbGVhbnVwcy4gWz8/XQorCisJKiBhaGExNTJ4LmMsIE5DUjUzKi5jLCBmZG9tYWluLmMsIGdfTkNSNTM4MC5jLCBwYXMxNi5jLCBzZWFnYXRlLmMsCisJIHQxMjguYzogVXNlIHJlcXVlc3RfaXJxLCBub3QgaXJxYWN0aW9uLiBbPz9dCisKKwkqIGFoYTE1NDIuYzogTW92ZSB0ZXN0IGZvciBzaG9zdCBiZWZvcmUgd2Ugc3RhcnQgdG8gdXNlIHNob3N0LgorCisJKiBhaGExNTQyLmMsIGFoYTE3NDAuYywgdWx0cmFzdG9yLmMsIHdkNzAwMC5jOiBVc2UgbmV3CisJY2FsbGluZyBzZXF1ZW5jZSBmb3IgcmVxdWVzdF9pcnEuCisKKwkqIGJ1c2xvZ2ljLmM6IFVwZGF0ZSBmcm9tIERhdmUgR2VudHplbC4KKworVHVlIEF1ZyAgOSAwOTozMjo1OSAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAYW5kYW50ZSkKKworCSogTGludXggMS4xLjQyIHJlbGVhc2VkLgorCisJKiBOQ1I1MzgwLmM6IENoYW5nZSBOQ1I1MzgwX3ByaW50X3N0YXR1cyB0byBzdGF0aWMuCisKKwkqIHNlYWdhdGUuYzogQSBmZXcgbW9yZSBidWdmaXhlcy4gIE9ubHkgRHJldyBrbm93cyB3aGF0IHRoZXkgYXJlCisJZm9yLgorCisJKiB1bHRyYXN0b3IuYzogVHdlYWsgc29tZSBfX2FzbV9fIGRpcmVjdGl2ZXMgc28gdGhhdCBpdCB3b3JrcworCXdpdGggbmV3ZXIgY29tcGlsZXJzLiBbPz9dCisKK1NhdCBBdWcgIDYgMjE6Mjk6MzYgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGFuZGFudGUpCisKKwkqIExpbnV4IDEuMS40MCByZWxlYXNlZC4KKworCSogTkNSNTM4MC5jOiBSZXR1cm4gU0NTSV9SRVNFVF9XQUtFVVAgZnJvbSByZXNldCBmdW5jdGlvbi4KKworCSogYWhhMTU0Mi5jOiBSZXNldCBtYWlsYm94IHN0YXR1cyBhZnRlciBhIGJ1cyBkZXZpY2UgcmVzZXQuCisKKwkqIGNvbnN0YW50cy5jOiBGaXggdHlwbyAoOzspLgorCisJKiBnX05DUjUzODAuYzoKKwkqIHBhczE2LmM6ICBDb3JyZWN0IHVzYWdlIG9mIE5DUjUzODBfaW5pdC4KKworCSogc2NzaS5jOiBSZW1vdmUgcmVkdW5kYW50IChhbmQgdW51c2VkIHZhcmlhYmxlcykuCisKKwkqIHNkLmM6IFVzZSBtZW1zZXQgdG8gY2xlYXIgYWxsIG9mIHJzY3NpX2Rpc2tzIGJlZm9yZSB3ZSB1c2UgaXQuCisKKwkqIHNnLmM6IERpdHRvLCBleGNlcHQgZm9yIHNjc2lfZ2VuZXJpY3MuCisKKwkqIHNyLmM6IERpdHRvLCBleGNlcHQgZm9yIHNjc2lfQ0RzLgorCisJKiBzdC5jOiBJbml0aWFsaXplIFNUcC0+ZGV2aWNlLgorCisJKiBzZWFnYXRlLmM6IEZpeCBidWcuIFtEcmV3XQorCitUaHUgQXVnICA0IDA4OjQ3OjI3IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0BhbmRhbnRlKQorCisJKiBMaW51eCAxLjEuMzkgcmVsZWFzZWQuCisKKwkqIE1ha2VmaWxlOiBGaXggdHlwbyBpbiBOQ1I1M0M3eHguCisKKwkqIHN0LmM6IFByaW50IGNvcnJlY3QgbnVtYmVyIGZvciBkZXZpY2UuCisKK1R1ZSBBdWcgIDIgMTE6Mjk6MTQgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGVzcDIyKQorCisJKiBMaW51eCAxLjEuMzggcmVsZWFzZWQuCisKKwlMb3RzIG9mIGNoYW5nZXMgaW4gMS4xLjM4LiAgQWxsIGZyb20gRHJldyB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgorCisJKiA1M2M3LDh4eC5jOiBOZXcgZmlsZSBmcm9tIERyZXcuICBQQ0kgZHJpdmVyLgorCisJKiA1M2M3LDh4eC5oOiBMaWtld2lzZS4KKworCSogNTNjNyw4eHguc2NyOiBMaWtld2lzZS4KKworCSogNTNjOHh4X2QuaCwgNTNjOHh4X3UuaCwgc2NyaXB0X2FzbS5wbDogTGlrZXdpc2UuCisKKwkqIHNjc2ljYW0uYzogTmV3IGZpbGUgZnJvbSBEcmV3LiAgUmVhZCBibG9jayAwIG9uIHRoZSBkaXNrIGFuZAorCXJlYWQgdGhlIHBhcnRpdGlvbiB0YWJsZS4gIEF0dGVtcHQgdG8gZGVkdWNlIHRoZSBnZW9tZXRyeSBmcm9tCisJdGhlIHBhcnRpdGlvbiB0YWJsZSBpZiBwb3NzaWJsZS4gIE9ubHkgdXNlZCBieSA1M2NbNyw4XXh4IHJpZ2h0CisJbm93LCBidXQgY291bGQgYmUgdXNlZCBieSBhbnkgZGV2aWNlIGZvciB3aGljaCB3ZSBoYXZlIG5vIHdheQorCW9mIGlkZW50aWZ5aW5nIHRoZSBnZW9tZXRyeS4KKworCSogc2QuYzogVXNlIGRldmljZSBsZXR0ZXJzIGluc3RlYWQgb2Ygc2QlZCBpbiBhIGxvdCBvZiBtZXNzYWdlcy4KKworCSogc2VhZ2F0ZS5jOiBGaXggYnVnIHRoYXQgcmVzdWx0ZWQgaW4gbG9ja3VwcyB3aXRoIHNvbWUgZGV2aWNlcy4KKworCSogc3IuYyAoc3Jfb3Blbik6IFJldHVybiAtRVJPRlMsIG5vdCAtRUFDQ0VTIGlmIHdlIGF0dGVtcHQgdG8gb3BlbgorCWRldmljZSBmb3Igd3JpdGUuCisKKwkqIGhvc3RzLmMsIE1ha2VmaWxlOiBVcGRhdGUgZm9yIG5ldyBkcml2ZXIuCisKKwkqIE5DUjUzODAuYywgTkNSNTM4MC5oLCBnX05DUjUzODAuaDogVXBkYXRlIGZyb20gRHJldyB0byBzdXBwb3J0CisJNTNDNDAwIGNoaXAuCisKKwkqIGNvbnN0YW50cy5jOiBEZWZpbmUgQ09OU1RfQ01ORCBhbmQgQ09OU1RfTVNHLiAgT3RoZXIgbWlub3IKKwljbGVhbnVwcyBhbG9uZyB0aGUgd2F5LiAgSW1wcm92ZSBoYW5kbGluZyBvZiBDT05TVF9NU0cuCisKKwkqIGZkb21haW4uYywgZmRvbWFpbi5oOiBOZXcgdmVyc2lvbiBmcm9tIFJpayBGYWl0aC4gIFVwZGF0ZSB0bworCTUuMTguICBTaG91bGQgbm93IHN1cHBvcnQgVE1DLTMyNjAgUENJIGNhcmQgd2l0aCAxOEMzMCBjaGlwLgorCisJKiBwYXMxNi5jOiBVcGRhdGUgd2l0aCBuZXcgaXJxIGluaXRpYWxpemF0aW9uLgorCisJKiB0MTI4LmM6IFVwZGF0ZSB3aXRoIG1pbm9yIGNsZWFudXBzLgorCisJKiBzY3NpLmMgKHNjc2lfcGlkKTogTmV3IHZhcmlhYmxlIC0gZ2l2ZXMgZWFjaCBjb21tYW5kIGEgdW5pcXVlCisJaWQuIEFkZCBRdWFudHVtIExQUzUyMzVTIHRvIGJsYWNrbGlzdC4gIENoYW5nZSBpbl9zY2FuIHRvCisJaW5fc2Nhbl9zY3NpcyBhbmQgbWFrZSBnbG9iYWwuCisKKwkqIHNjc2kuaDogQWRkIHNvbWUgZGVmaW5lcyBmb3IgZXh0ZW5kZWQgbWVzc2FnZSBoYW5kbGluZywKKwlJTklUSUFURS9SRUxFQVNFX1JFQ09WRVJZLiAgQWRkIGEgZmV3IG5ldyBmaWVsZHMgdG8gc3VwcG9ydCBzeW5jCisJdHJhbnNmZXJzLgorCisJKiBzY3NpX2lvY3RsLmg6IEFkZCBpb2N0bCB0byByZXF1ZXN0IHN5bmNocm9ub3VzIHRyYW5zZmVycy4KKworCitUdWUgSnVsIDI2IDIxOjM2OjU4IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0Blc3AyMikKKworCSogTGludXggMS4xLjM3IHJlbGVhc2VkLgorCisJKiBhaGExNTQyLmM6IEFsd2F5cyBjYWxsIGFoYTE1NDJfbWJlbmFibGUsIHVzZSBuZXcgdWRlbGF5CisJbWVjaGFuaXNtIHNvIHdlIGRvIG5vdCB3YWl0IGEgbG9uZyB0aW1lIGlmIHRoZSBib2FyZCBkb2VzIG5vdAorCWltcGxlbWVudCB0aGlzIGNvbW1hbmQuCisKKwkqIGdfTkNSNTM4MC5jOiBSZW1vdmUgI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPiBhbmQgI2lmCisJZGVmaW5lZChDT05GSUdfU0NTSV8qKS4KKworCSogc2VhZ2F0ZS5jOiBMaWtld2lzZS4KKworCU5leHQgcm91bmQgb2YgY2hhbmdlcyB0byBzdXBwb3J0IGxvYWRhYmxlIG1vZHVsZXMuICBHZXR0aW5nIGNsb3NlcgorCW5vdywgc3RpbGwgbm90IHBvc3NpYmxlIHRvIGRvIGFueXRoaW5nIHJlbW90ZWx5IHVzYWJsZS4KKworCWhvc3RzLmM6IENyZWF0ZSBhIGxpbmtlZCBsaXN0IG9mIGRldGVjdGVkIGhpZ2ggbGV2ZWwgZGV2aWNlcy4KKwkoc2NzaV9yZWdpc3Rlcl9kZXZpY2UpOiBOZXcgZnVuY3Rpb24gdG8gaW5zZXJ0IGludG8gdGhpcyBsaXN0LgorCShzY3NpX2luaXQpOiBDYWxsIHNjc2lfcmVnaXN0ZXJfZGV2aWNlIGZvciBlYWNoIG9mIHRoZSBrbm93biBoaWdoCisJbGV2ZWwgZHJpdmVycy4KKworCWhvc3RzLmg6IEFkZCBwcm90b3R5cGUgZm9yIGxpbmtlZCBsaXN0IGhlYWRlci4gIEFkZCBzdHJ1Y3R1cmUKKwlkZWZpbml0aW9uIGZvciBkZXZpY2UgdGVtcGxhdGUgc3RydWN0dXJlIHdoaWNoIGRlZmluZXMgdGhlIGxpbmtlZAorCWxpc3QuCisKKwlzY3NpLmM6IChzY2FuX3Njc2lzKTogVXNlIGxpbmtlZCBsaXN0IGluc3RlYWQgb2Yga25vd2xlZGdlIGFib3V0CisJZXhpc3RpbmcgaGlnaCBsZXZlbCBkZXZpY2UgZHJpdmVycy4KKwkoc2NzaV9kZXZfaW5pdCk6IFVzZSBpbml0IGZ1bmN0aW9ucyBmb3IgZHJpdmVycyBvbiBsaW5rZWQgbGlzdAorCWluc3RlYWQgb2YgZXhwbGljaXQgbGlzdCB0byBpbml0aWFsaXplIGFuZCBhdHRhY2ggZGV2aWNlcyB0byBoaWdoCisJbGV2ZWwgZHJpdmVycy4KKworCXNjc2kuaDogQWRkIG5ldyBmaWVsZCAiYXR0YWNoZWQiIHRvIHNjc2lfZGV2aWNlIC0gY291bnQgb2YgbnVtYmVyCisJb2YgaGlnaCBsZXZlbCBkZXZpY2VzIGF0dGFjaGVkLgorCisJc2QuYywgc3IuYywgc2cuYywgc3QuYzogQWRqdXN0IGluaXQvYXR0YWNoIGZ1bmN0aW9ucyB0byB1c2UgbmV3CisJc2NoZW1lLgorCitTYXQgSnVsIDIzIDEzOjAzOjE3IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0Blc3AyMikKKworCSogTGludXggMS4xLjM1IHJlbGVhc2VkLgorCisJKiB1bHRyYXN0b3IuYzogQ2hhbmdlIGNvbnN0cmFpbnQgb24gYXNtKCkgb3BlcmFuZCBzbyB0aGF0IGl0IHdvcmtzCisJd2l0aCBnY2MgMi42LjAuCisKK1RodSBKdWwgMjEgMTA6Mzc6MzkgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGVzcDIyKQorCisJKiBMaW51eCAxLjEuMzMgcmVsZWFzZWQuCisKKwkqIHNyLmMoc3Jfb3Blbik6IERvIG5vdCBhbGxvdyBvcGVucyB3aXRoIHdyaXRlIGFjY2Vzcy4KKworTW9uIEp1bCAxOCAwOTo1MToyMiAxOTk0IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0Blc3AyMikKKworCSogTGludXggMS4xLjMxIHJlbGVhc2VkLgorCisJKiBzZC5jOiBJbmNyZWFzZSBTRF9USU1FT1VUIGZyb20gMzAwIHRvIDYwMC4KKworCSogc3IuYzogUmVtb3ZlIHN0cmF5IHRhc2tfc3RydWN0KiB2YXJpYWJsZSB0aGF0IHdhcyBubyBsb25nZXIKKwl1c2VkLgorCisJKiBzcl9pb2N0bC5jOiBGaXggdHlwbyBpbiB1cCgpIGNhbGwuCisKK1N1biBKdWwgMTcgMTY6MjU6MjkgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGVzcDIyKQorCisJKiBMaW51eCAxLjEuMzAgcmVsZWFzZWQuCisKKwkqIHNjc2kuYyAoc2Nhbl9zY3Npcyk6IEZpeCBkZXRlY3Rpb24gb2Ygc29tZSBUb3NoaWJhIENEUk9NIGRyaXZlcworCXRoYXQgcmVwb3J0IHRoZW1zZWx2ZXMgYXMgZGlzayBkcml2ZXMuCisKKwkqIChUaHJvdWdob3V0KTogVXNlIHJlcXVlc3Quc2VtIGluc3RlYWQgb2YgcmVxdWVzdC53YWl0aW5nLgorCVNob3VsZCBmaXggc3dhcCBwcm9ibGVtIHdpdGggZmRvbWFpbi4KKworVGh1IEp1bCAxNCAxMDo1MTo0MiAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAZXNwMjIpCisKKwkqIExpbnV4IDEuMS4yOSByZWxlYXNlZC4KKworCSogc2NzaS5jIChzY2FuX3Njc2lzKTogQWRkIG5ldyBkZXZpY2VzIHRvIGVuZCBvZiBsaW5rZWQgbGlzdCwgbm90CisJdG8gdGhlIGJlZ2lubmluZy4KKworCSogc2NzaS5oIChTQ1NJX1NMRUVQKTogUmVtb3ZlIGJyYWluIGRlYWQgaGFjayB0byB0cnkgdG8gc2F2ZQorCXRoZSB0YXNrIHN0YXRlIGJlZm9yZSBzbGVlcGluZy4KKworU2F0IEp1bCAgOSAxNTowMTowMyAxOTk0ICBFcmljIFlvdW5nZGFsZSAgKGVyaWNAZXNwMjIpCisKKwlNb3JlIGNoYW5nZXMgdG8gZXZlbnR1YWxseSBzdXBwb3J0IGxvYWRhYmxlIG1vZHVsZXMuICBNYWlubHkKKwl3ZSB3YW50IHRvIHVzZSBsaW5rZWQgbGlzdHMgaW5zdGVhZCBvZiBhcnJheXMgYmVjYXVzZSBpdCBpcyBlYXNpZXIKKwl0byBkeW5hbWljYWxseSBhZGQgYW5kIHJlbW92ZSB0aGluZ3MgdGhpcyB3YXkuCisKKwlRdWl0ZSBhIGJpdCBtb3JlIHdvcmsgaXMgbmVlZGVkIGJlZm9yZSBsb2FkYWJsZSBtb2R1bGVzIGFyZQorCXBvc3NpYmxlIChhbmQgdXNhYmxlKSB3aXRoIHNjc2ksIGJ1dCB0aGlzIGlzIG1vc3Qgb2YgdGhlIGdydW5nZQorCXdvcmsuCisKKwkqIExpbnV4IDEuMS4yOCByZWxlYXNlZC4KKworCSogc2NzaS5jLCBzY3NpLmggKGFsbG9jYXRlX2RldmljZSwgcmVxdWVzdF9xdWV1ZWFibGUpOiBDaGFuZ2UKKwlhcmd1bWVudCBmcm9tIGluZGV4IGludG8gc2NzaV9kZXZpY2VzIHRvIGEgcG9pbnRlciB0byB0aGUKKwlTY3NpX0RldmljZSBzdHJ1Y3QuCisKKwkqIFRocm91Z2hvdXQ6IENoYW5nZSBhbGwgY2FsbHMgdG8gYWxsb2NhdGVfZGV2aWNlLAorCXJlcXVlc3RfcXVldWVhYmxlIHRvIHVzZSBuZXcgY2FsbGluZyBzZXF1ZW5jZS4KKworCSogVGhyb3VnaG91dDogVXNlIFNDcG50LT5kZXZpY2UgaW5zdGVhZCBvZgorCXNjc2lfZGV2aWNlc1tTQ3BudC0+aW5kZXhdLiAgVWdoIC0gdGhlIHBvaW50ZXIgd2FzIHRoZXJlIGFsbCBhbG9uZworCS0gbXVjaCBjbGVhbmVyIHRoaXMgd2F5LgorCisJKiBzY3NpLmMgKHNjc2lfaW5pdF9tYWxsb2MsIHNjc2lfZnJlZV9tYWxsb2MpOiBOZXcgZnVuY3Rpb25zIC0KKwlhbGxvdyB1cyB0byBwcmV0ZW5kIHRoYXQgd2UgaGF2ZSBhIHdvcmtpbmcgbWFsbG9jIHdoZW4gd2UKKwlpbml0aWFsaXplLiAgVXNlIHRoaXMgaW5zdGVhZCBvZiBwYXNzaW5nIG1lbW9yeV9zdGFydCwgbWVtb3J5X2VuZAorCWFyb3VuZCBhbGwgb3ZlciB0aGUgcGxhY2UuCisKKwkqIHNjc2kuaCwgc3QuYywgc3IuYywgc2QuYywgc2cuYzogQ2hhbmdlICpfaW5pdDEgZnVuY3Rpb25zIHRvIHVzZQorCXNjc2lfaW5pdF9tYWxsb2MsIHJlbW92ZSBhbGwgYXJndW1lbnRzLCBubyByZXR1cm4gdmFsdWUuCisKKwkqIHNjc2kuaDogUmVtb3ZlIGluZGV4IGZpZWxkIGZyb20gU2NzaV9EZXZpY2UgYW5kIFNjc2lfQ21uZAorCXN0cnVjdHMuCisKKwkqIHNjc2kuYyAoc2NzaV9kZXZfaW5pdCk6IFNldCB1cCBmb3Igc2NzaV9pbml0X21hbGxvYy4KKwkoc2Nhbl9zY3Npcyk6IEdldCBTRHBudCBmcm9tIHNjc2lfaW5pdF9tYWxsb2MsIGFuZCByZWZyZXNoCisJd2hlbiB3ZSBkaXNjb3ZlciBhIGRldmljZS4gIEZyZWUgcG9pbnRlciBiZWZvcmUgcmV0dXJuaW5nLgorCUNoYW5nZSBzY3NpX2RldmljZXMgaW50byBhIGxpbmtlZCBsaXN0LgorCisJKiBzY3NpLmMgKHNjYW5fc2NzaXMpOiBDaGFuZ2UgdG8gb25seSBzY2FuIG9uZSBob3N0LgorCShzY3NpX2Rldl9pbml0KTogTG9vcCBvdmVyIGFsbCBkZXRlY3RlZCBob3N0cywgYW5kIHNjYW4gdGhlbS4KKworCSogaG9zdHMuYyAgKHNjc2lfaW5pdF9mcmVlKTogQ2hhbmdlIHNvIHRoYXQgIG51bWJlciBvZiBleHRyYSBieXRlcworCWlzIHN0b3JlZCBpbiBzdHJ1Y3QsIGFuZCB3ZSBkbyBub3QgaGF2ZSB0byBwYXNzIGl0IGVhY2ggdGltZS4KKworCSogaG9zdHMuaDogQ2hhbmdlIFNjc2lfSG9zdF9UZW1wbGF0ZSBzdHJ1Y3QgdG8gaW5jbHVkZSAibmV4dCIgYW5kCisJInJlbGVhc2UiIGZ1bmN0aW9ucy4gIEluaXRpYWxpemUgdG8gTlVMTCBpbiBhbGwgbG93IGxldmVsCisJYWRhcHRlcnMuCisKKwkqIGhvc3RzLmM6IFJlbmFtZSBzY3NpX2hvc3RzIHRvIGJ1aWx0aW5fc2NzaV9ob3N0cywgY3JlYXRlIGxpbmtlZAorCWxpc3Qgc2NzaV9ob3N0cywgbGlua2VkIHRvZ2V0aGVyIHdpdGggdGhlIG5ldyAibmV4dCIgZmllbGQuCisKK1dlZCBKdWwgIDYgMDU6NDU6MDIgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGVzcDIyKQorCisJKiBMaW51eCAxLjEuMjUgcmVsZWFzZWQuCisKKwkqIGFoYTE1MnguYzogQ2hhbmdlcyBmcm9tIEp1ZXJnZW4gLSBjbGVhbnVwcyBhbmQgdXBkYXRlcy4KKworCSogc2QuYywgc3IuYzogVXNlIG5ldyBjaGVja19tZWRpYV9jaGFuZ2UgYW5kIHJldmFsaWRhdGUKKwlmaWxlX29wZXJhdGlvbnMgZmllbGRzLgorCisJKiBzdC5jLCBzdC5oOiBBZGQgY2hhbmdlcyBmcm9tIEthaSBNYWtpc2FyYSwgZGF0ZWQgSnVuIDIyLgorCisJKiBob3N0cy5oOiBDaGFuZ2UgU0dfQUxMIGJhY2sgdG8gMHhmZi4gIEFwcGFyZW50bHkgc29mdCBlcnJvcgorCWluIC9kZXYvYnJhaW4gcmVzdWx0ZWQgaW4gaGF2aW5nIHRoaXMgYnVtcGVkIHVwLgorCUNoYW5nZSBmaXJzdCBwYXJhbWV0ZXIgaW4gYmlvc19wYXJhbSBmdW5jdGlvbiB0byBiZSBEaXNrICogaW5zdGVhZAorCW9mIGluZGV4IGludG8gcnNjc2lfZGlza3MuCisKKwkqIHNkX2lvY3RsLmM6IFBhc3MgcG9pbnRlciB0byByc2NzaV9kaXNrcyBlbGVtZW50IGluc3RlYWQgb2YgaW5kZXgKKwl0byBhcnJheS4KKworCSogc2QuaDogQWRkIHN0cnVjdCBuYW1lICJzY3NpX2Rpc2siIHRvIHR5cGVkZWYgZm9yIFNjc2lfRGlzay4KKworCSogc2NzaS5jOiBSZW1vdmUgcmVkdW5kYW50IE1heHRvciBYVDg3NjBTIGZyb20gYmxhY2tsaXN0LgorCUluIHNjc2lfcmVzZXQsIGFkZCBwcmludGsgd2hlbiBERUJVRyBkZWZpbmVkLgorCisJKiBBbGwgbG93IGxldmVsIGRyaXZlcnM6IE1vZGlmeSBkZWZpbml0aW9ucyBvZiBiaW9zX3BhcmFtIGluCisJYXBwcm9wcmlhdGUgd2F5LgorCitUaHUgSnVuIDE2IDEwOjMxOjU5IDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0Blc3AyMikKKworCSogTGludXggMS4xLjIwIHJlbGVhc2VkLgorCisJKiBzY3NpX2lvY3RsLmM6IE9ubHkgcGFzcyBkb3duIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGNoYXJhY3RlcnMKKwlyZXF1aXJlZCB0byBzY3NpX2RvX2NtZCwgbm90IHRoZSBvbmUgcm91bmRlZCB1cCB0byBhIGV2ZW4gbnVtYmVyCisJb2Ygc2VjdG9ycy4KKworCSogdWx0cmFzdG9yLmM6IENoYW5nZXMgZnJvbSBDYWxlYiBFcHN0ZWluIGZvciAyNGYgY2FyZHMuICBTdXBwb3J0CisJbGFyZ2VyIFNHIGxpc3RzLgorCisJKiB1bHRyYXN0b3IuYzogQ2hhbmdlcyBmcm9tIG1lIC0gdXNlIHNjc2lfcmVnaXN0ZXIgdG8gcmVnaXN0ZXIKKwlob3N0LiAgQWRkIHNvbWUgY29uc2lzdGVuY3kgY2hlY2tpbmcsCisKK1dlZCBKdW4gIDEgMjE6MTI6MTMgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGVzcDIyKQorCisJKiBMaW51eCAxLjEuMTkgcmVsZWFzZWQuCisKKwkqIHNjc2kuaDogQWRkIG5ldyByZXR1cm4gY29kZSBmb3IgcmVzZXQoKSBmdW5jdGlvbjoKKwlTQ1NJX1JFU0VUX1BVTlQuCisKKwkqIHNjc2kuYzogTWFrZSBTQ1NJX1JFU0VUX1BVTlQgdGhlIHNhbWUgYXMgU0NTSV9SRVNFVF9XQUtFVVAgZm9yCisJbm93LgorCisJKiBhaGExNTQyLmM6IElmIHRoZSBjb21tYW5kIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVzZXQgaXMgbm90CisJcGVuZGluZywgcmV0dXJuIFNDU0lfUkVTRVRfUFVOVC4KKworCSogYWhhMTc0MC5jLCBidXNsb2dpYy5jLCB3ZDcwMDAuYywgdWx0cmFzdG9yLmM6IFJldHVybgorCVNDU0lfUkVTRVRfUFVOVCBpbnN0ZWFkIG9mIFNDU0lfUkVTRVRfU05PT1pFLgorCitUdWUgTWF5IDMxIDE5OjM2OjAxIDE5OTQgIEVyaWMgWW91bmdkYWxlICAoZXJpY0Blc3AyMikKKworCSogYnVzbG9naWMuYzogRG8gbm90IHByaW50IG91dCBtZXNzYWdlIGFib3V0ICJtdXN0IGJlIEFkYXB0ZWMiCisJaWYgd2UgaGF2ZSBkZXRlY3RlZCBhIGJ1c2xvZ2ljIGNhcmQuICBQcmludCBvdXQgYSB3YXJuaW5nIG1lc3NhZ2UKKwlpZiB3ZSBhcmUgY29uZmlndXJpbmcgZm9yID4xNk1iLCBzaW5jZSB0aGUgNDQ1UyBhdCBib2FyZCBsZXZlbAorCUQgb3IgZWFybGllciBkb2VzIG5vdCB3b3JrIHJpZ2h0LiAgVGhlICJEIiBsZXZlbCBib2FyZCBjYW4gYmUgbWFkZQorCXRvIHdvcmsgYnkgZmxpcHBpbmcgYW4gdW5kb2N1bWVudGVkIHN3aXRjaCwgYnV0IHRoaXMgaXMgdG9vIHN1YnRsZS4KKworICAgIENoYW5nZXMgYmFzZWQgdXBvbiBwYXRjaGVzIGluIFlnZ2RyYXNpbCBkaXN0cmlidXRpb24uCisKKwkqIHNnLmMsIHNnLmg6IFJldHVybiBzZW5zZSBkYXRhIHRvIHVzZXIuCisKKwkqIGFoYTE1NDIuYywgYWhhMTc0MC5jLCBidXNsb2dpYy5jOiBEbyBub3QgcGFuaWMgaWYKKwlzZW5zZSBidWZmZXIgaXMgd3Jvbmcgc2l6ZS4KKworCSogaG9zdHMuYzogVGVzdCBmb3IgdWx0cmFzdG9yIGNhcmQgYmVmb3JlIGFueSBvZiB0aGUgb3RoZXJzLgorCisJKiBzY3NpLmM6IEFsbG93IGJvb3QtdGltZSBvcHRpb24gZm9yIG1heF9zY3NpX2x1bnM9PyBzbyB0aGF0CisJYnVnZ3kgZmlybXdhcmUgaGFzIGFuIGVhc3kgd29yay1hcm91bmQuCisKK1N1biBNYXkgMTUgMjA6MjQ6MzQgMTk5NCAgRXJpYyBZb3VuZ2RhbGUgIChlcmljQGVzcDIyKQorCisJKiBMaW51eCAxLjEuMTUgcmVsZWFzZWQuCisKKwlQb3N0LWNvZGVmcmVlemUgdGhhdy4uLgorCisJKiBidXNsb2dpYy5bYyxoXTogTmV3IGRyaXZlciBmcm9tIERhdmlkIEdlbnR6ZWwuCisKKwkqIGhvc3RzLmg6IEFkZCB1c2VfY2x1c3RlcmluZyBmaWVsZCB0byBleHBsaWNpdGx5IHNheSB3aGV0aGVyCisJY2x1c3RlcmluZyBzaG91bGQgYmUgdXNlZCBmb3IgZGV2aWNlcyBhdHRhY2hlZCB0byB0aGlzIGhvc3QKKwlhZGFwdGVyLiAgVGhlIGJ1c2xvZ2ljIGJvYXJkIGFwcGFyZW50bHkgc3VwcG9ydHMgbGFyZ2UgU0cgbGlzdHMsCisJYnV0IGl0IGlzIGFwcGFyZW50bHkgZmFzdGVyIGlmIHNkLmMgY29uZGVuc2VzIHRoaXMgaW50byBhIHNtYWxsZXIKKwlsaXN0LgorCisJKiBzZC5jOiBVc2UgdGhpcyBmaWVsZCBpbnN0ZWFkIG9mIGhldXJpc3RpYy4KKworCSogQWxsIGhvc3QgYWRhcHRlciBpbmNsdWRlIGZpbGVzOiBBZGQgYXBwcm9wcmlhdGUgaW5pdGlhbGl6ZXIgZm9yCisJdXNlX2NsdXN0ZXJpbmcgZmllbGQuCisKKwkqIHNjc2kuaDogQWRkICNkZWZpbmVzIGZvciByZXR1cm4gY29kZXMgZm9yIHRoZSBhYm9ydCBhbmQgcmVzZXQKKwlmdW5jdGlvbnMuICBUaGVyZSBhcmUgbm93IGEgc3BlY2lmaWMgc2V0IG9mIHJldHVybiBjb2RlcyB0byBmdWxseQorCXNwZWNpZnkgYWxsIG9mIHRoZSBwb3NzaWJsZSB0aGluZ3MgdGhhdCB0aGUgbG93LWxldmVsIGFkYXB0ZXIKKwljb3VsZCBkby4KKworCSogc2NzaS5jOiBBY3QgYmFzZWQgdXBvbiByZXR1cm4gY29kZXMgZnJvbSBhYm9ydC9yZXNldCBmdW5jdGlvbnMuCisKKwkqIEFsbCBob3N0IGFkYXB0ZXIgYWJvcnQvcmVzZXQgZnVuY3Rpb25zOiBSZXR1cm4gbmV3IHJldHVybiBjb2RlLgorCisJKiBBZGQgY29kZSBpbiBzY3NpLmMgdG8gaGVscCBkZWJ1ZyB0aW1lb3V0cy4gIFVzZSAjZGVmaW5lCisJREVCVUdfVElNRU9VVCB0byBlbmFibGUgdGhpcy4KKworCSogc2NzaS5jOiBJZiB0aGUgaG9zdC0+aXJxIGZpZWxkIGlzIHNldCwgdXNlCisJZGlzYWJsZV9pcnEvZW5hYmxlX2lycSBiZWZvcmUgY2FsbGluZyBxdWV1ZWNvbW1hbmQgaWYgd2UKKwlhcmUgbm90IGFscmVhZHkgaW4gYW4gaW50ZXJydXB0LiAgUmVkdWNlIHJhY2VzLCBhbmQgd2UKKwljYW4gYmUgc2xvcHBpZXIgYWJvdXQgY2xpL3N0aSBpbiB0aGUgaW50ZXJydXB0IHJvdXRpbmVzIG5vdworCShyZWR1Y2UgaW50ZXJydXB0IGxhdGVuY3kpLgorCisJKiBjb25zdGFudHMuYzogRml4IHNvbWUgdGhpbmdzIHRvIGVsaW1pbmF0ZSB3YXJuaW5ncy4gIEFkZCBzb21lCisJc2Vuc2UgZGVzY3JpcHRpb25zIHRoYXQgd2VyZSBvbWl0dGVkIGJlZm9yZS4KKworCSogYWhhMTU0Mi5jOiBXYXRjaCBmb3IgU0NSRCBmcm9tIGhvc3QgYWRhcHRlciAtIGlmIHdlIHNlZSBpdCwgc2V0CisJYSBmbGFnLiAgQ3VycmVudGx5IHdlIG9ubHkgcHJpbnQgb3V0IHRoZSBudW1iZXIgb2YgcGVuZGluZworCWNvbW1hbmRzIHRoYXQgbWlnaHQgbmVlZCB0byBiZSByZXN0YXJ0ZWQuCisKKwkqIGFoYTE1NDIuYyAoYWhhMTU0Ml9hYm9ydCk6IExvb2sgZm9yIGxvc3QgaW50ZXJydXB0cywgT0dNQiBzdGlsbAorCWZ1bGwsIGFuZCBhdHRlbXB0IHRvIHJlY292ZXIuICBPdGhlcndpc2UgZ2l2ZSB1cC4KKworCSogYWhhMTU0Mi5jIChhaGExNTQyX3Jlc2V0KTogVHJ5IEJVUyBERVZJQ0UgUkVTRVQsIGFuZCB0aGVuIHBhc3MKKwlESURfUkVTRVQgYmFjayB1cCB0byB0aGUgdXBwZXIgbGV2ZWwgY29kZSBmb3IgYWxsIGNvbW1hbmRzIHJ1bm5pbmcKKwlvbiB0aGlzIHRhcmdldCAoZXZlbiBvbiBkaWZmZXJlbnQgTFVOcykuCisKK1NhdCBNYXkgIDcgMTQ6NTQ6MDEgMTk5NAorCisJKiBMaW51eCAxLjEuMTIgcmVsZWFzZWQuCisKKwkqIHN0LmMsIHN0Lmg6IE5ldyB2ZXJzaW9uIGZyb20gS2FpLiAgU3VwcG9ydHMgYm9vdCB0aW1lCisJc3BlY2lmaWNhdGlvbiBvZiBudW1iZXIgb2YgYnVmZmVycy4KKworCSogd2Q3MDAwLltjLGhdOiBVcGRhdGVkIGRyaXZlciBmcm9tIEpvaG4gQm95ZC4gIE5vdyBzdXBwb3J0cworCW1vcmUgdGhhbiBvbmUgd2Q3MDAwIGJvYXJkIGluIG1hY2hpbmUgYXQgb25lIHRpbWUsIGFtb25nIG90aGVyIHRoaW5ncy4KKworV2VkIEFwciAyMCAyMjoyMDozNSAxOTk0CisKKwkqIExpbnV4IDEuMS44IHJlbGVhc2VkLgorCisJKiBzZC5jOiBBZGQgYSBmZXcgdHlwZSBjYXN0cyB3aGVyZSBzY3NpX21hbGxvYyBpcyBjYWxsZWQuCisKK1dlZCBBcHIgMTMgMTI6NTM6MjkgMTk5NAorCisJKiBMaW51eCAxLjEuNCByZWxlYXNlZC4KKworCSogc2NzaS5jOiBDbGVhbiB1cCBhIGZldyBwcmludGtzICh1c2UgJXAgdG8gcHJpbnQgcG9pbnRlcnMpLgorCitXZWQgQXByIDEzIDExOjMzOjAyIDE5OTQKKworCSogTGludXggMS4xLjMgcmVsZWFzZWQuCisKKwkqIGZkb21haW4uYzogVXBkYXRlIHRvIHZlcnNpb24gNS4xNiAoSGFuZGxlIGRpZmZlcmVudCBGSUZPIHNpemVzCisJYmV0dGVyKS4KKworRnJpIEFwciAgOCAwODo1NzoxOSAxOTk0CisKKwkqIExpbnV4IDEuMS4yIHJlbGVhc2VkLgorCisJKiBUaHJvdWdob3V0OiBTQ1NJIHBvcnRpb24gb2YgY2x1c3RlciBkaWZmcyBhZGRlZC4KKworVHVlIEFwciAgNSAwNzo0MTo1MCAxOTk0CisKKwkqIExpbnV4IDEuMSBkZXZlbG9wbWVudCB0cmVlIGluaXRpYXRlZC4KKworCSogVGhlIGxpbnV4IDEuMCBkZXZlbG9wbWVudCB0cmVlIGlzIG5vdyBlZmZlY3RpdmVseSBmcm96ZW4gZXhjZXB0CisJZm9yIG9idmlvdXMgYnVnZml4ZXMuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitTdW4gQXByIDE3IDAwOjE3OjM5IDE5OTQKKworCSogTGludXggMS4wLCBwYXRjaGxldmVsIDkgcmVsZWFzZWQuCisKKwkqIGZkb21haW4uYzogVXBkYXRlIHRvIHZlcnNpb24gNS4xNiAoSGFuZGxlIGRpZmZlcmVudCBGSUZPIHNpemVzCisJYmV0dGVyKS4KKworVGh1IEFwciAgNyAwODozNjoyMCAxOTk0CisKKwkqIExpbnV4IDEuMCwgcGF0Y2hsZXZlbDggcmVsZWFzZWQuCisKKwkqIGZkb21haW4uYzogVXBkYXRlIHRvIHZlcnNpb24gNS4xNSBmcm9tIDUuOS4gIEhhbmRsZXMgMy40IGJpb3MuCisKK1N1biBBcHIgIDMgMTQ6NDM6MDMgMTk5NAorCisJKiBMaW51eCAxLjAsIHBhdGNobGV2ZWw2IHJlbGVhc2VkLgorCisJKiB3ZDcwMDAuYzogTWFrZSBzdGFiIGF0IGZpeGluZyByYWNlIGNvbmRpdGlvbi4KKworU2F0IE1hciAyNiAxNDoxNDo1MCAxOTk0CisKKwkqIExpbnV4IDEuMCwgcGF0Y2hsZXZlbDUgcmVsZWFzZWQuCisKKwkqIGFoYTE1MnguYywgTWFrZWZpbGU6IEZpeCBhIGZldyBidWdzICh0b28gbXVjaCBkYXRhIG1lc3NhZ2UpLgorCUFkZCBhIGZldyBtb3JlIGJpb3Mgc2lnbmF0dXJlcy4gKFBhdGNoZXMgZnJvbSBKdWVyZ2VuKS4KKworCSogYWhhMTU0Mi5jOiBGaXggcmFjZSBjb25kaXRpb24gaW4gYWhhMTU0Ml9vdXQuCisKK01vbiBNYXIgMjEgMTY6MzY6MjAgMTk5NAorCisJKiBMaW51eCAxLjAsIHBhdGNobGV2ZWwzIHJlbGVhc2VkLgorCisJKiBzZC5jLCBzdC5jLCBzci5jLCBzZy5jOiBSZXR1cm4gLUVOWElPLCBub3QgLUVOT0RFViBpZiB3ZSBhdHRlbXB0CisJdG8gb3BlbiBhIG5vbi1leGlzdGVudCBkZXZpY2UuCisKKwkqIHNjc2kuYzogQWRkIENoaW5vbiBjZHJvbSB0byBibGFja2xpc3QuCisKKwkqIHNyX2lvY3RsLmM6IENoZWNrIHJldHVybiBzdGF0dXMgb2YgdmVyaWZ5X2FyZWEuCisKK1NhdCBNYXIgIDYgMTY6MDY6MTkgMTk5NAorCisJKiBMaW51eCAxLjAgcmVsZWFzZWQgKHRlY2huaWNhbGx5IGEgcHJlLXJlbGVhc2UpLgorCisJKiBzY3NpLmM6IEFkZCBJTVMgQ0RENTIxLCBNYXh0b3IgWFQtODc2MFMgdG8gYmxhY2tsaXN0LgorCitUdWUgRmViIDE1IDEwOjU4OjIwIDE5OTQKKworICAgICAgICAqIHBsMTVlIHJlbGVhc2VkLgorCisgICAgICAgICogYWhhMTU0Mi5jOiBGb3IgMTU0MkMsIGFsbG93IGR5bmFtaWMgZGV2aWNlIHNjYW4gd2l0aCA+MUdiIHR1cm5lZAorCW9mZi4KKworCSogY29uc3RhbnRzLmM6IEZpeCB0eXBvIGluIGRlZmluaXRpb24gb2YgQ09OU1RBTlRTLgorCisgICAgICAgICogcGwxNWQgcmVsZWFzZWQuCisKK0ZyaSBGZWIgMTEgMTA6MTA6MTYgMTk5NAorCisgICAgICAgICogcGwxNWMgcmVsZWFzZWQuCisKKwkqIHNjc2kuYzogQWRkIE1heHRvciBYVC0zMjgwIGFuZCBSb2RpbWUgUk8zMDAwUyB0byBibGFja2xpc3QuCisKKwkqIHNjc2kuYzogQWxsb3cgdGFnZ2VkIHF1ZXVlaW5nIGZvciBzY3NpIDMgZGV2aWNlcyBhcyB3ZWxsLgorCVNvbWUgcmVhbGx5IG9sZCBkZXZpY2VzIHJlcG9ydCBhIHZlcnNpb24gbnVtYmVyIG9mIDAuICBEaXNhbGxvdworCUxVTiAhPSAwIGZvciB0aGVzZS4KKworVGh1IEZlYiAxMCAwOTo0ODo1NyAxOTk0CisKKyAgICAgICAgKiBwbDE1YiByZWxlYXNlZC4KKworU3VuIEZlYiAgNiAxMjoxOTo0NiAxOTk0CisKKyAgICAgICAgKiBwbDE1YSByZWxlYXNlZC4KKworRnJpIEZlYiAgNCAwOTowMjoxNyAxOTk0CisKKyAgICAgICAgKiBzY3NpLmM6IEFkZCBUZWFjIGNkcm9tIHRvIGJsYWNrbGlzdC4KKworVGh1IEZlYiAgMyAxNDoxNjo0MyAxOTk0CisKKwkqIHBsMTUgcmVsZWFzZWQuCisKK1R1ZSBGZWIgIDEgMTU6NDc6NDMgMTk5NAorCisJKiBwbDE0dyByZWxlYXNlZC4KKworCSogd2Q3MDAwLmMgKHdkX2Jhc2VzKTogRml4IHR5cG8gaW4gbGFzdCBjaGFuZ2UuCisKK01vbiBKYW4gMjQgMTc6Mzc6MjMgMTk5NAorCisJKiBwbDE0dSByZWxlYXNlZC4KKworCSogYWhhMTU0Mi5jOiBTdXBwb3J0IDE1NDJDRi9leHRlbmRlZCBiaW9zLiAgRGlmZmVyZW50IGZyb20gMTU0MkMKKworCSogd2Q3MDAwLmM6IEFsbG93IGJpb3MgYXQgMHhkODAwMCBhcyB3ZWxsLgorCisJKiB1bHRyYXN0b3IuYzogRG8gbm90IHRydW5jYXRlIGN5bGluZGVycyB0byAxMDI0LgorCisJKiBmZG9tYWluLmM6IFVwZGF0ZSB0byB2ZXJzaW9uIDUuOSAoYWRkIG5ldyBiaW9zIHNpZ25hdHVyZSkuCisKKwkqIE5DUjUzODAuYzogVXBkYXRlIGZyb20gRHJldyAtIHNob3VsZCB3b3JrIGEgbG90IGJldHRlciBub3cuCisKK1NhdCBKYW4gIDggMTU6MTM6MTAgMTk5NAorCisJKiBwbDE0byByZWxlYXNlZC4KKworCSogc3JfaW9jdGwuYzogWmVybyByZXNlcnZlZCBmaWVsZCBiZWZvcmUgdHJ5aW5nIHRvIHNldCBhdWRpbyB2b2x1bWUuCisKK1dlZCBKYW4gIDUgMTM6MjE6MTAgMTk5NAorCisJKiBwbDE0bSByZWxlYXNlZC4KKworCSogZmRvbWFpbi5jOiBVcGRhdGUgdG8gdmVyc2lvbiA1LjguICBObyBmdW5jdGlvbmFsIGRpZmZlcmVuY2U/Pz8KKworVHVlIEphbiAgNCAxNDoyNjoxMyAxOTk0CisKKwkqIHBsMTRsIHJlbGVhc2VkLgorCisJKiB1bHRyYXN0b3IuYzogUmVtb3ZlIG91dGwsIGlubCBmdW5jdGlvbnMgKG5vdyBwcm92aWRlZCBlbHNld2hlcmUpLgorCitNb24gSmFuICAzIDEyOjI3OjI1IDE5OTQKKworCSogcGwxNGsgcmVsZWFzZWQuCisKKwkqIGFoYTE1MnguYzogUmVtb3ZlIGluc3cgYW5kIG91dHN3IGZ1bmN0aW9ucy4KKworCSogZmRvbWFpbi5jOiBEaXR0by4KKworV2VkIERlYyAyOSAwOTo0NzoyMCAxOTkzCisKKwkqIHBsMTRpIHJlbGVhc2VkLgorCisJKiBzY3NpLmM6IFN1cHBvcnQgUkVDT1ZFUkVEX0VSUk9SIGZvciB0YXBlIGRyaXZlcy4KKworCSogc3QuYzogVXBkYXRlIG9mIHRhcGUgZHJpdmVyIGZyb20gS2FpLgorCitUdWUgRGVjIDIxIDA5OjE4OjMwIDE5OTMKKworCSogcGwxNGcgcmVsZWFzZWQuCisKKwkqIGFoYTE1NDIuW2MsaF06IFN1cHBvcnQgZXh0ZW5kZWQgQklPUyBzdHVmZi4KKworCSogc2NzaS5jOiBDbGVhbiB1cCBtZXNzYWdlcyBhYm91dCBkaXNrcywgc28gdGhleSBhcmUgZGlzcGxheWVkIGFzCisJc2RhLCBzZGIsIGV0YyBpbnN0ZWFkIG9mIHNkMCwgc2QxLCBldGMuCisKKwkqIHNyLmM6ICBGb3JjZSByZXJlYWQgb2YgY2FwYWNpdHkgaWYgZGlzayB3YXMgY2hhbmdlZC4KKwlDbGVhciBidWZmZXIgYmVmb3JlIGFza2luZyBmb3IgY2FwYWNpdHkvc2VjdG9yc2l6ZSAoc29tZSBkcml2ZXMKKwlkbyBub3QgcmVwb3J0IHRoaXMgcHJvcGVybHkpLiAgU2V0IG5lZWRzX3NlY3Rvcl9zaXplIGZsYWcgaWYKKwlkcml2ZSBkaWQgbm90IHJldHVybiBzZW5zaWJsZSBzZWN0b3Igc2l6ZS4KKworTW9uIERlYyAxMyAxMjoxMzo0NyAxOTkzCisKKwkqIGFoYTE1MnguYzogVXBkYXRlIHRvIHZlcnNpb24gLjEwMSBmcm9tIEp1ZXJnZW4uCisKK01vbiBOb3YgMjkgMDM6MDM6MDAgMTk5MworCisgICAgICAgICogbGludXggMC45OS4xNCByZWxlYXNlZC4KKworCSogQWxsIHNjc2kgc3R1ZmYgbW92ZWQgZnJvbSBrZXJuZWwvYmxrX2Rydi9zY3NpIHRvIGRyaXZlcnMvc2NzaS4KKworCSogVGhyb3VnaG91dDogR3JhbW1hdGljYWwgY29ycmVjdGlvbnMgdG8gdmFyaW91cyBjb21tZW50cy4KKworCSogTWFrZWZpbGU6IGZpeCBzbyB0aGF0IHdlIGRvIG5vdCBuZWVkIHRvIGNvbXBpbGUgdGhpbmdzIHdlIGFyZQorCW5vdCBnb2luZyB0byB1c2UuCisKKwkqIE5DUjUzODAuYywgTkNSNTM4MC5oLCBnX05DUjUzODAuYywgZ19OQ1I1MzgwLmgsIHBhczE2LmMsCisJcGFzMTYuaCwgdDEyOC5jLCB0MTI4Lmg6ICBOZXcgZmlsZXMgZnJvbSBEcmV3LgorCisJKiBhaGExNTJ4LmMsIGFoYTE1MnguaDogTmV3IGZpbGVzIGZyb20gSnVlcmdlbiBGaXNjaGVyLgorCisJKiBhaGExNTQyLmM6IFN1cHBvcnQgZm9yIG1vcmUgdGhhbiBvbmUgMTU0MiBpbiB0aGUgbWFjaGluZQorCWF0IHRoZSBzYW1lIHRpbWUuICBNYWtlIGZ1bmN0aW9ucyBzdGF0aWMgdGhhdCBkbyBub3QgbmVlZAorCXZpc2liaWxpdHkuCisKKwkqIGFoYTE3NDAuYzogU2V0IE5FRURTX0pVTVBTVEFSVCBmbGFnIGluIHJlc2V0IGZ1bmN0aW9uLCBzbyB3ZQorCWtub3cgdG8gcmVzdGFydCB0aGUgY29tbWFuZC4gIENoYW5nZSBwcm90b3R5cGUgb2YgYWhhMTc0MF9yZXNldAorCXRvIHRha2UgYSBjb21tYW5kIHBvaW50ZXIuCisKKwkqIGNvbnN0YW50cy5jOiBDbGVhbiB1cCBhIGZldyB0aGluZ3MuCisKKwkqIGZkb21haW4uYzogVXBkYXRlIHRvIHZlcnNpb24gNS42LiAgTW92ZSBzbmFyZl9yZWdpb24uICBBbGxvdworCWJvYXJkIHRvIGJlIHNldCBhdCBkaWZmZXJlbnQgU0NTSSBpZHMuICBSZW1vdmUgc3VwcG9ydCBmb3IKKwlyZXNlbGVjdGlvbiAoZGlkIG5vdCB3b3JrIHdlbGwpLiAgU2V0IEpVTVBTVEFSVCBmbGFnIGluIHJlc2V0CisJY29kZS4KKworCSogaG9zdHMuYzogU3VwcG9ydCBuZXcgbG93LWxldmVsIGFkYXB0ZXJzLiAgQWxsb3cgZm9yIG1vcmUgdGhhbgorCW9uZSBhZGFwdGVyIG9mIGEgZ2l2ZW4gdHlwZS4KKworCSogaG9zdHMuaDogQWxsb3cgZm9yIG1vcmUgdGhhbiBvbmUgYWRhcHRlciBvZiBhIGdpdmVuIHR5cGUuCisKKwkqIHNjc2kuYzogIEFkZCBzY3NpX2RldmljZV90eXBlcyBhcnJheSwgaWYgTkVFRFNfSlVNUFNUQVJUIGlzIHNldAorCWFmdGVyIGEgbG93LWxldmVsIHJlc2V0LCBzdGFydCB0aGUgY29tbWFuZCBhZ2Fpbi4gIFNvcnQgYmxhY2tsaXN0LAorCWFuZCBhZGQgTWF4dG9yIE1YVC0xMjQwUywgWFQtNDE3MFMsIE5FQyBDRFJPTSA4NCwgU2VhZ2F0ZSBTVDE1N04uCisKKwkqIHNjc2kuaDogQWRkIGNvbnN0YW50cyBmb3IgdGFnZ2VkIHF1ZXVlaW5nLgorCisJKiBUaHJvdWdob3V0OiBVc2UgY29uc3RhbnRzIGZyb20gbWFqb3IuaCBpbnN0ZWFkIG9mIGhhcmRjb2RlZAorCW51bWJlcnMgZm9yIG1ham9yIG51bWJlcnMuCisKKwkqIHNjc2lfaW9jdGwuYzogRml4IGJ1ZyBpbiBidWZmZXIgbGVuZ3RoIGluIGlvY3RsX2NvbW1hbmQuICBVc2UKKwl2ZXJpZnlfYXJlYSBpbiBHRVRfSURMVU4gaW9jdGwuICBBZGQgbmV3IGlvY3RscyBmb3IKKwlUQUdHRURfUVVFVUVfRU5BQkxFLCBESVNBQkxFLiAgT25seSBhbGxvdyBJT0NUTF9TRU5EX0NPTU1BTkQgYnkKKwlzdXBlcnVzZXIuCisKKwkqIHNkLmM6IE9ubHkgcGF5IGF0dGVudGlvbiB0byBVTklUX0FUVEVOVElPTiBmb3IgcmVtb3ZhYmxlIGRpc2tzLgorCUZpeCBidWcgd2hlcmUgc29tZXRpbWVzIHBvcnRpb25zIG9mIGJsb2NrcyB3b3VsZCBnZXQgbG9zdAorCXJlc3VsdGluZyBpbiBwcm9jZXNzZXMgaGFuZ2luZy4gIEFkZCBtZXNzYWdlcyB3aGVuIHdlIHNwaW4gdXAgYQorCWRpc2ssIGFuZCBmaXggYSBidWcgaW4gdGhlIHRpbWluZy4gIEluY3JlYXNlIHJlYWQtYWhlYWQgZm9yIGRpc2tzCisJdGhhdCBhcmUgb24gYSBzY2F0dGVyLWdhdGhlciBjYXBhYmxlIGhvc3QgYWRhcHRlci4KKworCSogc2VhZ2F0ZS5jOiBGaXggc28gdGhhdCBzb21lIHBhcmFtZXRlcnMgY2FuIGJlIHNldCBmcm9tIHRoZSBsaWxvCisJcHJvbXB0LiAgU3VwcGx5IGp1bXBzdGFydCBmbGFnIGlmIHdlIGFyZSByZXNldHRpbmcgYW5kIG5lZWQgdGhlCisJY29tbWFuZCByZXN0YXJ0ZWQuICAgRml4IHNvIHRoYXQgd2UgcmV0dXJuIDEgaWYgd2UgZGV0ZWN0IGEgY2FyZAorCXNvIHRoYXQgbXVsdGlwbGUgY2FyZCBkZXRlY3Rpb24gd29ya3MgY29ycmVjdGx5LiAgQWRkIHlldCBhbm90aGVyCisJc2lnbmF0dXJlIGZvciBGRCBjYXJkcyAoOTUwKS4gIEFkZCBhbm90aGVyIHNpZ25hdHVyZSBmb3IgU1QweC4KKworCSogc2cuYywgc2cuaDogTmV3IGZpbGVzIGZyb20gTGF3cmVuY2UgRm9hcmQgZm9yIGdlbmVyaWMgc2NzaQorCWFjY2Vzcy4KKworCSogc3IuYzogIEFkZCB0eXBlIGNhc3RzIGZvciAodm9pZCopIHNvIHRoYXQgd2UgY2FuIGRvIHBvaW50ZXIKKwlhcml0aG1ldGljLiAgV29ya3Mgd2l0aCBHQ0Mgd2l0aG91dCB0aGlzLCBidXQgaXQgaXMgbm90IHN0cmljdGx5CisJY29ycmVjdC4gIFNhbWUgYnVnZml4IGFzIHdhcyBpbiBzZC5jLiAgSW5jcmVhc2UgcmVhZC1haGVhZCBhIGxhCisJZGlzayBkcml2ZXIuCisKKwkqIHNyX2lvY3RsLmM6IFVzZSBzY3NpX21hbGxvYyBidWZmZXIgaW5zdGVhZCBvZiBidWZmZXIgZnJvbSBzdGFjaworCXNpbmNlIHdlIGNhbm5vdCBndWFyYW50ZWUgdGhhdCB0aGUgc3RhY2sgaXMgPCAxNk1iLgorCisJdWx0cmFzdG9yLmM6IFVwZGF0ZSB0byBzdXBwb3J0IDI0ZiBwcm9wZXJseSAoSkZDJ3MgZHJpdmVyKS4KKworCXdkNzAwMC5jOiBTdXBwbHkganVtcHN0YXJ0IGZsYWcgZm9yIHJlc2V0LiAgRG8gbm90IHJvdW5kIHVwCisJbnVtYmVyIG9mIGN5bGluZGVycyBpbiBiaW9zcGFyYW0gZnVuY3Rpb24uCisKK1NhdCBTZXAgIDQgMjA6NDk6NTYgMTk5MworCisgICAgKiAwLjk5cGwxMyByZWxlYXNlZC4KKworICAgICogVGhyb3VnaG91dDogIFVzZSBjaGVja19yZWdpb24vc25hcmZfcmVnaW9uIGZvciBhbGwgbG93LWxldmVsCisgICAgZHJpdmVycy4KKworICAgICogYWhhMTU0Mi5jOiBEbyBoYXJkIHJlc2V0IGluc3RlYWQgb2Ygc29mdCAoc29tZSBldGhlcmNhcmQgcHJvYmVzCisgICAgc2NyZXcgdXMgdXApLgorCisgICAgKiBzY3NpLmM6IEFkZCBuZXcgZmxhZyBBU0tFRF9GT1JfU0VOU0Ugc28gdGhhdCB3ZSBjYW4gdGVsbCBpZiB3ZSBhcmUKKyAgICBpbiBhIGxvb3Agd2hlcmVieSB0aGUgZGV2aWNlIHJldHVybnMgbnVsbCBzZW5zZSBkYXRhLgorCisgICAgKiBzZC5jOiBBZGQgY29kZSB0byBzcGluIHVwIGEgZHJpdmUgaWYgaXQgaXMgbm90IGFscmVhZHkgc3Bpbm5pbmcuCisgICAgRG8gdGhpcyBvbmUgYXQgYSB0aW1lIHRvIG1ha2UgaXQgZWFzaWVyIG9uIHBvd2VyIHN1cHBsaWVzLgorCisgICAgKiBzZF9pb2N0bC5jOiBVc2Ugc3luY19kZXYgaW5zdGVhZCBvZiBmc3luY19kZXYgaW4gQkxLRkxTQlVGIGlvY3RsLgorCisgICAgKiBzZWFnYXRlLmM6IFN3aXRjaCBhcm91bmQgREFUQS9DT05UUk9MIGxpbmVzLgorCisgICAgKiBzdC5jOiBDaGFuZ2Ugc2Vuc2UgdG8gdW5zaWduZWQuCisKK1RodSBBdWcgIDUgMTE6NTk6MTggMTk5MworCisgICAgKiAwLjk5cGwxMiByZWxlYXNlZC4KKworICAgICogY29uc3RhbnRzLmMsIGNvbnN0YW50cy5oOiBOZXcgZmlsZXMgd2l0aCBhc2NpaSBkZXNjcmlwdGlvbnMgb2YKKyAgICB2YXJpb3VzIGNvbmRpdGlvbnMuCisKKyAgICAqIE1ha2VmaWxlOiBEbyBub3QgdHJ5IHRvIGNvdW50IHRoZSBudW1iZXIgb2YgbG93LWxldmVsIGRyaXZlcnMsCisgICAganVzdCBnZW5lcmF0ZSB0aGUgbGlzdCBvZiAubyBmaWxlcy4KKworICAgICogYWhhMTU0Mi5jOiBSZXBsYWNlIDE2IHdpdGggc2l6ZW9mKFNDcG50LT5zZW5zZV9idWZmZXIpLiAgQWRkIHRlc3RzCisgICAgZm9yIGFkZHJlc3NlcyA+IDE2TWIsIHBhbmljIGlmIHdlIGZpbmQgb25lLgorCisgICAgKiBhaGExNzQwLmM6IERpdHRvIHdpdGggc2l6ZW9mKCkuCisKKyAgICAqIGZkb21haW4uYzogVXBkYXRlIHRvIHZlcnNpb24gMy4xOC4gIEFkZCBuZXcgc2lnbmF0dXJlLCByZWdpc3RlciBJUlEKKyAgICB3aXRoIGlycWFjdGlvbi4gIFVzZSBJRCA3IGZvciBuZXcgYm9hcmQuICBCZSBtb3JlIGludGVsbGlnZW50IGFib3V0CisgICAgb2J0YWluaW5nIHRoZSBoL3MvYyBudW1iZXJzIGZvciBiaW9zcGFyYW0uCisKKyAgICAqIGhvc3RzLmM6IERvIG5vdCBkZXBlbmQgdXBvbiBNYWtlZmlsZSBnZW5lcmF0ZWQgY291bnQgb2YgdGhlIG51bWJlcgorICAgIG9mIGxvdy1sZXZlbCBob3N0IGFkYXB0ZXJzLgorCisgICAgKiBzY3NpLmM6IFVzZSBhcnJheSBmb3Igc2NzaV9jb21tYW5kX3NpemUgaW5zdGVhZCBvZiBhIGZ1bmN0aW9uLiAgQWRkCisgICAgVGV4ZWwgY2Ryb20gYW5kIE1heHRvciBYVC00MzgwUyB0byBibGFja2xpc3QuICBBbGxvdyBjb21waWxlIHRpbWUKKyAgICBvcHRpb24gZm9yIG5vLW11bHRpIGx1biBzY2FuLiAgQWRkIHNlbWFwaG9yZSBmb3IgcG9zc2libGUgcHJvYmxlbXMKKyAgICB3aXRoIGhhbmRzaGFraW5nLCBhc3N1bWUgZGV2aWNlIGlzIGZhdWx0eSB1bnRpbCB3ZSBrbm93IGl0IG5vdCB0byBiZQorICAgIHRoZSBjYXNlLiAgQWRkIERFQlVHX0lOSVQgc3ltYm9sIHRvIGR1bXAgaW5mbyBhcyB3ZSBzY2FuIGZvciBkZXZpY2VzLgorICAgIFplcm8gc2Vuc2UgYnVmZmVyIHNvIHdlIGNhbiB0ZWxsIGlmIHdlIG5lZWQgdG8gcmVxdWVzdCBpdC4gIFdoZW4KKyAgICBleGFtaW5pbmcgc2Vuc2UgaW5mb3JtYXRpb24sIHJlcXVlc3Qgc2Vuc2UgaWYgYnVmZmVyIGlzIGFsbCB6ZXJvLgorICAgIElmIFJFU0VULCByZXF1ZXN0IHNlbnNlIGluZm9ybWF0aW9uIHRvIHNlZSB3aGF0IHRvIGRvIG5leHQuCisKKyAgICAqIHNjc2lfZGVidWcuYzogQ2hhbmdlIHNvbWUgY29uc3RhbnRzIHRvIHVzZSBzeW1ib2xzIGxpa2UgSU5UX01BWC4KKworICAgICogc2NzaV9pb2N0bC5jIChrZXJuZWxfc2NzaV9pb2N0bCk6IE5ldyBmdW5jdGlvbiAtZm9yIG1ha2luZyBpb2N0bAorICAgIGNhbGxzIGZyb20ga2VybmVsIHNwYWNlLgorCisgICAgKiBzZC5jOiBJbmNyZWFzZSB0aW1lb3V0IHRvIDMwMC4gIFVzZSBmdW5jdGlvbnMgaW4gY29uc3RhbnRzLmggdG8KKyAgICBkaXNwbGF5IGluZm8uICBVc2Ugc2NzaV9tYWxsb2MgYnVmZmVyIGZvciBSRUFEX0NBUEFDSVRZLCBzaW5jZQorICAgIHdlIGNhbm5vdCBndWFyYW50ZWUgdGhhdCBhIHN0YWNrIGJhc2VkIGJ1ZmZlciBpcyA8IDE2TWIuCisKKyAgICAqIHNkX2lvY3RsLmM6IEFkZCBCTEtGTFNCVUYgaW9jdGwuCisKKyAgICAqIHNlYWdhdGUuYzogQWRkIG5ldyBjb21waWxlIHRpbWUgb3B0aW9ucyBmb3IgQVJCSVRSQVRFLAorICAgIFNMT1dfSEFORFNIQUtFLCBhbmQgU0xPV19SQVRFLiAgVXBkYXRlIGFzc2VtYmx5IGxvb3BzIGZvciB0cmFuc2ZlcnJpbmcKKyAgICBkYXRhLiAgVXNlIGtlcm5lbF9zY3NpX2lvY3RsIHRvIHJlcXVlc3QgbW9kZSBwYWdlIHdpdGggZ2VvbWV0cnkuCisKKyAgICAqIHNyLmM6IFVzZSBmdW5jdGlvbnMgaW4gY29uc3RhbnRzLmMgdG8gZGlzcGxheSBtZXNzYWdlcy4KKworICAgICogc3QuYzogU3VwcG9ydCBmb3IgdmFyaWFibGUgYmxvY2sgc2l6ZS4KKworICAgICogdWx0cmFzdG9yLmM6IERvIG5vdCB1c2UgY2FjaGUgZm9yIHRhcGUgZHJpdmVzLiAgU2V0CisgICAgdW5jaGVja2VkX2lzYV9kbWEgZmxhZywgZXZlbiB0aG91Z2ggdGhpcyBtYXkgbm90IGJlIG5lZWRlZCAoZ2V0cyBzZXQKKyAgICBsYXRlcikuCisKK1NhdCBKdWwgMTcgMTg6MzI6NDQgMTk5MworCisgICAgKiAwLjk5cGwxMSByZWxlYXNlZC4gIEMrKyBjb21waWxhYmxlLgorCisgICAgKiBUaHJvdWdob3V0OiBBZGQgdHlwZSBjYXN0cyBhbGwgb3ZlciB0aGUgcGxhY2UsIGFuZCB1c2UgImlwIiBpbnN0ZWFkCisgICAgb2YgImluZm8iIGluIHRoZSB2YXJpb3VzIGJpb3NwYXJhbSBmdW5jdGlvbnMuCisKKyAgICAqIE1ha2VmaWxlOiBDb21waWxlIHNlYWdhdGUuYyB3aXRoIEMrKyBjb21waWxlci4KKworICAgICogYWhhMTU0Mi5jOiBBbHdheXMgc2V0IGNjYiBwb2ludGVyIGFzIHRoaXMgZ2V0cyB0cmFzaGVkIHNvbWVob3cgb24KKyAgICBzb21lIHN5c3RlbXMuICBBZGQgYSBmZXcgdHlwZSBjYXN0cy4gIFVwZGF0ZSBiaW9zcGFyYW0gZnVuY3Rpb24gYSBsaXR0bGUuCisKKyAgICAqIGFoYTE3NDAuYzogQWRkIGEgZmV3IHR5cGUgY2FzdHMuCisKKyAgICAqIGZkb21haW4uYzogVXBkYXRlIHRvIHZlcnNpb24gMy4xNyBmcm9tIDMuNi4gIE5vdyB3b3JrcyB3aXRoCisgICAgVE1DLTE4QzUwLgorCisgICAgKiBzY3NpLmM6IE1pbm9yIGNoYW5nZXMgaGVyZSBhbmQgdGhlcmUgd2l0aCBkYXRhdHlwZXMuICBTYXZlIHVzZV9zZworICAgIHdoZW4gcmVxdWVzdGluZyBzZW5zZSBpbmZvcm1hdGlvbiBzbyB0aGF0IHRoaXMgY2FuIHByb3Blcmx5IGJlCisgICAgcmVzdG9yZWQgaWYgd2UgcmV0cnkgdGhlIGNvbW1hbmQuICBTZXQgYXNpZGUgZG1hIGJ1ZmZlcnMgYXNzdW1pbmcgZWFjaAorICAgIGJsb2NrIGlzIDEgcGFnZSwgbm90IDFLYiBtaW5peCBibG9jay4KKworICAgICogc2NzaV9pb2N0bC5jOiBBZGQgYSBmZXcgdHlwZSBjYXN0cy4gIE90aGVyIG1pbm9yIGNoYW5nZXMuCisKKyAgICAqIHNkLmM6ICBDb3JyZWN0bHkgIGZyZWUgYWxsIHNjc2lfbWFsbG9jJ2QgbWVtb3J5IGlmIHdlIHJ1biBvdXQgb2YKKyAgICBkbWFfcG9vbC4gU3RvcmUgYmxvY2tzaXplIGluZm9ybWF0aW9uIGZvciBlYWNoIHBhcnRpdGlvbi4KKworICAgICogc2VhZ2F0ZS5jOiBNaW5vciBjbGVhbnVwcyBoZXJlIGFuZCB0aGVyZS4KKworICAgICogc3IuYzogU2V0IHVwIGJsb2Nrc2l6ZSBhcnJheSBmb3IgYWxsIGRpc2NzLiAgRml4IGJ1ZyBpbiBmcmVlaW5nCisgICAgYnVmZmVycyBpZiB3ZSBydW4gb3V0IG9mIGRtYSBwb29sLgorCitUaHUgSnVuICAyIDE3OjU4OjExIDE5OTMKKworICAgICogMC45OXBsMTAgcmVsZWFzZWQuCisKKyAgICAqIGFoYTE1NDIuYzogU3VwcG9ydCBmb3IgQlQgNDQ1UyAoVkwtYnVzIGJvYXJkIHdpdGggbm8gZG1hIGNoYW5uZWwpLgorCisgICAgKiBmZG9tYWluLmM6IFVwZ3JhZGUgdG8gdmVyc2lvbiAzLjYuIFByZWxpbWluYXJ5IHN1cHBvcnQgZm9yIFROQy0xOEM1MC4KKworICAgICogc2NzaS5jOiBGaXJzdCBhdHRlbXB0IHRvIGZpeCBwcm9ibGVtIHdpdGggb2xkX3VzZV9zZy4gIENoYW5nZQorICAgIE5PVF9SRUFEWSB0byBhIFNVR0dFU1RfQUJPUlQuICBGaXggdGltZW91dCByYWNlIHdoZXJlIHRpbWUgbWlnaHQKKyAgICBnZXQgZGVjcmVtZW50ZWQgcGFzdCB6ZXJvLgorCisgICAgKiBzZC5jOiBBZGQgYmxvY2tfZnN5bmMgZnVuY3Rpb24gdG8gZGlzcGF0Y2ggdGFibGUuCisKKyAgICAqIHNyLmM6IEluY3JlYXNlIHRpbWVvdXQgdG8gNTAwIGZyb20gMjUwLiAgQWRkIGVudHJ5IGZvciBzeW5jIGluCisgICAgZGlzcGF0Y2ggdGFibGUgKHN1cHBseSBOVUxMKS4gIElmIHdlIGRvIG5vdCBoYXZlIGEgc2VjdG9yc2l6ZSwKKyAgICB0cnkgdG8gZ2V0IGl0IGluIHRoZSBzZF9vcGVuIGZ1bmN0aW9uLiAgQWRkIG5ldyBmdW5jdGlvbiBqdXN0IHRvCisgICAgb2J0YWluIHNlY3RvcnNpemUuCisKKyAgICAqIHNyLmg6IEFkZCBuZWVkc19zZWN0b3Jfc2l6ZSBzZW1hcGhvcmUuCisKKyAgICAqIHN0LmM6IEFkZCBOVUxMIGZvciBmc3luYyBpbiBkaXNwYXRjaCB0YWJsZS4KKworICAgICogd2Q3MDAwLmM6IEFsbG93IGFub3RoZXIgY29uZGl0aW9uIGZvciBwb3dlciBvbiB0aGF0IGFyZSBub3JtYWwKKyAgICBhbmQgZG8gbm90IHJlcXVpcmUgYSBwYW5pYy4KKworVGh1IEFwciAyMiAyMzoxMDoxMSAxOTkzCisKKyAgICAqIDAuOTlwbDkgcmVsZWFzZWQuCisKKyAgICAqIGFoYTE1NDIuYzogVXNlICh2b2lkKSBpbnN0ZWFkIG9mICgpIGluIHNldHVwX21haWxib3hlcy4KKworICAgICogc2NzaS5jOiBJbml0aWFsaXplIHRyYW5zZmVyc2l6ZSBhbmQgdW5kZXJmbG93IGZpZWxkcyBpbiBTQ21kIHRvIDAuCisgICAgRG8gbm90IHBhbmljIGZvciB1bnN1cHBvcnRlZCBtZXNzYWdlIGJ5dGVzLgorCisgICAgKiBzY3NpLmg6IEFsbG9jYXRlIDEyIGJ5dGVzIGluc3RlYWQgb2YgMTAgZm9yIGNvbW1hbmRzLiAgQWRkCisgICAgdHJhbnNmZXJzaXplIGFuZCB1bmRlcmZsb3cgZmllbGRzLgorCisgICAgKiBzY3NpX2lvY3RsLmM6IEZ1cnRoZXIgYnVnZml4IHRvIGlvY3RsX3Byb2JlLgorCisgICAgKiBzZC5jOiBVc2UgbG9uZyBpbnN0ZWFkIG9mIGludCBmb3IgbGFzdCBwYXJhbWV0ZXIgaW4gc2RfaW9jdGwuCisgICAgSW5pdGlhbGl6ZSB0cmFuc2ZlcnNpemUgYW5kIHVuZGVyZmxvdyBmaWVsZHMuCisKKyAgICAqIHNkX2lvY3RsLmM6IERpdHRvIGZvciBzZF9pb2N0bCgsLCwsKTsKKworICAgICogc2VhZ2F0ZS5jOiBOZXcgdmVyc2lvbiBmcm9tIERyZXcuICBJbmNsdWRlcyBuZXcgc2lnbmF0dXJlcyBmb3IgRkQKKyAgICBjYXJkcy4gIFN1cHBvcnQgZm9yIDB3cyBqdW1wZXIuIENvcnJlY3RseSBpbml0aWFsaXplCisgICAgc2NzaV9ob3N0c1tob3N0bnVtXS50aGlzX2lkLiAgSW1wcm92ZWQgaGFuZGluZyBvZgorICAgIGRpc2Nvbm5lY3QvcmVjb25uZWN0LCBhbmQgc3VwcG9ydCBjb21tYW5kIGxpbmtpbmcuICBVc2UKKyAgICB0cmFuc2ZlcnNpemUgYW5kIHVuZGVyZmxvdyBmaWVsZHMuICBTdXBwb3J0IHNjYXR0ZXItZ2F0aGVyLgorCisgICAgKiBzci5jLCBzcl9pb2N0bC5jOiBVc2UgbG9uZyBpbnN0ZWFkIG9mIGludCBmb3IgbGFzdCBwYXJhbWV0ZXIgaW4gc3JfaW9jdGwuCisgICAgVXNlIGJ1ZmZlciBhbmQgYnVmbGVuZ3RoIGluIGRvX2lvY3RsLiAgUGF0Y2hlcyBmcm9tIENocmlzIE5ld2JvbGQgZm9yCisgICAgc2NzaS0yIGF1ZGlvIGNvbW1hbmRzLgorCisgICAgKiB1bHRyYXN0b3IuYzogQ29tbWVudCBvdXQgaW5fYnl0ZSAoY29tcGlsZXIgd2FybmluZykuCisKKyAgICAqIHdkNzAwMC5jOiBDaGFuZ2UgKCkgdG8gKHZvaWQpIGluIHdkNzAwMF9lbmFibGVfZG1hLgorCitXZWQgTWFyIDMxIDE2OjM2OjI1IDE5OTMKKworICAgICogMC45OXBsOCByZWxlYXNlZC4KKworICAgICogYWhhMTU0Mi5jOiBIYW5kbGUgbWFpbGJveGVzIGJldHRlciBmb3IgMTU0MkMuCisgICAgICAgIERvIG5vdCB0cnVuY2F0ZSBudW1iZXIgb2YgY3lsaW5kZXJzIGF0IDEwMjQgZm9yIGJpb3NwYXJhbSBjYWxsLgorCisgICAgKiBhaGExNzQwLmM6IEZpeCBhIGZldyBtaW5vciBidWdzIGZvciBtdWx0aXBsZSBkZXZpY2VzLgorICAgICAgICBTYW1lIGFzIGFib3ZlIGZvciBiaW9zcGFyYW0uCisKKyAgICAqIHNjc2kuYzogQWRkIGxvY2thYmxlIHNlbWFwaG9yZSBmb3IgcmVtb3ZhYmxlIGRldmljZXMgdGhhdCBjYW4gaGF2ZQorICAgIG1lZGlhIHJlbW92YWwgcHJldmVudGVkLiAgQWRkIGFub3RoZXIgc2lnbmF0dXJlIGZvciBmbG9wdGljYWxzLgorICAgIChhbGxvY2F0ZV9kZXZpY2UpOiBGaXggcmFjZSBjb25kaXRpb24uICBBbGxvdyBtb3JlIHNwYWNlIGluIGRtYSBwb29sCisgICAgZm9yIGJsb2Nrc2l6ZXMgb2YgdXAgdG8gNEtiLgorCisgICAgKiBzY3NpLmg6IERlZmluZSBDT01NQU5EX1NJWkUuICBEZWZpbmUgYSBTQ1NJIHNwZWNpZmljIHZlcnNpb24gb2YKKyAgICBJTklUX1JFUVVFU1QgdGhhdCBjYW4gcnVuIHdpdGggaW50ZXJydXB0cyBvZmYuCisKKyAgICAqIHNjc2lfaW9jdGwuYzogTWFrZSBpb2N0bF9wcm9iZSBmdW5jdGlvbiBtb3JlIGlkaW90LXByb29mLiAgSWYKKyAgICBhIHJlbW92YWJsZSBkZXZpY2Ugc2F5cyBJTExFR0FMIFJFUVVFU1QgdG8gYSBkb29yLWxvY2tpbmcgY29tbWFuZCwKKyAgICBjbGVhciBsb2NrYWJsZSBmbGFnLiAgQWRkIFNDU0lfSU9DVExfR0VUX0lETFVOIGlvY3RsLiAgRG8gbm90IGF0dGVtcHQKKyAgICB0byBsb2NrIGRvb3IgZm9yIGRldmljZXMgdGhhdCBkbyBub3QgaGF2ZSBsb2NrYWJsZSBzZW1hcGhvcmUgc2V0LgorCisgICAgKiBzZC5jOiBGaXggcmFjZSBjb25kaXRpb24gZm9yIG11bHRpcGxlIGRpc2tzLiAgVXNlIElOSVRfU0NTSV9SRVFVRVNUCisgICAgaW5zdGVhZCBvZiBJTklUX1JFUVVFU1QuICBBbGxvdyBzZWN0b3Igc2l6ZXMgb2YgMTAyNCBhbmQgMjU2LiAgRm9yCisgICAgcmVtb3ZhYmxlIGRpc2tzIHRoYXQgYXJlIG5vdCByZWFkeSwgbWFyayB0aGVtIGFzIGhhdmluZyBhIG1lZGlhIGNoYW5nZQorICAgIChzb21lIGRyaXZlcyBkbyBub3QgcmVwb3J0IHRoaXMgbGF0ZXIpLgorCisgICAgKiBzZWFnYXRlLmM6IFVzZSB2b2xhdGlsZSBrZXl3b3JkIGZvciBtZW1vcnktbWFwcGVkIHJlZ2lzdGVyIHBvaW50ZXJzLgorCisgICAgKiBzci5jOiBGaXggcmFjZSBjb25kaXRpb24sIGEgbGEgc2QuYy4gIEluY3JlYXNlIHRoZSBudW1iZXIgb2YgcmV0cmllcworICAgIHRvIDEuICBVc2UgSU5JVF9TQ1NJX1JFUVVFU1QuICBBbGxvdyA1MTIgYnl0ZSBzZWN0b3Igc2l6ZXMuICBEbyBhCisgICAgcmVhZF9jYXBhY2l0eSB3aGVuIHdlIGluaXQgdGhlIGRldmljZSBzbyB3ZSBrbm93IHRoZSBzaXplIGFuZAorICAgIHNlY3RvcnNpemUuCisKKyAgICAqIHN0LmM6IElmIGlvY3RsIG5vdCBmb3VuZCBpbiBzdC5jLCB0cnkgc2NzaV9pb2N0bCBmb3Igb3RoZXJzLgorCisgICAgKiB1bHRyYXN0b3IuYzogRG8gbm90IHRydW5jYXRlIG51bWJlciBvZiBjeWxpbmRlcnMgYXQgMTAyNCBmb3IKKyAgICBiaW9zcGFyYW0gY2FsbC4KKworICAgICogd2Q3MDAwLmM6IERpdHRvLgorICAgIFRocm91Z2hvdXQ6IFVzZSBDT01NQU5EX1NJWkUgbWFjcm8gdG8gZGV0ZXJtaW5lIGxlbmd0aCBvZiBzY3NpCisgICAgY29tbWFuZC4KKworCisKK1NhdCBNYXIgMTMgMTc6MzE6MjkgMTk5MworCisgICAgKiAwLjk5cGw3IHJlbGVhc2VkLgorCisgICAgVGhyb3VnaG91dDogSW1wcm92ZSBwdW5jdHVhdGlvbiBpbiBzb21lIG1lc3NhZ2VzLCBhbmQgdXNlIG5ldworICAgIHZlcmlmeV9hcmVhIHN5bnRheC4KKworICAgICogYWhhMTU0Mi5jOiBIYW5kbGUgdW5leHBlY3RlZCBpbnRlcnJ1cHRzIGJldHRlci4KKworICAgICogc2NzaS5jOiBEaXR0by4gIEhhbmRsZSByZXNldCBjb25kaXRpb25zIGEgYml0IGJldHRlciwgYXNraW5nIGZvcgorICAgIHNlbnNlIGluZm9ybWF0aW9uIGFuZCByZXRyeWluZyBpZiByZXF1aXJlZC4KKworICAgICogc2NzaV9pb2N0bC5jOiBBbGxvdyBmb3IgMTIgYnl0ZSBzY3NpIGNvbW1hbmRzLgorCisgICAgKiB1bHRyYXN0b3IuYzogVXBkYXRlIHRvIHVzZSBzY2F0dGVyLWdhdGhlci4KKworU2F0IEZlYiAyMCAxNzo1NzoxNSAxOTkzCisKKyAgICAqIDAuOTlwbDYgcmVsZWFzZWQuCisKKyAgICAqIGZkb21haW4uYzogVXBkYXRlIHRvIHZlcnNpb24gMy41LiAgSGFuZGxlIHNwdXJpb3VzIGludGVycnVwdHMKKyAgICBiZXR0ZXIuCisKKyAgICAqIHNkLmM6IFVzZSByZWdpc3Rlcl9ibGtkZXYgZnVuY3Rpb24uCisKKyAgICAqIHNyLmM6IERpdHRvLgorCisgICAgKiBzdC5jOiBVc2UgcmVnaXN0ZXJfY2hyZGV2IGZ1bmN0aW9uLgorCisgICAgKiB3ZDcwMDAuYzogVW5kbyBwcmV2aW91cyBjaGFuZ2UuCisKK1NhdCBGZWIgIDYgMTE6MjA6NDMgMTk5MworCisgICAgKiAwLjk5cGw1IHJlbGVhc2VkLgorCisgICAgKiBzY3NpLmM6IEZpeCBidWcgaW4gdGVzdGluZyBmb3IgVU5JVF9BVFRFTlRJT04uCisKKyAgICAqIHdkNzAwMC5jOiBDaGVjayBhdCBtb3JlIGFkZHJlc3NlcyBmb3IgYmlvcy4gIEZpeCBidWcgaW4gYmlvc3BhcmFtCisgICAgKGhlYWRzICYgc2VjdG9ycyB0dXJuZWQgYXJvdW5kKS4KKworV2VkIEphbiAyMCAxODoxMzo1OSAxOTkzCisKKyAgICAqIDAuOTlwbDQgcmVsZWFzZWQuCisKKyAgICAqIHNjc2kuYzogSWdub3JlIGxlYWRpbmcgc3BhY2VzIHdoZW4gbG9va2luZyBmb3IgYmxhY2tsaXN0ZWQgZGV2aWNlcy4KKworICAgICogc2VhZ2F0ZS5jOiBBZGQgYSBmZXcgbmV3IHNpZ25hdHVyZXMgZm9yIEZEIGNhcmRzLiAgQW5vdGhlciBwYXRjaAorICAgIHdpdGggU0NpbnQgdG8gZml4IHJhY2UgY29uZGl0aW9uLiAgVXNlIHJlY3Vyc2lvbl9kZXB0aCB0byBrZWVwIHRyYWNrCisgICAgb2YgaG93IG1hbnkgdGltZXMgd2UgaGF2ZSBiZWVuIHJlY3Vyc2l2ZWx5IGNhbGxlZCwgYW5kIGRvIG5vdCBzdGFydAorICAgIGFub3RoZXIgY29tbWFuZCB1bmxlc3Mgd2UgYXJlIG9uIHRoZSBvdXRlciBsZXZlbC4gIEZpeGVzIGJ1ZworICAgIHdpdGggU3lxdWVzdCBjYXJ0cmlkZ2UgZHJpdmVzICh1c2VkIHRvIGNyYXNoIGtlcm5lbCksIGJlY2F1c2UKKyAgICB0aGV5IGRvIG5vdCBkaXNjb25uZWN0IHdpdGggbGFyZ2UgZGF0YSB0cmFuc2ZlcnMuCisKK1R1ZSBKYW4gMTIgMTQ6MzM6MzYgMTk5MworCisgICAgKiAwLjk5cGwzIHJlbGVhc2VkLgorCisgICAgKiBmZG9tYWluLmM6IFVwZGF0ZSB0byB2ZXJzaW9uIDMuMyAoYSBmZXcgbmV3IHNpZ25hdHVyZXMpLgorCisgICAgKiBzY3NpLmM6IEFkZCBDRFUtNTQxLCBEZW5vbiBEUkQtMjVYIHRvIGJsYWNrbGlzdC4KKyAgICAoYWxsb2NhdGVfcmVxdWVzdCwgcmVxdWVzdF9xdWV1ZWFibGUpOiBJbml0IHJlcXVlc3Qud2FpdGluZyB0byBOVUxMIGlmCisgICAgbm9uLWJ1ZmZlciB0eXBlIG9mIHJlcXVlc3QuCisKKyAgICAqIHNlYWdhdGUuYzogIEFsbG93IGNvbnRyb2xsZXIgdG8gYmUgb3ZlcnJpZGRlbiB3aXRoIENPTlRST0xMRVIgc3ltYm9sLgorICAgIFNldCBTQ2ludD1OVUxMIHdoZW4gd2UgYXJlIGRvbmUsIHRvIHJlbW92ZSByYWNlIGNvbmRpdGlvbi4KKworICAgICogc3QuYzogQ2hhbmdlcyBmcm9tIEthaS4KKworV2VkIERlYyAzMCAyMDowMzo0NyAxOTkyCisKKyAgICAqIDAuOTlwbDIgcmVsZWFzZWQuCisKKyAgICAqIHNjc2kuYzogQmxhY2tsaXN0IGJhY2sgaW4uICBSZW1vdmUgTmV3YnVyeSBkcml2ZSBhcyBvdGhlciBidWdmaXgKKyAgICBlbGltaW5hdGVzIG5lZWQgZm9yIGl0IGhlcmUuCisKKyAgICAqIHNkLmM6IFJldHVybiBFTk9ERVYgaW5zdGVhZCBvZiBFQUNDRVMgaWYgbm8gc3VjaCBkZXZpY2UgYXZhaWxhYmxlLgorICAgIChzZF9pbml0KSBJbml0IGJsa2Rldl9mb3BzIGVhcmxpZXIgc28gdGhhdCBzZF9vcGVuIGlzIGF2YWlsYWJsZSBzb29uZXIuCisKKyAgICAqIHNyLmM6IFNhbWUgYXMgYWJvdmUgZm9yIHNkLmMuCisKKyAgICAqIHN0LmM6IFJldHVybiBFTk9ERVYgaW5zdGVhZCBvZiBFTlhJTyBpZiBubyBkZXZpY2UuICBJbml0IGNocmRldl9mb3BzCisgICAgc29vbmVyLCBzbyB0aGF0IGl0IGlzIGFsd2F5cyB0aGVyZSBldmVuIGlmIG5vIHRhcGVzLgorCisgICAgKiBzZWFnYXRlLmMgKGNvbnRyb2xsZXJfdHlwZSk6IE5ldyB2YXJpYWJsZSB0byBrZWVwIHRyYWNrIG9mIFNUMHggb3IKKyAgICBGRC4gIE1vZGlmeSBzaWduYXR1cmVzIGxpc3QgdG8gaW5kaWNhdGUgY29udHJvbGxlciB0eXBlLCBhbmQgaW5pdAorICAgIGNvbnRyb2xsZXJfdHlwZSBvbmNlIHdlIGZpbmQgYSBtYXRjaC4KKworICAgICogd2Q3MDAwLmMgKHdkNzAwMF9zZXRfc3luYyk6IFJlbW92ZSByZWR1bmRhbnQgZnVuY3Rpb24uCisKK1N1biBEZWMgMjAgMTY6MjY6MjQgMTk5MgorCisgICAgKiAwLjk5cGwxIHJlbGVhc2VkLgorCisgICAgKiBzY3NpX2lvY3RsLmM6IEJ1Z2ZpeCAtIGNoZWNrIGRldi0+aW5kZXgsIG5vdCBkZXYtPmlkIGFnYWluc3QKKyAgICBOUl9TQ1NJX0RFVklDRVMuCisKKyAgICAqIHNyX2lvY3RsLmM6IFZlcmlmeSB0aGF0IGRldmljZSBleGlzdHMgYmVmb3JlIGFsbG93aW5nIGFuIGlvY3RsLgorCisgICAgKiBzdC5jOiBQYXRjaGVzIGZyb20gS2FpIC0gY2hhbmdlIHRpbWVvdXQgdmFsdWVzLCBpbXByb3ZlIGVuZCBvZiB0YXBlCisgICAgaGFuZGxpbmcuCisKK1N1biBEZWMgMTMgMTg6MTU6MjMgMTk5MgorCisgICAgKiAwLjk5IGtlcm5lbCByZWxlYXNlZC4gIEJhc2VsaW5lIGZvciB0aGlzIENoYW5nZUxvZy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cuaXBzIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5pcHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAxOWY1MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cuaXBzCkBAIC0wLDAgKzEsMTIyIEBACitJQk0gU2VydmVSQUlEIGRyaXZlciBDaGFuZ2UgTG9nCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKyAgICAgICAgNS4wMC4wMSAgLSBTYXJhc290YSAoIDVpICkgYWRhcHRlcnMgbXVzdCBhbHdheXMgYmUgc2Nhbm5lZCBmaXJzdCAgCisgICAgICAgICAgICAgICAgIC0gR2V0IHJpZCBvbiBJT0NUTF9ORVdfQ09NTUFORCBjb2RlICAKKyAgICAgICAgICAgICAgICAgLSBBZGQgRXh0ZW5kZWQgRENEQiBDb21tYW5kcyBmb3IgVGFwZSBTdXBwb3J0IGluIDVJICAgICAgICAgICAgICAgICAgCisgICAgICAgIAorICAgICAgICA0LjkwLjExICAtIERvbid0IGFjdHVhbGx5IFJFU0VUIHVubGVzcyBpdCdzIHBoeXNpY2FsbHkgcmVxdWlyZWQKKyAgICAgICAgICAgICAgICAgLSBSZW1vdmUgdW51c2VkIGNvbXBpbGUgb3B0aW9ucworICAgICAgICAKKyAgICAgICAgNC45MC4wOCAgLSBEYXRhIENvcnJ1cHRpb24gaWYgRmlyc3QgU2NhdHRlciBHYXRoZXIgRWxlbWVudCBpcyA+IDY0SworICAgICAgICAKKyAgICAgICAgNC45MC4wOCAgLSBJbmNyZWFzZSBEZWxheXMgaW4gRmxhc2hpbmcgKCBUcm9tYm9uZSBPbmx5IC0gNEggKSAgICAgICAgCisgICAgICAgIAorICAgICAgICA0LjkwLjA1ICAtIFVzZSBOZXcgUENJIEFyY2hpdGVjdHVyZSB0byBmYWNpbGl0YXRlIEhvdCBQbHVnIERldmVsb3BtZW50CisgICAgICAgIAorICAgICAgICA0LjkwLjAxICAtIEFkZCBTZXJ2ZVJBSUQgVmVyc2lvbiBDaGVja2luZworCisgICAgICAgIDQuODAuMjYgIC0gQ2xlYW4gdXAgcG90ZW50aWFsIGNvZGUgcHJvYmxlbXMgKCBBcmphbidzIHJlY29tbWVuZGF0aW9ucyApCisgICAgICAgIAorICAgICAgICA0LjgwLjIxICAtIENoYW5nZSBtZW1jcHkoKSB0byBjb3B5X3RvX3VzZXIoKSBpbiBOVlJBTSBQYWdlIDUgSU9DVEwgcGF0aCAgIAorICAgICAgICAKKyAgICAgICAgNC44MC4yMCAgLSBTZXQgbWF4X3NlY3RvcnMgaW4gU2NzaV9Ib3N0IHN0cnVjdHVyZSAoIGlmID49IDIuNC43IGtlcm5lbCApCisgICAgICAgICAgICAgICAgIC0gNSBzZWNvbmQgZGVsYXkgbmVlZGVkIGFmdGVyIHJlc2V0dGluZyBhbiBpOTYwIGFkYXB0ZXIKKyAgICAgICAgCisgICAgICAgIDQuODAuMTQgIC0gVGFrZSBhbGwgc2VtYXBob3JlcyBvZmYgc3RhY2sgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAtIENsZWFuIFVwIE5ld19JT0NUTCBwYXRoCisgICAgICAgICAgICAgICAgICAgCisgICAgICAgIDQuODAuMDQgIC0gRWxpbWluYXRlIGNhbGxzIHRvIHN0cnRvaygpIGlmIDIuNC54IG9yIGdyZWF0ZXIgCisgICAgICAgICAgICAgICAgIC0gQWRqdXN0bWVudHMgdG8gRGV2aWNlIFF1ZXVlIERlcHRoICAgICAgICAgICAgICAgCisKKyAgICAgICAgNC44MC4wMCAgLSBNYWtlIGlhNjQgU2FmZSAgICAKKyAgICAgICAgCisgICAgICAgIDQuNzIuMDEgIC0gSS9PIE1hcHBlZCBNZW1vcnkgcmVsZWFzZSAoIHNvICJpbnNtb2QgaXBzIiBkb2VzIG5vdCBGYWlsICkgICAgCisgICAgICAgICAgICAgICAgIC0gRG9uJ3QgSXNzdWUgSW50ZXJuYWwgRkZEQyBDb21tYW5kIGlmIHRoZXJlIGFyZSBBY3RpdmUgQ29tbWFuZHMgCisgICAgICAgICAgICAgICAgIC0gQ2xvc2UgV2luZG93IGZvciBnZXR0aW5nIHRvbyBtYW55IElPQ1RMJ3MgYWN0aXZlIAorICAgICAgICAgICAgICAgICAgIAorICAgICAgICA0LjcyLjAwICAtIEFsbG93IGZvciBhIFNjYXR0ZXItR2F0aGVyIEVsZW1lbnQgdG8gZXhjZWVkIE1BWF9YRkVSIFNpemUgICAgIAorICAgICAgICAKKyAgICAgICAgNC43MS4wMCAgLSBDaGFuZ2UgYWxsIG1lbW9yeSBhbGxvY2F0aW9ucyB0byBub3QgdXNlIEdGUF9ETUEgZmxhZyAKKyAgICAgICAgICAgICAgICAgLSBDb2RlIENsZWFuLVVwIGZvciAyLjQueCBrZXJuZWwgICAgICAKKyAgICAgICAgCisgICAgICAgIDQuNzAuMTUgIC0gRml4IEJyZWFrdXAgZm9yIHZlcnkgbGFyZ2UgKCBub24tU0cgKSByZXF1ZXN0cworICAgICAgICAKKyAgICAgICAgNC43MC4xMyAgLSBEb24ndCByZWxlYXNlIEhBIExvY2sgaW4gaXBzX25leHQoKSB1bnRpbCBTQyB0YWtlbiBvZmYgcXVldWUgIAorICAgICAgICAgICAgICAgICAtIFVucmVnaXN0ZXIgU0NTSSBkZXZpY2UgaW4gaXBzX3JlbGVhc2UoKSAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAtIERvbid0IFNlbmQgQ0RCJ3MgaWYgd2UgYWxyZWFkeSBrbm93IHRoZSBkZXZpY2UgaXMgbm90IHByZXNlbnQgIAorICAgICAgICAgICAgICAgICAKKyAgICAgICAgNC43MC4xMiAgLSBDb3JyZWN0aXZlIGFjdGlvbnMgZm9yIGJhZCBjb250cm9sbGVyICggZHVyaW5nIGluaXRpYWxpemF0aW9uICkKKyAgICAgICAgCisgICAgICAgIDQuNzAuMDkgIC0gVXNlIGEgQ29tbW9uICggTGFyZ2UgQnVmZmVyICkgZm9yIEZsYXNoaW5nIGZyb20gdGhlIEpDUk0gQ0QgICAgCisgICAgICAgICAgICAgICAgIC0gQWRkIElQU1NFTkQgRmxhc2ggU3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgIC0gU2V0IFNlbnNlIERhdGEgZm9yIFVua25vd24gU0NTSSBDb21tYW5kICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgIC0gVXNlIFNsb3QgTnVtYmVyIGZyb20gTlZSQU0gUGFnZSA1IAorICAgICAgICAgICAgICAgICAtIFJlc3RvcmUgY2FsbGVyJ3MgRENEQiBTdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICA0LjIwLjE0ICAtIFVwZGF0ZSBwYXRjaCBmaWxlcyBmb3Iga2VybmVsIDIuNC4wLXRlc3Q1CisKKyAgICAgICAgNC4yMC4xMyAgLSBGaXggc29tZSBmYWlsdXJlIGNhc2VzIC8gcmVzZXQgY29kZQorICAgICAgICAgICAgICAgICAtIEhvb2sgaW50byB0aGUgcmVib290X25vdGlmaWVyIHRvIGZsdXNoIHRoZSBjb250cm9sbGVyCisgICAgICAgICAgICAgICAgICAgY2FjaGUKKworICAgICAgICA0LjIwLjAzIC0gUmVuYW1lIHZlcnNpb24gdG8gY29pbmNpZGUgd2l0aCBuZXcgcmVsZWFzZSBzY2hlZHVsZXMKKyAgICAgICAgICAgICAgICAtIFBlcmZvcm1hbmNlIGZpeGVzCisgICAgICAgICAgICAgICAgLSBGaXggdHJ1bmNhdGlvbiBvZiAvcHJvYyBmaWxlcyB3aXRoIGNhdAorICAgICAgICAgICAgICAgIC0gTWVyZ2UgaW4gY2hhbmdlcyB0aHJvdWdoIGtlcm5lbCAyLjQuMHRlc3QxYWMyMQorCisgICAgICAgIDQuMTAuMTMgLSBGaXggZm9yIGR5bmFtaWMgdW5sb2FkIGFuZCBwcm9jIGZpbGUgc3lzdGVtCisKKyAgICAgICAgNC4xMC4wMCAtIEFkZCBzdXBwb3J0IGZvciBTZXJ2ZVJBSUQgNE0vNEwKKworICAgICAgICA0LjAwLjA2IC0gRml4IHRpbWVvdXQgd2l0aCBpbml0aWFsIEZGREMgY29tbWFuZAorCisgICAgICAgIDQuMDAuMDUgLSBSZW1vdmUgd2lzaF9ibG9jayBmcm9tIGluaXQgcm91dGluZQorICAgICAgICAgICAgICAgIC0gVXNlIGxpbnV4L3NwaW5sb2NrLmggaW5zdGVhZCBvZiBhc20vc3BpbmxvY2suaCBmb3Iga2VybmVscworICAgICAgICAgICAgICAgICAgMi4zLjE4IGFuZCBsYXRlcgorICAgICAgICAgICAgICAgIC0gU3luYyB3aXRoIG90aGVyIGNoYW5nZXMgZnJvbSB0aGUgMi4zIGtlcm5lbHMKKworICAgICAgICA0LjAwLjA0IC0gUmVuYW1lIHN0cnVjdHVyZXMvY29uc3RhbnRzIHRvIGJlIHByZWZpeGVkIHdpdGggSVBTXworCisgICAgICAgIDQuMDAuMDMgLSBBZGQgYWx0ZXJuYXRpdmUgcGFzc3RocnUgaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgLSBBZGQgYWJpbGl0eSB0byBmbGFzaCBTZXJ2ZVJBSUQgQklPUworCisgICAgICAgIDQuMDAuMDIgLSBGaXggcHJvYmxlbSB3aXRoIFBUIERDREIgd2l0aCBubyBidWZmZXIKKworICAgICAgICA0LjAwLjAxIC0gQWRkIHN1cHBvcnQgZm9yIEZpcnN0IEZhaWx1cmUgRGF0YSBDYXB0dXJlCisKKyAgICAgICAgNC4wMC4wMCAtIEFkZCBzdXBwb3J0IGZvciBTZXJ2ZVJBSUQgNAorCisgICAgICAgIDMuNjAuMDIgLSBNYWtlIERDREIgZGlyZWN0aW9uIGJhc2VkIG9uIGxvb2t1cCB0YWJsZS4KKyAgICAgICAgICAgICAgICAtIE9ubHkgYWxsb3cgb25lIERDREIgY29tbWFuZCB0byBhIFNDU0kgSUQgYXQgYSB0aW1lLgorCisgICAgICAgIDMuNjAuMDEgLSBSZW1vdmUgYm9ndXMgZXJyb3IgY2hlY2sgaW4gcGFzc3RocnUgcm91dGluZS4KKworICAgICAgICAzLjYwLjAwIC0gQnVtcCBtYXggY29tbWFuZHMgdG8gMTI4IGZvciB1c2Ugd2l0aCBTZXJ2ZVJBSUQKKyAgICAgICAgICAgICAgICAgIGZpcm13YXJlIDMuNjAuCisgICAgICAgICAgICAgICAgLSBDaGFuZ2UgdmVyc2lvbiB0byAzLjYwIHRvIGNvaW5jaWRlIHdpdGggU2VydmVSQUlEIHJlbGVhc2UKKyAgICAgICAgICAgICAgICAgIG51bWJlcmluZy4KKworICAgICAgICAxLjAwLjAwIC0gSW5pdGlhbCBQdWJsaWMgUmVsZWFzZQorICAgICAgICAgICAgICAgIC0gRnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gMC45OS4wNQorCisgICAgICAgIDAuOTkuMDUgLSBGaXggYW4gb29wcyBvbiBjZXJ0YWluIHBhc3N0aHJ1IGNvbW1hbmRzCisKKyAgICAgICAgMC45OS4wNCAtIEZpeCByYWNlIGNvbmRpdGlvbiBpbiB0aGUgcGFzc3RocnUgbWVjaGFuaXNtCisgICAgICAgICAgICAgICAgICAtLSB0aGlzIHJlcXVpcmVkIHRoZSBpbnRlcmZhY2UgdG8gdGhlIHV0aWxpdGllcyB0byBjaGFuZ2UKKyAgICAgICAgICAgICAgICAtIEZpeCBlcnJvciByZWNvdmVyeSBjb2RlCisKKyAgICAgICAgMC45OS4wMyAtIE1ha2UgaW50ZXJydXB0IHJvdXRpbmUgaGFuZGxlIGFsbCBjb21wbGV0ZWQgcmVxdWVzdCBvbiB0aGUKKyAgICAgICAgICAgICAgICAgIGFkYXB0ZXIgbm90IGp1c3QgdGhlIGZpcnN0IG9uZQorICAgICAgICAgICAgICAgIC0gTWFrZSBzdXJlIHBhc3N0aHJ1IGNvbW1hbmRzIGdldCB3b2tlbiB1cCBpZiB3ZSBydW4gb3V0IG9mCisgICAgICAgICAgICAgICAgICBTQ0JzCisgICAgICAgICAgICAgICAgLSBTZW5kIGFsbCBvZiB0aGUgY29tbWFuZHMgb24gdGhlIHF1ZXVlIGF0IG9uY2UgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgICAgICAgIG9uZSBhdCBhIHRpbWUgc2luY2UgdGhlIGNhcmQgd2lsbCBzdXBwb3J0IGl0LgorCisgICAgICAgIDAuOTkuMDIgLSBBZGRlZCBzb21lIGFkZGl0aW9uYWwgZGVidWcgc3RhdGVtZW50cyB0byBwcmludCBvdXQKKyAgICAgICAgICAgICAgICAgIGVycm9ycyBpZiBhbiBlcnJvciBvY2N1cnMgd2hpbGUgdHJ5aW5nIHRvIHJlYWQvd3JpdGUKKyAgICAgICAgICAgICAgICAgIHRvIGEgbG9naWNhbCBkcml2ZSAoSVBTX0RFQlVHKS4KKworICAgICAgICAgICAgICAgIC0gRml4ZWQgcmVhZC93cml0ZSBlcnJvcnMgd2hlbiB0aGUgYWRhcHRlciBpcyB1c2luZyBhbgorICAgICAgICAgICAgICAgICAgOEsgc3RyaXBlIHNpemUuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubWVnYXJhaWQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MzU2YzYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkCkBAIC0wLDAgKzEsMzQ5IEBACitSZWxlYXNlIERhdGUJOiBUaHUgRmViIDAzIDEyOjI3OjIyIEVTVCAyMDA1IC0gU2Vva21hbm4gSnUgPHNqdUBsc2lsLmNvbT4KK0N1cnJlbnQgVmVyc2lvbgk6IDIuMjAuNC41IChzY3NpIG1vZHVsZSksIDIuMjAuMi41IChjbW0gbW9kdWxlKQorT2xkZXIgVmVyc2lvbgk6IDIuMjAuNC40IChzY3NpIG1vZHVsZSksIDIuMjAuMi40IChjbW0gbW9kdWxlKQorCisxLglNb2RpZmllZCBuYW1lIG9mIHR3byBhdHRyaWJ1dGVzIGluIHNjc2lfaG9zdF90ZW1wbGF0ZS4KKwlPbiBXZWQsIDIwMDUtMDItMDIgYXQgMTA6NTYgLTA1MDAsIEp1LCBTZW9rbWFubiB3cm90ZToKKwk+ICsJLnNkZXZfYXR0cnMJCQk9IG1lZ2FyYWlkX2RldmljZV9hdHRycywKKwk+ICsJLnNob3N0X2F0dHJzCQkJPSBtZWdhcmFpZF9jbGFzc19kZXZpY2VfYXR0cnMsCisKKwlUaGVzZSBhcmUsIHBlcmhhcHMsIHNsaWdodGx5IGNvbmZ1c2luZyBuYW1lcy4KKwlUaGUgdGVybXMgZGV2aWNlIGFuZCBjbGFzc19kZXZpY2UgaGF2ZSB3ZWxsIGRlZmluZWQgbWVhbmluZ3MgaW4gdGhlCisJZ2VuZXJpYyBkZXZpY2UgbW9kZWwsIG5laXRoZXIgb2Ygd2hpY2ggaXMgd2hhdCB5b3UgbWVhbiBoZXJlLgorCVdoeSBub3Qgc2ltcGx5IG1lZ2FyYWlkX3NkZXZfYXR0cnMgYW5kIG1lZ2FyYWlkX3Nob3N0X2F0dHJzPworCisJT3RoZXIgdGhhbiB0aGlzLCBpdCBsb29rcyBmaW5lIHRvIG1lIHRvby4KKworUmVsZWFzZSBEYXRlCTogVGh1IEphbiAyNyAwMDowMTowMyBFU1QgMjAwNSAtIEF0dWwgTXVra2VyIDxhdHVsbUBsc2lsLmNvbT4KK0N1cnJlbnQgVmVyc2lvbgk6IDIuMjAuNC40IChzY3NpIG1vZHVsZSksIDIuMjAuMi41IChjbW0gbW9kdWxlKQorT2xkZXIgVmVyc2lvbgk6IDIuMjAuNC4zIChzY3NpIG1vZHVsZSksIDIuMjAuMi40IChjbW0gbW9kdWxlKQorCisxLglCdW1wIHVwIHRoZSB2ZXJzaW9uIG9mIHNjc2kgbW9kdWxlIGR1ZSB0byBpdHMgY29uZmxpY3QuCisKK1JlbGVhc2UgRGF0ZQk6IFRodSBKYW4gMjEgMDA6MDE6MDMgRVNUIDIwMDUgLSBBdHVsIE11a2tlciA8YXR1bG1AbHNpbC5jb20+CitDdXJyZW50IFZlcnNpb24JOiAyLjIwLjQuMyAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuNSAoY21tIG1vZHVsZSkKK09sZGVyIFZlcnNpb24JOiAyLjIwLjQuMiAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuNCAoY21tIG1vZHVsZSkKKworMS4JUmVtb3ZlIGRyaXZlciBpb2N0bCBmb3IgbG9naWNhbCBkcml2ZSB0byBzY3NpIGFkZHJlc3MgdHJhbnNsYXRpb24gYW5kCisJcmVwbGFjZSB3aXRoIHRoZSBzeXNmcyBhdHRyaWJ1dGUuIFRvIHJlbW92ZSBkcml2ZXMgYW5kIGNoYW5nZQorCWNhcGFjaXR5LCBhcHBsaWNhdGlvbiBzaGFsbCBub3cgdXNlIHRoZSBkZXZpY2UgYXR0cmlidXRlIHRvIGdldCB0aGUKKwlsb2dpY2FsIGRyaXZlIG51bWJlciBmb3IgYSBzY3NpIGRldmljZS4gRm9yIGFkZGluZyBuZXdseSBjcmVhdGVkCisJbG9naWNhbCBkcml2ZXMsIGNsYXNzIGRldmljZSBhdHRyaWJ1dGUgd291bGQgYmUgcmVxdWlyZWQgdG8gdW5pcXVlbHkKKwlpZGVudGlmeSBlYWNoIGNvbnRyb2xsZXIuCisJCS0gQXR1bCBNdWtrZXIgPGF0dWxtQGxzaWwuY29tPgorCisJIkphbWVzLCBJJ3ZlIGJlZW4gdGhpbmtpbmcgYWJvdXQgdGhpcyBhIGxpdHRsZSBtb3JlLCBhbmQgeW91IG1heSBiZSBvbgorCXRvIHNvbWV0aGluZyBoZXJlLiBMZXQgZWFjaCBkcml2ZXIgYWRkIGZpbGVzIGFzIHN1Y2g6IgorCisJCS0gTWF0dCBEb21zY2ggPE1hdHRfRG9tc2NoQGRlbGwuY29tPiwgMTIuMTUuMjAwNAorCQkgbGludXgtc2NzaSBtYWlsaW5nIGxpc3QKKworCisJIlRoZW4sIGlmIHlvdSBzaW1wbHkgcHVibGlzaCB5b3VyIExEIG51bWJlciBhcyBhbiBleHRyYSBwYXJhbWV0ZXIgb2YKKwl0aGUgZGV2aWNlLCB5b3UgY2FuIGxvb2sgdGhyb3VnaCAvc3lzIHRvIGZpbmQgaXQuIgorCisJCS0gSmFtZXMgQm90dG9tbGV5IDxKYW1lcy5Cb3R0b21sZXlAU3RlZWxFeWUuY29tPiwgMDEuMDMuMjAwNQorCQkgbGludXgtc2NzaSBtYWlsaW5nIGxpc3QKKworCisJIkkgZG9uJ3Qgc2VlIHdoeSBub3QgLi4uIGl0J3MgeW91ciBkcml2ZXIsIHlvdSBjYW4gcHVibGlzaCB3aGF0ZXZlcgorCWV4dHJhIGluZm9ybWF0aW9uIHlvdSBuZWVkIGFzIHNjc2lfZGV2aWNlIGF0dHJpYnV0ZXM7IHRoYXQgd2FzIG9uZSBvZgorCXRoZSBkZXNpZ25zIG9mIHRoZSBleHRlbnNpYmxlIGF0dHJpYnV0ZSBzeXN0ZW0uIgorCisJCS0gSmFtZXMgQm90dG9tbGV5IDxKYW1lcy5Cb3R0b21sZXlAU3RlZWxFeWUuY29tPiwgMDEuMDYuMjAwNQorCQkgbGludXgtc2NzaSBtYWlsaW5nIGxpc3QKKworMi4JQWRkIEFNSSBtZWdhcmFpZCBzdXBwb3J0IC0gQnJpYW4gS2luZyA8YnJraW5nQGNoYXJ0ZXIubmV0PgorCQlQQ0lfVkVORE9SX0lEX0FNSSwgUENJX0RFVklDRV9JRF9BTUlfTUVHQVJBSUQzLAorCQlQQ0lfVkVORE9SX0lEX0FNSSwgUENJX1NVQlNZU19JRF9QRVJDM19EQywKKworMy4JTWFrZSBzb21lIGNvZGUgc3RhdGljIC0gQWRyaWFuIEJ1bmsgPGJ1bmtAc3R1c3RhLmRlPgorCURhdGU6CU1vbiwgMTUgTm92IDIwMDQgMDM6MTQ6NTcgKzAxMDAKKworCVRoZSBwYXRjaCBiZWxvdyBtYWtlcyBzb21lIG5lZWRsZXNzbHkgZ2xvYmFsIGNvZGUgc3RhdGljLgorCS13YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3E7CisJK3N0YXRpYyB3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3E7CisKKwlTaWduZWQtb2ZmLWJ5OiBBZHJpYW4gQnVuayA8YnVua0BzdHVzdGEuZGU+CisKKzQuCUFkZGVkIE5FQyBST01CIHN1cHBvcnQgLSBORUMgTWVnYVJBSUQgUENJIEV4cHJlc3MgUk9NQiBjb250cm9sbGVyCisJCVBDSV9WRU5ET1JfSURfTFNJX0xPR0lDLCBQQ0lfREVWSUNFX0lEX01FR0FSQUlEX05FQ19ST01CXzJFLAorCQlQQ0lfU1VCU1lTX0lEX05FQywgUENJX1NVQlNZU19JRF9NRUdBUkFJRF9ORUNfUk9NQl8yRSwKKworNS4JRml4ZWQgVGFwZSBkcml2ZSBpc3N1ZSA6IEZvciBhbnkgRGlyZWN0IENEQiBjb21tYW5kIHRvIHBoeXNpY2FsIGRldmljZQorCWluY2x1ZGluZyB0YXBlLCB0aW1lb3V0IHZhbHVlIHNldCBieSBkcml2ZXIgd2FzIDEwIG1pbnV0ZXMuIFdpdGggdGhpcyAKKwl2YWx1ZSwgbW9zdCBvZiBjb21tYW5kIHdpbGwgcmV0dXJuIHdpdGhpbiB0aW1lb3V0LiBIb3dldmVyLCBmb3IgdGhvc2UKKwljb21tYW5kIGxpa2UgRVJBU0Ugb3IgRk9STUFULCBpdCB0YWtlcyBtb3JlIHRoYW4gYW4gaG91ciBkZXBlbmRzIG9uCisJY2FwYWNpdHkgb2YgdGhlIGRldmljZSBhbmQgdGhlIGNvbW1hbmQgY291bGQgYmUgdGVybWluYXRlZCBiZWZvcmUgaXQgCisJY29tcGxldGVzLgorCVRvIGFkZHJlc3MgdGhpcyBpc3N1ZSwgdGhlICd0aW1lb3V0JyBmaWVsZCBpbiB0aGUgRENEQiBjb21tYW5kIHdpbGwgCisJaGF2ZSBOTyBUSU1FT1VUIChpLmUuLCA0KSB2YWx1ZSBhcyBpdHMgdGltZW91dCBvbiBEQ0RCIGNvbW1hbmQuCisKKworCitSZWxlYXNlIERhdGUJOiBUaHUgRGVjICA5IDE5OjEwOjIzIEVTVCAyMDA0CisJLSBTcmVlbml2YXMgQmFnYWxrb3RlIDxzcmVlbmliQGxzaWwuY29tPgorCitDdXJyZW50IFZlcnNpb24JOiAyLjIwLjQuMiAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuNCAoY21tIG1vZHVsZSkKK09sZGVyIFZlcnNpb24JOiAyLjIwLjQuMSAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuMyAoY21tIG1vZHVsZSkKKworaS4JSW50cm9kdWNlZCBkcml2ZXIgaW9jdGwgdGhhdCByZXR1cm5zIHNjc2kgYWRkcmVzcyBmb3IgYSBnaXZlbiBsZC4KKwkKKwkiV2h5IGNhbid0IHRoZSBleGlzdGluZyBzeXNmcyBpbnRlcmZhY2VzIGJlIHVzZWQgdG8gZG8gdGhpcz8iCisJCS0gQnJpYW4gS2luZyAoYnJraW5nQHVzLmlibS5jb20pCisJCisJIkkndmUgbG9va2VkIGludG8gc29sdmluZyB0aGlzIGFub3RoZXIgd2F5LCBidXQgSSBjYW5ub3Qgc2VlIGhvdworCXRvIGdldCB0aGlzIGRyaXZlci1wcml2YXRlIG1hcHBpbmcgb2YgbG9naWNhbCBkcml2ZSBudW1iZXItPiBIQ1RMCisJd2l0aG91dCBwdXR0aW5nIGNvZGUgc29tZXRoaW5nIGxpa2UgdGhpcyBpbnRvIHRoZSBkcml2ZXIuIgorCisJIi4uLmFuZCBieSBwcm92aWRpbmcgYSBtYXBwaW5nIGEgZnVuY3Rpb24gdG8gdXNlcnNwYWNlLCB0aGUgZHJpdmVyCisJaXMgZnJlZSB0byBjaGFuZ2UgaXRzIG1hcHBpbmcgYWxnb3JpdGhtIGluIHRoZSBmdXR1cmUgaWYgbmVjZXNzYXJ5IC4uIgorCQktIE1hdHQgRG9tc2NoIChNYXR0X0RvbXNjaEBkZWxsLmNvbSkKKworUmVsZWFzZSBEYXRlCTogVGh1IERlYyAgOSAxOTowMjoxNCBFU1QgMjAwNCAtIFNyZWVuaXZhcyBCYWdhbGtvdGUgPHNyZWVuaWJAbHNpbC5jb20+CisKK0N1cnJlbnQgVmVyc2lvbgk6IDIuMjAuNC4xIChzY3NpIG1vZHVsZSksIDIuMjAuMi4zIChjbW0gbW9kdWxlKQorT2xkZXIgVmVyc2lvbgk6IDIuMjAuNC4xIChzY3NpIG1vZHVsZSksIDIuMjAuMi4yIChjbW0gbW9kdWxlKQorCitpLglGaXggYSBidWcgaW4ga2lvYydzIGRtYSBidWZmZXIgZGVhbGxvY2F0aW9uCisKK1JlbGVhc2UgRGF0ZQk6IFRodSBOb3YgIDQgMTg6MjQ6NTYgRVNUIDIwMDQgLSBTcmVlbml2YXMgQmFnYWxrb3RlIDxzcmVlbmliQGxzaWwuY29tPgorCitDdXJyZW50IFZlcnNpb24JOiAyLjIwLjQuMSAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuMiAoY21tIG1vZHVsZSkKK09sZGVyIFZlcnNpb24JOiAyLjIwLjQuMCAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuMSAoY21tIG1vZHVsZSkKKworaS4JSGFuZGxlIElPQ1RMIGNtZCB0aW1lb3V0cyBtb3JlIHByb3Blcmx5LgorCitpaS4JcGNpX2RtYV9zeW5jX3tzZyxzaW5nbGV9X2Zvcl9jcHUgd2FzIGludHJvZHVjZWQgaW50byBtZWdhcmFpZF9tYm94CisJaW5jb3JyZWN0bHkgKGluc3RlYWQgb2YgX2Zvcl9kZXZpY2UpLiBDaGFuZ2VkIHRvIGFwcHJvcHJpYXRlIAorCXBjaV9kbWFfc3luY197c2csc2luZ2xlfV9mb3JfZGV2aWNlLgorCitSZWxlYXNlIERhdGUJOiBXZWQgT2N0IDA2IDExOjE1OjI5IEVEVCAyMDA0IC0gU3JlZW5pdmFzIEJhZ2Fsa290ZSA8c3JlZW5pYkBsc2lsLmNvbT4KK0N1cnJlbnQgVmVyc2lvbgk6IDIuMjAuNC4wIChzY3NpIG1vZHVsZSksIDIuMjAuMi4xIChjbW0gbW9kdWxlKQorT2xkZXIgVmVyc2lvbgk6IDIuMjAuNC4wIChzY3NpIG1vZHVsZSksIDIuMjAuMi4wIChjbW0gbW9kdWxlKQorCitpLglSZW1vdmUgQ09ORklHX0NPTVBBVCBhcm91bmQgcmVnaXN0ZXJfaW9jdGwzMl9jb252ZXJzaW9uCisKK1JlbGVhc2UgRGF0ZQk6IE1vbiBTZXAgMjcgMjI6MTU6MDcgRURUIDIwMDQgLSBBdHVsIE11a2tlciA8YXR1bG1AbHNpbC5jb20+CitDdXJyZW50IFZlcnNpb24JOiAyLjIwLjQuMCAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuMCAoY21tIG1vZHVsZSkKK09sZGVyIFZlcnNpb24JOiAyLjIwLjMuMSAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuMCAoY21tIG1vZHVsZSkKKworaS4JRml4IGRhdGEgY29ycnVwdGlvbi4gQmVjYXVzZSBvZiBhIHR5cG8gaW4gdGhlIGRyaXZlciwgdGhlIElPIHBhY2tldHMKKwl3ZXJlIHdyb25nbHkgc2hhcmVkIGJ5IHRoZSBpb2N0bCBwYXRoLiBUaGlzIGNhdXNlcyBhIHdob2xlIElPIGNvbW1hbmQKKwl0byBiZSByZXBsYWNlZCBieSBhbiBpbmNvbWluZyBpb2N0bCBjb21tYW5kLgorCitSZWxlYXNlIERhdGUJOiBUdWUgQXVnIDI0IDA5OjQzOjM1IEVEVCAyMDA0IC0gQXR1bCBNdWtrZXIgPGF0dWxtQGxzaWwuY29tPgorQ3VycmVudCBWZXJzaW9uCTogMi4yMC4zLjEgKHNjc2kgbW9kdWxlKSwgMi4yMC4yLjAgKGNtbSBtb2R1bGUpCitPbGRlciBWZXJzaW9uCTogMi4yMC4zLjAgKHNjc2kgbW9kdWxlKSwgMi4yMC4yLjAgKGNtbSBtb2R1bGUpCisKK2kuCUZ1bmN0aW9uIHJlb3JkZXJpbmcgc28gdGhhdCBpbmxpbmUgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGJlZm9yZSB0aGV5CisJYXJlIGFjdHVhbGx5IHVzZWQuIEl0IGlzIG5vdyBtYW5kYXRvcnkgZm9yIEdDQyAzLjQuMSAoY3VycmVudCBzdGFibGUpCisKKwlEZWNsYXJlIHNvbWUgaGVhdnktd2VpZ2h0IGZ1bmN0aW9ucyB0byBiZSBub24taW5saW5lZCwKKwltZWdhcmFpZF9tYm94X2J1aWxkX2NtZCwgbWVnYXJhaWRfbWJveF9ydW5wZW5kcSwKKwltZWdhcmFpZF9tYm94X3ByZXBhcmVfcHRocnUsIG1lZ2FyYWlkX21ib3hfcHJlcGFyZV9lcHRocnUsCisJbWVnYXJhaWRfYnVzeXdhaXRfbWJveAorCisJCS0gQW5kcmV3IE1vcnRvbiA8YWtwbUBvc2RsLm9yZz4sIDA4LjE5LjIwMDQKKwkJbGludXgtc2NzaSBtYWlsaW5nIGxpc3QKKworCSJTb21ldGhpbmcgZWxzZSB0byBjbGVhbiB1cCBhZnRlciBpbmNsdXNpb246IGV2ZXJ5IGluc3RhbmNlIG9mIGFuCisJaW5saW5lIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IHJlbmRlcmVkIGFzIGEgZnVsbCBmdW5jdGlvbiBjYWxsLCBiZWNhdXNlCisJdGhlIGZ1bmN0aW9uIGlzIGFsd2F5cyB1c2VkIGJlZm9yZSBpdCBpcyBkZWZpbmVkLiAgQXR1bCwgcGxlYXNlCisJcmUtYXJyYW5nZSB0aGUgY29kZSB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIG1vc3QgKGFsbCkgb2YgdGhlCisJZnVuY3Rpb24gcHJvdG90eXBlcyBhdCB0aGUgdG9wIG9mIGVhY2ggZmlsZSwgYW5kIGRlZmluZSAobm90IGp1c3QKKwlkZWNsYXJlIHdpdGggYSBwcm90b3R5cGUpIGVhY2ggaW5saW5lIGZ1bmN0aW9uIGJlZm9yZSBpdHMgZmlyc3QgdXNlIgorCisJCS0gTWF0dCBEb21zY2ggPE1hdHRfRG9tc2NoQGRlbGwuY29tPiwgMDcuMjcuMjAwNAorCQlsaW51eC1zY3NpIG1haWxpbmcgbGlzdAorCisKK2lpLglEaXNwbGF5IGVsYXBzZWQgdGltZSAoY291bnRkb3duKSB3aGlsZSB3YWl0aW5nIGZvciBGVyB0byBib290LgorCitpaWkuCU1vZHVsZSBjb21waWxhdGlvbiByZW9yZGVyIGluIE1ha2VmaWxlIHNvIHRoYXQgdW5yZXNvbHZlZCBzeW1ib2xzIGRvCisJbm90IG9jY3VyIHdoZW4gZHJpdmVyIGlzIGNvbXBpbGVkIG5vbi1tb2R1bGFyLgorCisJCVBhdHJpY2sgSi4gTG9QcmVzdGkgPHBhdGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PiwgOC4yMi4yMDA0CisJCWxpbnV4LXNjc2kgbWFpbGluZyBsaXN0CisKKworUmVsZWFzZSBEYXRlCTogVGh1IEF1ZyAxOSAwOTo1ODozMyBFRFQgMjAwNCAtIEF0dWwgTXVra2VyIDxhdHVsbUBsc2lsLmNvbT4KK0N1cnJlbnQgVmVyc2lvbgk6IDIuMjAuMy4wIChzY3NpIG1vZHVsZSksIDIuMjAuMi4wIChjbW0gbW9kdWxlKQorT2xkZXIgVmVyc2lvbgk6IDIuMjAuMi4wIChzY3NpIG1vZHVsZSksIDIuMjAuMS4wIChjbW0gbW9kdWxlKQorCitpLglXaGVuIGNvcHlpbmcgdGhlIG1haWxib3ggcGFja2V0cywgY29weSBvbmx5IGZpcnN0IDE0IGJ5dGVzIChmb3IgMzItYml0CisJbWFpbGJveGVzKSBhbmQgb25seSBmaXJzdCAyMiBieXRlcyAoZm9yIDY0LWJpdCBtYWlsYm94ZXMpLiBUaGlzIGlzIHRvCisJYXZvaWQgZ2V0dGluZyB0aGUgc3RhbGUgdmFsdWVzIGZvciBidXN5IGJpdC4gV2Ugd2FudCB0byBzZXQgdGhlIGJ1c3kKKwliaXQganVzdCBiZWZvcmUgaXNzdWluZyBjb21tYW5kIHRvIHRoZSBGVy4KKworaWkuCUluIHRoZSByZXNldCBoYW5kbGluZywgaWYgdGhlIHJlc2V0ZWQgY29tbWFuZCBpcyBub3Qgb3duZWQgYnkgdGhlCisJZHJpdmVyLCBkbyBub3QgKHdyb25nbHkpIHByaW50IGluZm9ybWF0aW9uIGZvciB0aGUgImF0dGFjaGVkIiBkcml2ZXIKKwlwYWNrZXQuCisKK2lpaS4JSGF2ZSBleHRlbmRlZCB3YWl0IHdoZW4gaXNzdWluZyBjb21tYW5kIGluIHN5bmNocm9ub3VzIG1vZGUuIFRoaXMgaXMKKwlyZXF1aXJlZCBmb3IgdGhlIGNhc2VzIHdoZXJlIHRoZSBvcHRpb24gUk9NIGlzIGRpc2FibGVkIGFuZCB0aGVyZSBpcworCW5vIEJJT1MgdG8gc3RhcnQgdGhlIGNvbnRyb2xsZXIuIFRoZSBGVyBzdGFydHMgdG8gYm9vdCBhZnRlciByZWNlaXZpbmcKKwl0aGUgZmlyc3QgY29tbWFuZCBmcm9tIHRoZSBkcml2ZXIuIFRoZSBjdXJyZW50IGRyaXZlciBoYXMgMSBzZWNvbmQKKwl0aW1lb3V0IGZvciB0aGUgc3luY2hyb25vdXMgY29tbWFuZHMsIHdoaWNoIGlzIGZhciBsZXNzIHRoYW4gd2hhdCBpcworCWFjdHVhbGx5IHJlcXVpcmVkLiBXZSBub3cgd2FpdCB1cCB0byBNQk9YX1JFU0VUX1RJTUUgKDE4MCBzZWNvbmRzKSBmb3IKKwlGVyBib290IHByb2Nlc3MuCisKK2l2LglJbiBtZWdhcmFpZF9tYm94X3Byb2R1Y3RfaW5mbywgY2xlYXIgdGhlIG1haWxib3ggY29udGVudHMgY29tcGxldGVseQorCWJlZm9yZSBwcmVwYXJpbmcgdGhlIGNvbW1hbmQgZm9yIGlucXVpcnkzLiBUaGlzIGlzIHRvIGVuc3VyZSB0aGF0IHRoZQorCUZXIGRvZXMgbm90IGdldCBqdW5rIHZhbHVlcyBpbiB0aGUgY29tbWFuZC4KKwordi4JRG8gYXdheSB3aXRoIHRoZSByZWR1bmRhbnQgTFNJX0NPTkZJR19DT01QQVQgcmVkZWZpbml0aW9uIGZvcgorCUNPTkZJR19DT01QQVQuIFJlcGxhY2UgPGFzbS9pb2N0bDMyLmg+IHdpdGggPGxpbnV4L2lvY3RsMzIuaD4KKworCQktIEphbWVzIEJvdHRvbWxleSA8SmFtZXMuQm90dG9tbGV5QFN0ZWVsRXllLmNvbT4sIDA4LjE3LjIwMDQKKwkJIGxpbnV4LXNjc2kgbWFpbGluZyBsaXN0CisKK3ZpLglBZGQgc3VwcG9ydCBmb3IgNjQtYml0IGFwcGxpY2F0aW9ucy4gQ3VycmVudCBkcml2ZXJzIGFzc3VtZSBvbmx5CisJMzItYml0IGFwcGxpY2F0aW9ucywgZXZlbiBvbiA2NC1iaXQgcGxhdGZvcm1zLiBVc2UgdGhlICJkYXRhIiBhbmQKKwkiYnVmZmVyIiBmaWVsZHMgb2YgdGhlIG1pbWRfdCBzdHJ1Y3R1cmUsIGluc3RlYWQgb2YgZW1iZWRkZWQgMzItYml0CisJYWRkcmVzc2VzIGluIGFwcGxpY2F0aW9uIG1haWxib3ggYW5kIHBhc3N0aHJ1IHN0cnVjdHVyZXMuCisKK3ZpaS4JTW92ZSB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGZvciB0aGUgbWFuYWdlbWVudCBtb2R1bGUgZnJvbQorCW1lZ2FyYWlkX21tLmggdG8gbWVnYXJhaWRfbW0uYworCisJCS0gQW5kcmV3IE1vcnRvbiA8YWtwbUBvc2RsLm9yZz4sIDA4LjE5LjIwMDQKKwkJbGludXgtc2NzaSBtYWlsaW5nIGxpc3QKKwordmlpaS4JQ2hhbmdlIGRlZmF1bHQgdmFsdWVzIGZvciBNRUdBUkFJRF9ORVdHRU4sIE1FR0FSQUlEX01NLCBhbmQKKwlNRUdBUkFJRF9NQUlMQk9YIHRvICduJyBpbiBLY29uZmlnLm1lZ2FyYWlkCisKKwkJLSBBbmRyZXcgTW9ydG9uIDxha3BtQG9zZGwub3JnPiwgMDguMTkuMjAwNAorCQlsaW51eC1zY3NpIG1haWxpbmcgbGlzdAorCitpeC4JcmVwbGFjZSB1ZGVsYXkgd2l0aCBtc2xlZXAKKworeC4JVHlwb3MgY29ycmVjdGVkIGluIGNvbW1lbnRzIGFuZCB3aGl0ZXNwYWNlIGFkanVzdG1lbnRzLCBleHBsaWNpdAorCWdyb3VwaW5nIG9mIGV4cHJlc3Npb25zLgorCisKK1JlbGVhc2UgRGF0ZQk6IEZyaSBKdWwgMjMgMTU6MjI6MDcgRURUIDIwMDQgLSBBdHVsIE11a2tlciA8YXR1bG1AbHNpbC5jb20+CitDdXJyZW50IFZlcnNpb24JOiAyLjIwLjIuMCAoc2NzaSBtb2R1bGUpLCAyLjIwLjEuMCAoY21tIG1vZHVsZSkKK09sZGVyIFZlcnNpb24JOiAyLjIwLjEuMCAoc2NzaSBtb2R1bGUpLCAyLjIwLjAuMCAoY21tIG1vZHVsZSkKKworaS4JQWRkIFBDSSBpZHMgZm9yIEFjZXIgUk9NQiAyRSBzb2x1dGlvbgorCitpaS4JQWRkIFBDSSBpZHMgZm9yIEk0CisKK2lpaS4JVHlwbyBjb3JyZWN0ZWQgZm9yIHN1YnN5cyBpZCBmb3IgbWVnYXJhaWQgc2F0YSAzMDAtNHgKKworaXYuCVJlbW92ZSB5aWVsZCgpIHdoaWxlIG1haWxib3ggaGFuZHNoYWtlIGluIHN5bmNocm9ub3VzIGNvbW1hbmRzCisKKworCSJNeSBvdGhlciBtYWluIGdyaXBlIGlzIHRoaW5ncyBsaWtlIHRoaXM6CisKKwkrCS8vIHdhaXQgZm9yIG1heGltdW0gMSBzZWNvbmQgZm9yIHN0YXR1cyB0byBwb3N0CisJKwlmb3IgKGkgPSAwOyBpIDwgNDAwMDA7IGkrKykgeworCSsJCWlmIChtYm94LT5udW1zdGF0dXMgIT0gMHhGRikgYnJlYWs7CisJKwkJdWRlbGF5KDI1KTsgeWllbGQoKTsKKwkrCX0KKworCXdoaWNoIGxpdHRlciB0aGUgZHJpdmVyLiAgVXNlIG9mIHlpZWxkKCkgaW4gZHJpdmVycyBpcyBkZXByZWNhdGVkLiIKKworCQktIEphbWVzIEJvdHRvbWxleSA8SmFtZXMuQm90dG9tbGV5QFN0ZWVsRXllLmNvbT4sIDA3LjE0LjIwMDQKKwkJIGxpbnV4LXNjc2kgbWFpbGluZyBsaXN0CisKK3YuCVJlbW92ZSByZWR1bmRhbnQgX19tZWdhcmFpZF9idXN5d2FpdF9tYm94IHJvdXRpbmUKKwordmkuCUZpeCBidWcgaW4gdGhlIG1hbmFnbWVudCBtb2R1bGUsIHdoaWNoIGNhdXNlcyBhIHN5c3RlbSBsb2NrdXAgd2hlbiB0aGUKKwlJTyBtb2R1bGUgaXMgbG9hZGVkIGFuZCB0aGVuIHVubG9hZGVkLCBmb2xsb3dlZCBieSBleGVjdXRpbmcgYW55CisJbWFuYWdlbWVudCB1dGlsaXR5LiBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIG1hbmFnZW1lbnQgbW9kdWxlIGRvZXMgbm90CisJaGFuZGxlIHRoZSBhZGFwdGVyIHVucmVnaXN0ZXIgcHJvcGVybHkuCisKKwlTcGVjaWZpY2FsbHksIGl0IHN0aWxsIGtlZXBzIGEgcmVmZXJlbmNlIHRvIHRoZSB1bnJlZ2lzdGVyZWQKKwljb250cm9sbGVycy4gVG8gYXZvaWQgdGhpcywgdGhlIHN0YXRpYyBhcnJheSBhZGFwdGVycyBoYXMgYmVlbgorCXJlcGxhY2VkIGJ5IGEgZHluYW1pYyBsaXN0LCB3aGljaCBnZXRzIHVwZGF0ZWQgZXZlcnkgdGltZSBhbiBhZGFwdGVyCisJaXMgYWRkZWQgb3IgcmVtb3ZlZC4KKworCUFsc28sIGR1cmluZyB1bnJlZ2lzdHJhdGlvbiBvZiB0aGUgSU8gbW9kdWxlLCB0aGUgcmVzb3VyY2VzIGFyZQorCW5vdyByZWxlYXNlZCBpbiB0aGUgZXhhY3QgcmV2ZXJzZSBvcmRlciBvZiB0aGUgYWxsb2NhdGlvbiB0aW1lCisJc2VxdWVuY2UuCisKKworUmVsZWFzZSBEYXRlCTogRnJpIEp1biAyNSAxODo1ODo0MyBFRFQgMjAwNCAtIEF0dWwgTXVra2VyIDxhdHVsbUBsc2lsLmNvbT4KK0N1cnJlbnQgVmVyc2lvbgk6IDIuMjAuMS4wCitPbGRlciBWZXJzaW9uCTogbWVnYXJhaWQgMi4yMC4wLjEKKworaS4JU3RhbGUgbGlzdCBwb2ludGVyIGluIGFkYXB0ZXIgY2F1c2VzIGtlcm5lbCBwYW5pYyB3aGVuIG1vZHVsZQorCW1lZ2FyYWlkX21ib3ggaXMgdW5sb2FkZWQKKworCitSZWxlYXNlIERhdGUJOiBUaHUgSnVuIDI0IDIwOjM3OjExIEVEVCAyMDA0IC0gQXR1bCBNdWtrZXIgPGF0dWxtQGxzaWwuY29tPgorQ3VycmVudCBWZXJzaW9uCTogMi4yMC4wLjEKK09sZGVyIFZlcnNpb24JOiBtZWdhcmFpZCAyLjIwLjAuMDAKKworaS4JTW9kdWxlcyBhcmUgbm90ICd5JyBieSBkZWZhdWx0LCBidXQgZGVwZW5kIG9uIGN1cnJlbnQgZGVmaW5pdGlvbiBvZgorCVNDU0kgJiBQQ0kuCisKK2lpLglSZWR1bmRhbnQgc3RydWN0dXJlIG1yYWlkX2RyaXZlcl90IHJlbW92ZWQuCisKK2lpaS4JTWlzY2VsbGFuZW91cyBpbmRlbnRhdGlvbiBhbmQgZ290by9sYWJlbCBmaXhlcy4KKwkJLSBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGluZnJhZGVhZC5vcmc+LCAwNi4yNC4yMDA0IGxpbnV4LXNjc2kKKworaXYuCXNjc2lfaG9zdF9wdXQoKSwgZG8ganVzdCBiZWZvcmUgY29tcGxldGluZyBIQkEgc2h1dGRvd24uCisKKworCitSZWxlYXNlIERhdGUJOiBNb24gSnVuIDIxIDE5OjUzOjU0IEVEVCAyMDA0IC0gQXR1bCBNdWtrZXIgPGF0dWxtQGxzaWwuY29tPgorQ3VycmVudCBWZXJzaW9uCTogMi4yMC4wLjAKK09sZGVyIFZlcnNpb24JOiBtZWdhcmFpZCAyLjIwLjAucmMyIGFuZCAyLjAwLjMKKworaS4JSW5kZXBlbmRlbnQgbW9kdWxlIHRvIGludGVyYWN0IHdpdGggdXNlcmxhbmQgYXBwbGljYXRpb25zIGFuZAorCW11bHRpcGxleCBjb21tYW5kIHRvIGxvdyBsZXZlbCBSQUlEIG1vZHVsZShzKS4KKworCSJTaGFyZWQgY29kZSBpbiBhIHRoaXJkIG1vZHVsZSwgYSAibGlicmFyeSBtb2R1bGUiLCBpcyBhbiBhY2NlcHRhYmxlCisJc29sdXRpb24uIG1vZHByb2JlIGF1dG9tYXRpY2FsbHkgbG9hZHMgZGVwZW5kZW50IG1vZHVsZXMsIHNvIHVzZXJzCisJcnVubmluZyAibW9kcHJvYmUgZHJpdmVyMSIgb3IgIm1vZHByb2JlIGRyaXZlcjIiIHdvdWxkIGF1dG9tYXRpY2FsbHkKKwlsb2FkIHRoZSBzaGFyZWQgbGlicmFyeSBtb2R1bGUuIgorCisJCS0gSmVmZiBHYXJ6aWsgPGpnYXJ6aWtAcG9ib3guY29tPiAwMi4yNS4yMDA0IExLTUwKKworCSJBcyBKZWZmIGhpbnRlZCwgaWYgeW91ciB1c2Vyc3BhY2U8LT5kcml2ZXIgQVBJIGlzIGNvbnNpc3RlbnQgYmV0d2VlbgorCXlvdXIgbmV3IE1QVC1iYXNlZCBSQUlEIGNvbnRyb2xsZXJzIGFuZCB5b3VyIGV4aXN0aW5nIG1lZ2FyYWlkIGRyaXZlciwKKwl0aGVuIHBlcmhhcHMgeW91IG5lZWQgYSBzaW5nbGUgc21hbGwgaGVscGVyIG1vZHVsZSAobHNpaW9jdGwgb3Igc29tZQorCWJldHRlciBuYW1lKSwgbG9hZGVkIGJ5IGJvdGggbXB0cmFpZCBhbmQgbWVnYXJhaWQgYXV0b21hdGljYWxseSwgd2hpY2gKKwloYW5kbGVzIHJlZ2lzdGVyaW5nIHRoZSAvZGV2L21lZ2FyYWlkIG5vZGUgZHluYW1pY2FsbHkuIEluIHRoaXMgY2FzZSwKKwlib3RoIG1wdHJhaWQgYW5kIG1lZ2FyYWlkIHdvdWxkIHJlZ2lzdGVyIHdpdGggbHNpaW9jdGwgZm9yIGVhY2gKKwlhZGFwdGVyIGRpc2NvdmVyZWQsIGFuZCBsc2lpb2N0bCB3b3VsZCBlc3NlbnRpYWxseSBiZSBhIHN3aXRjaCwKKwlyZWRpcmVjdGluZyB1c2Vyc3BhY2UgdG9vbCBpb2N0bHMgdG8gdGhlIGFwcHJvcHJpYXRlIGRyaXZlci4iCisKKwkJLSBNYXR0IERvbXNjaCA8TWF0dF9Eb21zY2hAZGVsbC5jb20+IDAyLjI1LjIwMDQgTEtNTAorCitpaS4JUmVtb3ZlIEM5OSBpbml0aWFsaXphdGlvbnMgZnJvbSBwY2lfZGV2aWNlIGlkLgorCisJInBjaV9pZF90YWJsZV9nIHdvdWxkIGJlIG11Y2ggbW9yZSByZWFkYWJsZSB3aGVuIG5vdCB1c2luZyBDOTkKKwlpbml0aWFsaXplcnMuCisJUENJIHRhYmxlIGRvZXNuJ3QgY2hhbmdlLCB0aGVyZSdzIGxvdHMgb2YgdXNlcnMgdGhhdCBwcmVmZXIgdGhlIG1vcmUKKwlyZWFkYWJsZSB2YXJpYW50LiAgQW5kIGl0J3MgcmVhbGx5IGZhciBsZXNzIGFuZCBtdWNoIGVhc2llciB0byBncm9rCisJbGluZXMgd2l0aG91dCBDOTkgaW5pdGlhbGl6ZXJzLiIKKworCQktIENocmlzdG9waCBIZWxsd2lnIDxoY2hAaW5mcmFkZWFkLm9yZz4sIDA1LjI4LjIwMDQgbGludXgtc2NzaQorCitpaWkuCU1hbnkgZml4ZXMgYXMgc3VnZ2VzdGVkIGJ5IENocmlzdG9waCBIZWxsd2lnIDxoY2hAaW5mcmFkZWFkLm9yZz4gb24KKwlsaW51eC1zY3NpLCAwNS4yOC4yMDA0CisKK2l2LglXZSBub3cgc3VwcG9ydCB1cCB0byAzMiBwYXJhbGxlbCBpb2N0bCBjb21tYW5kcyBpbnN0ZWFkIG9mIGN1cnJlbnQgMS4KKwlUaGVyZSBpcyBhIGNvbnNjaW91cyBlZmZvcnQgdG8gbGV0IG1lbW9yeSBhbGxvY2F0aW9uIG5vdCBmYWlsIGZvciBpb2N0bAorCWNvbW1hbmRzLgorCit2LglEbyBhd2F5IHdpdGggaW50ZXJuYWwgbWVtb3J5IG1hbmFnZW1lbnQuIFVzZSBwY2lfcG9vbF8oY3JlYXRlfGFsbG9jKQorCWluc3RlYWQuCisKK3ZpLglLaWxsIHRhc2tsZXQgd2hlbiB1bmxvYWRpbmcgdGhlIGRyaXZlci4KKwordmlpLglEbyBub3QgdXNlICJob3N0X2xvY2snLCBkcml2ZXIgaGFzIGZpbmUtZ3JhaW4gbG9ja3Mgbm93IHRvIHByb3RlY3QgYWxsCisJZGF0YSBzdHJ1Y3R1cmVzLgorCit2aWlpLglPcHRpbWl6ZSB0aGUgYnVpbGQgc2NhdHRlci1nYXRoZXIgbGlzdCByb3V0aW5lLiBUaGUgY2FsbGVycyBhbHJlYWR5CisJa25vdyB0aGUgZGF0YSB0cmFuc2ZlciBhZGRyZXNzIGFuZCBsZW5ndGguCisKK2l4LglCZXR0ZXIgaW1wbGVtZW50YXRpb24gb2YgZXJyb3IgaGFuZGxpbmcgYW5kIHJlY292ZXJ5LiBEcml2ZXIgbm93CisJcGVyZm9ybXMgZXh0ZW5kZWQgZXJyb3JzIHJlY292ZXJ5IGZvciBpbnN0YW5jZXMgbGlrZSBzY3NpIGNhYmxlIHB1bGwuCisKK3guCURpc2Fzc29jaWF0ZSB0aGUgbWFuYWdlbWVudCBjb21tYW5kcyB3aXRoIGFuIG92ZXJsYWlkIHNjc2kgY29tbWFuZC4KKwlEcml2ZXIgbm93IHRyZWF0cyB0aGUgbWFuYWdlbWVudCBwYWNrZXRzIGFzIHNwZWNpYWwgcGFja2V0cyBhbmQgaGFzIGEKKwlkZWRpY2F0ZWQgY2FsbGJhY2sgcm91dGluZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubmNyNTNjOHh4IGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5uY3I1M2M4eHgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QwM2U5ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubmNyNTNjOHh4CkBAIC0wLDAgKzEsNDk1IEBACitTYXQgTWF5IDEyIDEyOjAwIDIwMDEgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIG5jcjUzYzh4eC0zLjQuM2IKKwktIEVuc3VyZSBMRURDIGJpdCBpbiBHUENOVEwgaXMgY2xlYXJlZCB3aGVuIHJlYWRpbmcgdGhlIE5WUkFNLgorCSAgRml4IHNlbnQgYnkgU3RpZyBUZWxmZXIgPHN0aWdAYXBpLW5ldHdvcmtzLmNvbT4uCisJLSBEZWZpbmUgc2NzaV9zZXRfcGNpX2RldmljZSgpIGFzIG5pbCBmb3Iga2VybmVsIDwgMi40LjQuCisKK01vbiBGZWIgMTIgMjI6MzAgMjAwMSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gbmNyNTNjOHh4LTMuNC4zCisJLSBDYWxsIHBjaV9lbmFibGVfZGV2aWNlKCkgYXMgQUMgd2FudHMgdGhpcyB0byBiZSBkb25lLgorCS0gR2V0IGJvdGggdGhlIEJBUiBjb29raWVzIGFjdHVhbCBhbmQgUENJIEJBUiB2YWx1ZXMuCisJICAoc2VlIENoYW5nZWxvZy5zeW01M2M4eHggcmV2LiAxLjcuMyBmb3IgZGV0YWlscykKKwktIE1lcmdlIGNoYW5nZXMgZm9yIGxpbnV4LTIuNCB0aGF0IGRlY2xhcmUgdGhlIGhvc3QgdGVtcGxhdGUgCisJICBpbiB0aGUgZHJpdmVyIG9iamVjdCBhbHNvIHdoZW4gdGhlIGRyaXZlciBpcyBzdGF0aWNhbGx5IAorCSAgbGlua2VkIHdpdGggdGhlIGtlcm5lbC4KKworU3VuIFNlcCAyNCAyMTozMCAyMDAwIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBuY3I1M2M4eHgtMy40LjIKKwktIFNlZSBDaGFuZ2Vsb2cuc3ltNTNjOHh4LCBkcml2ZXIgdmVyc2lvbiAxLjcuMi4KKworV2VkIEp1bCAyNiAyMzozMCAyMDAwIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBuY3I1M2M4eHgtMy40LjEKKwktIFByb3ZpZGUgT3BlbkZpcm1hcmUgcGF0aCB0aHJvdWdoIHRoZSBwcm9jIEZTIG9uIFBQQy4KKwktIFJlbW92ZSB0cmFpbGluZyBhcmd1bWVudCAjMiBmcm9tIGEgY291cGxlIG9mICN1bmRlZnMuCisKK1N1biBKdWwgMDkgMTY6MzAgMjAwMCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gbmNyNTNjOHh4LTMuNC4wCisJLSBSZW1vdmUgdGhlIFBST0ZJTEUgQyBhbmQgU0NSSVBUUyBjb2RlLgorCSAgVGhpcyBmYWNpbGl0eSB3YXMgbm90IHRoaXMgdXNlZnVsIGFuZCB0aHVzIHdhcyBub3QgbG9uZ2VyIAorCSAgZGVzaXJhYmxlIGdpdmVuIHRoZSBpbmNyZWFzaW5nIGNvbXBsZXhpdHkgb2YgdGhlIGRyaXZlciBjb2RlLgorCS0gTWVyZ2VzIGZyb20gRnJlZUJTRCBzeW0tMS42LjIgZHJpdmVyOgorCSAgKiBDbGFyaWZ5IG1lbW9yeSBiYXJyaWVycyBuZWVkZWQgYnkgdGhlIGRyaXZlciBmb3IgYXJjaGl0ZWN0dXJlcyAKKwkgICAgdGhhdCBpbXBsZW1lbnQgYSB3ZWFrIG1lbW9yeSBvcmRlcmluZy4KKwktIEdlbmVyYWwgY2xlYW51cDoKKwkgIE1vdmUgZGVmaW5pdGlvbnMgZm9yIGJhcnJpZXJzIGFuZCBJTy9NTUlPIG9wZXJhdGlvbnMgdG8gdGhlIAorCSAgc3ltNTNjOHh4X2RlZnMuaCBoZWFkZXIgZmlsZXMuIFRoZXkgYXJlIG5vdyBzaGFyZWQgYnkgdGhlIAorCSAgYm90aCBkcml2ZXJzLgorCSAgVXNlIFNDU0lfTkNSX0lPTUFQUEVEIGluc3RlYWQgb2YgTkNSX0lPTUFQUEVELgorCitUaHUgTWF5IDExICAgMTI6MzAgMjAwMCBQYW0gRGVsYW5leSAocGFtLmRlbGFuZXlAbHNpbC5jb20pCisJKiByZXZpc2lvbiAzLjNiCisgCitNb24gQXByIDI0IDEyOjAwIDIwMDAgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjJpCisJLSBSZXR1cm4gdmFsdWUgMSAoaW5zdGVhZCBvZiAwKSBmcm9tIHRoZSBkcml2ZXIgc2V0dXAgcm91dGluZS4KKwktIExldCB0aGUgZHJpdmVyIGFsc28gYXR0YWNoIGNvbnRyb2xsZXJzIHRoYXQgaGF2ZSBiZWVuIHNldCB0byAKKwkgIE9GRiBpbiB0aGUgTlZSQU0gYXMgaXQgZGlkIHByaW9yIHRvIHJldmlzaW9uIDMuMmcuCisKK1NhdCBBcHIgMSAgMTI6MDAgMjAwMCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDMuMmgKKwktIEZpeCBhIGNvbXBpbGF0aW9uIHByb2JsZW0gb24gQWxwaGEgaW50cm9kdWNlZCBpbiB2ZXJzaW9uIDMuMmcuCisgICAgICAgICAgKGBwb3J0JyBjaGFuZ2VkIHRvIGBiYXNlX2lvJykuCisJLSBNb3ZlIGZyb20gYHN5bScgdG8gdGhpcyBkcml2ZXIgYSB0aW55IGNoYW5nZSBmb3IgX19zcGFyY19fIHRoYXQgCisJICBhcHBsaWVzIHRvIGNhY2hlIGxpbmUgc2l6ZSAoPyBQcm9iYWJseSBmcm9tIERhdmlkIFMgTWlsbGVyKS4KKwktIE1ha2Ugc3VyZSBubyBkYXRhIHRyYW5zZmVyIHdpbGwgaGFwcGVuIGZvciBTY3NpX0NtbmQgcmVxdWVzdHMgCisJICB0aGF0IHN1cHBseSBTQ1NJX0RBVEFfTk9ORSBkaXJlY3Rpb24gKHRoaXMgYXZvaWRzIHNvbWUgQlVHKCkgCisJICBzdGF0ZW1lbnQgaW4gdGhlIFBDSSBjb2RlIHdoZW4gYSBkYXRhIGJ1ZmZlciBpcyBhbHNvIHN1cHBsaWVkKS4KKworVGh1IE1hciAxNiAgIDk6MzAgMjAwMCBQYW0gRGVsYW5leSAocGFtLmRlbGFuZXlAbHNpbC5jb20pCisJKiByZXZpc2lvbiAzLjNiLTMKKyAJLSBBZGRlZCBleGNsdXNpb24gZm9yIHRoZSA1M0MxMDEwIGFuZCA1M0MxMDEwXzY2IGNoaXBzCisJICB0byB0aGUgZHJpdmVyIChjaGFuZ2UgdG8gc3ltNTNjOHh4X2NvbW0uaCkuCisKK01vbiBNYXJjaCA2ICAyMzoxNSAyMDAwIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogcmV2aXNpb24gMy4yZworCS0gQWRkIHRoZSBmaWxlIHN5bTUzYzh4eF9jb21tLmggdGhhdCBjb2xsZWN0cyBjb2RlIHRoYXQgc2hvdWxkIAorCSAgYmUgc2hhcmVkIGJ5IHN5bTUzYzh4eCBhbmQgbmNyNTNjOHh4IGRyaXZlcnMuIEZvciBub3csIGl0IGlzICAKKwkgIGEgaGVhZGVyIGZpbGUgdGhhdCBpcyBvbmx5IGluY2x1ZGVkIGJ5IHRoZSBuY3I1M2M4eHggZHJpdmVyLCAKKwkgIGJ1dCB0aGluZ3Mgd2lsbCBiZSBjbGVhbmVkIHVwIGxhdGVyLiBUaGlzIGNvZGUgYWRkcmVzc2VzIAorCSAgbm90YWJseToKKwkgICogQ2hpcCBkZXRlY3Rpb24gYW5kIFBDSSByZWxhdGVkIGluaXRpYWxpc2F0aW9ucworCSAgKiBOVlJBTSBkZXRlY3Rpb24gYW5kIHJlYWRpbmcKKwkgICogRE1BIG1hcHBpbmcKKwkgICogQm9vdCBzZXR1cCBjb21tYW5kCisJICAqIEFuZCBzb21lIG90aGVyIC4uLgorCS0gQWRkIHN1cHBvcnQgZm9yIHRoZSBuZXcgZHluYW1pYyBkbWEgbWFwcGluZyBrZXJuZWwgaW50ZXJmYWNlLgorCSAgUmVxdWlyZXMgTGludXgtMi4zLjQ3ICh0ZXN0ZWQgd2l0aCBwcmUtMi4zLjQ3LTYpLgorCS0gR2V0IGRhdGEgdHJhbnNmZXIgZGlyZWN0aW9uIGZyb20gdGhlIHNjc2kgY29tbWFuZCBzdHJ1Y3R1cmUgCisJICAoU2NzaV9DbW5kKSB3aGVuIHRoaXMgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlLgorCitNb24gTWFyY2ggNiAgMjM6MTUgMjAwMCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKyAgICAgICAgKiByZXZpc2lvbiAzLjJnCisgICAgICAgIC0gQWRkIHRoZSBmaWxlIHN5bTUzYzh4eF9jb21tLmggdGhhdCBjb2xsZWN0cyBjb2RlIHRoYXQgc2hvdWxkCisgICAgICAgICAgYmUgc2hhcmVkIGJ5IHN5bTUzYzh4eCBhbmQgbmNyNTNjOHh4IGRyaXZlcnMuIEZvciBub3csIGl0IGlzCisgICAgICAgICAgYSBoZWFkZXIgZmlsZSB0aGF0IGlzIG9ubHkgaW5jbHVkZWQgYnkgdGhlIG5jcjUzYzh4eCBkcml2ZXIsCisgICAgICAgICAgYnV0IHRoaW5ncyB3aWxsIGJlIGNsZWFuZWQgdXAgbGF0ZXIuIFRoaXMgY29kZSBhZGRyZXNzZXMKKyAgICAgICAgICBub3RhYmx5OgorICAgICAgICAgICogQ2hpcCBkZXRlY3Rpb24gYW5kIFBDSSByZWxhdGVkIGluaXRpYWxpc2F0aW9ucworICAgICAgICAgICogTlZSQU0gZGV0ZWN0aW9uIGFuZCByZWFkaW5nCisgICAgICAgICAgKiBETUEgbWFwcGluZworICAgICAgICAgICogQm9vdCBzZXR1cCBjb21tYW5kCisgICAgICAgICAgKiBBbmQgc29tZSBvdGhlciAuLi4KKyAgICAgICAgLSBBZGQgc3VwcG9ydCBmb3IgdGhlIG5ldyBkeW5hbWljIGRtYSBtYXBwaW5nIGtlcm5lbCBpbnRlcmZhY2UuCisgICAgICAgICAgUmVxdWlyZXMgTGludXgtMi4zLjQ3ICh0ZXN0ZWQgd2l0aCBwcmUtMi4zLjQ3LTYpLgorICAgICAgICAtIEdldCBkYXRhIHRyYW5zZmVyIGRpcmVjdGlvbiBmcm9tIHRoZSBzY3NpIGNvbW1hbmQgc3RydWN0dXJlCisgICAgICAgICAgKFNjc2lfQ21uZCkgd2hlbiB0aGlzIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZS4KKworRnJpIEphbiAxNCAxNDowMCAyMDAwIFBhbSBEZWxhbmV5IChwYW0uZGVsYW5leUBsc2lsLmNvbSkKKwkqIHJldmlzaW9uIHByZS0zLjNiLTEKKwktIE1lcmdlIHBhcmFsbGVsIGRyaXZlciBzZXJpZXMgMy4zMSBhbmQgMy4yZSAKKworVHVlIEphbiAxMSAxNDowMCAyMDAwIFBhbSBEZWxhbmV5IChwYW0uZGVsYW5leUBsc2lsLmNvbSkKKwkqIHJldmlzaW9uIDMuMzEKKwktIEFkZGVkIHN1cHBvcnQgZm9yIG1vdW50aW5nIGRpc2tzIG9uIHdpZGUtbmFycm93LXdpZGUKKwkgIHNjc2kgY29uZmlndXJhdGlvbnMuICAKKwktIEJ1aWx0IG9mZiBvZiB2ZXJzaW9uIDMuMzAKKworTW9uIEphbiAxMCAxMzozMCAyMDAwIFBhbSBEZWxhbmV5IChwYW0uZGVsYW5leUBsc2lsLmNvbSkKKwkqIHJldmlzaW9uIDMuMzAKKwktIEFkZGVkIGNhcGFiaWxpdHkgdG8gdXNlIHRoZSBpbnRlZ3JpdHkgY2hlY2tpbmcgY29kZQorCSAgaW4gdGhlIGtlcm5lbCAob3B0aW9uYWwpLgorCS0gRGlzYWJsZWQgc3VwcG9ydCBmb3IgdGhlIDUzQzEwMTAuCisJLSBCdWlsdCBvZmYgb2YgdmVyc2lvbiAzLjJjCisKK1NhdCBKYW4gOCAgMjI6MDAgMjAwMCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDMuMmUKKwktIEFkZCB5ZWFyIDIwMDAgY29weXJpZ2h0LgorCS0gRGlzcGxheSBjb3JyZWN0bHkgYnVzIHNpZ25hbHMgd2hlbiBidXMgaXMgZGV0ZWN0ZWQgd3JvbmcuCisJLSBSZW1vdmUgdGhlIGRlYWQgY29kZSB0aGF0IGJyb2tlIGRyaXZlciAzLjJkLgorCitNb24gRGVjIDYgIDIyOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjJkCisJLSBDaGFuZ2UgbWVzc2FnZXMgd3JpdHRlbiBieSB0aGUgZHJpdmVyIGF0IGluaXRpYWxpc2F0aW9uIGFuZCAKKwkgIHRocm91Z2ggdGhlIC9wcm9jIEZTIChyYXRoZXIgY29zbWV0aWMgY2hhbmdlcyB0aGF0IGNvbnNpc3QgaW4KKwkgIHByaW50aW5nIG91dCB0aGUgUENJIGJ1cyBudW1iZXIgYW5kIGRldmljZS9mdW5jdGlvbikuCisJLSBHZXQgcmlkIG9mIHRoZSBvbGQgUENJIGJpb3MgaW50ZXJmYWNlLCBidXQgcHJlc2VydmUga2VybmVsIDIuMCAKKwkgIGNvbXBhdGliaWxpdHkgZnJvbSBhIHNpbXBsZSB3cmFwcGVyLgorCS0gUmVtb3ZlIHRoZSBjb21waWxhdGlvbiBjb25kaXRpb24gYWJvdXQgaGF2aW5nIHRvIGFjcXVpcmUgdGhlIAorCSAgaW9fcmVxdWVzdF9sb2NrIHNpbmNlIGl0IHNlZW1zIHRvIGJlIGEgZGVmaW5pdGUgZmVhdHVyZSBub3cuOikKKwktIHByb2NfZGlyIHN0cnVjdHVyZSBubyBsb25nZXIgbmVlZGVkIGZvciBrZXJuZWwgPj0gMi4zLjI3LgorCS0gQ2hhbmdlIHRoZSBkcml2ZXIgZGV0ZWN0aW9uIGNvZGUgYnkgdGhlIHN5bTUzYzh4eCBvbmUsIG1vZHVsbyAKKwkgIHNvbWUgbWlub3IgY2hhbmdlcy4gVGhlIGRyaXZlciBjYW4gbm93IGF0dGFjaCBhbnkgbnVtYmVyIG9mIAorCSAgY29udHJvbGxlcnMgKD40MCkgYW5kIGRvZXMgbm8gbG9uZ2VyIGhvZ2VyIHN0YWNrIHNwYWNlIGF0IAorCSAgaW5pdGlhbGlzYXRpb24uCisJLSBEZWZpbml0ZWx5IGRpc2FibGUgb3ZlcmxhcHBlZCBQQ0kgYXJiaXRyYXRpb24gZm9yIGFsbCBkdWFsIAorCSAgZnVuY3Rpb24gY2hpcHMsIHNpbmNlIEkgY2Fubm90IG1ha2Ugc3VyZSBmb3Igd2hhdCBjaGlwIHJldmlzaW9ucyAKKwkgIGl0IGlzIGFjdHVhbGx5IHNhZmUuCisJLSBBZGQgc3VwcG9ydCBmb3IgdGhlIFNZTTUzQzE1MTBELgorCS0gVXBkYXRlIHRoZSBwb29yIFRla3JhbSBzeW5jIGZhY3RvciB0YWJsZS4KKwktIFJlbW92ZSB0aGUgY29tcGlsYXRpb24gY29uZGl0aW9uIGFib3V0IGhhdmluZyB0byBhY3F1aXJlIHRoZSAKKwkgIGlvX3JlcXVlc3RfbG9jayBzaW5jZSBpdCBzZWVtcyB0byBiZSBhIGRlZmluaXRlIGZlYXR1cmUgbm93LjopCisJLSBwcm9jX2RpciBzdHJ1Y3R1cmUgbm8gbG9uZ2VyIG5lZWRlZCBmb3Iga2VybmVsID49IDIuMy4yNy4KKworU2F0IFNlcCAxMSAgMTg6MDAgMTk5OSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDMuMmMKKwktIEhhbmRsZSBjb3JyZWN0bHkgKGhvcGVmdWxseSkgamlmZmllcyB3cmFwLWFyb3VuZC4KKwktIFJlc3RvcmUgdGhlIGVudHJ5IHVzZWQgdG8gZGV0ZWN0IDg3NSB1bnRpbCByZXZpc2lvbiAweGZmLgorCSAgKEkgcmVtb3ZlZCBpdCBpbmFkdmVydGVudGx5LCBpdCBzZWVtcyA6KSApCisJLSBSZXBsYWNlIF9faW5pdGZ1bmMoKSB3aGljaCBpcyBkZXByZWNhdGVkIHN0dWZmIGJ5IF9faW5pdCB3aGljaCAKKwkgIGlzIG5vdCB5ZXQgc28uIDstKQorCS0gQWRkIHN1cHBvcnQgb2Ygc29tZSAncmVzb3VyY2UgaGFuZGxpbmcnIGZvciBsaW51eC0yLjMuMTMuCisJICBCYXNpY2FsbHkgdGhlIEJBUnMgaGF2ZSBiZWVuIGNoYW5nZWQgdG8gc29tZXRoaW5nIG1vcmUgY29tcGxleCAKKwkgIGluIHRoZSBwY2lfZGV2IHN0cnVjdHVyZS4KKwktIFJlbW92ZSBzb21lIGRlcHJlY2F0ZWQgY29kZS4KKworU2F0IE1heSAxMCAgMTE6MDAgMTk5OSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIHByZS0zLjJiLTEKKwktIFN1cHBvcnQgZm9yIHRoZSA1M0M4OTVBIGJ5IFBhbWVsYSBEZWxhbmV5IDxwYW0uZGVsYW5leUBsc2lsLmNvbT4KKwkgIFRoZSA1M0M4OTVBIGNvbnRhaW5zIGFsbCBvZiB0aGUgZmVhdHVyZXMgb2YgdGhlIDg5NiBidXQgaGFzIG9ubHkgCisJICBvbmUgY2hhbm5lbCBhbmQgaGFzIGEgMzIgYml0IFBDSSBidXMuIEl0IGRvZXMgNjQgYml0IFBDSSBhZGRyZXNzaW5nIAorCSAgdXNpbmcgZHVhbCBjeWNsZSBQQ0kgZGF0YSB0cmFuc2ZlcnMuCisJLSBNaXNjZWxsYW5lb3VzIG1pbm9yIGZpeGVzLgorCS0gU29tZSBhZGRpdGlvbnMgdG8gdGhlIFJFQURNRS5uY3I1M2M4eHggZmlsZS4KKworU3VuIEFwciAxMSAgMTA6MDAgMTk5OSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDMuMmEKKwktIEFkZCAnaG9zdGlkOiNpZCcgYm9vdCBvcHRpb24uIFRoaXMgb3B0aW9uIGFsbG93cyB0byBjaGFuZ2UgdGhlIAorCSAgZGVmYXVsdCBTQ1NJIGlkIHRoZSBkcml2ZXIgdXNlcyBmb3IgY29udHJvbGxlcnMuCisJLSBSZW1vdmUgbnZyYW0gbGF5b3V0cyBhbmQgZHJpdmVyIHNldC11cCBzdHJ1Y3R1cmVzIGZyb20gdGhlIEMgc291cmNlLAorCSAgYW5kIHVzZSB0aGUgb25lIGRlZmluZWQgaW4gc3ltNTNjOHh4X2RlZnMuaCBmaWxlLgorCSAgKHNoYXJlZCBieSBib3RoIGRyaXZlcnMpLgorCS0gU2V0IGZvciBub3cgTUFYIExVTlMgdG8gMTYgKGluc3RlYWQgb2YgOCkuCisKK1RodSBNYXIgMTEgIDIzOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjIJICAoOHh4LTg5NiBkcml2ZXIgYnVuZGxlKQorCS0gT25seSBkZWZpbmUgdGhlIGhvc3QgdGVtcGxhdGUgaW4gbmNyNTNjOHh4LmggYW5kIGluY2x1ZGUgdGhlIAorCSAgc3ltNTNjOHh4X2RlZnMuaCBmaWxlLgorCS0gRGVjbGFyZSBzdGF0aWMgYWxsIHN5bWJvbHMgdGhhdCBkbyBub3QgbmVlZCB0byBiZSB2aXNpYmxlIGZyb20gCisJICBvdXRzaWRlIHRoZSBkcml2ZXIgY29kZS4KKwktIEFkZCAnZXhjbCcgYm9vdCBjb21tYW5kIG9wdGlvbiB0aGF0IGFsbG93cyB0byBwYXNzIHRvIHRoZSBkcml2ZXIgCisJICBpbyBhZGRyZXNzIG9mIGRldmljZXMgbm90IHRvIGF0dGFjaC4KKwktIEFkZCBpbmZvKCkgZnVuY3Rpb24gY2FsbGVkIGZyb20gdGhlIGhvc3QgdGVtcGxhdGUgdG8gcHJpbnQgCisJICBkcml2ZXIvaG9zdCBpbmZvcm1hdGlvbi4KKwktIE1pbm9yIGRvY3VtZW50YXRpb24gYWRkaXRpb25zLgorCitTYXQgTWFyIDYgIDExOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjFoCisJLSBGaXggc29tZSBvb29vbGQgYnVnIHRoYXQgaGFuZ3MgdGhlIGJ1cyBpZiBhIGRldmljZSByZWplY3RzIGEgCisJICBuZWdvdGlhdGlvbi4gQnR3LCB0aGUgY29ycmVzcG9uZGluZyBzdHVmZiBhbHNvIG5lZWRlZCBzb21lIGNsZWFudXAgCisJICBhbmQgdGh1cyB0aGUgY2hhbmdlIGlzIGEgYml0IGxhcmdlciB0aGFuIGl0IGNvdWxkIGhhdmUgYmVlbi4KKwktIFN0aWxsIHNvbWUgdHlwbyB0aGF0IG1hZGUgY29tcGlsYXRpb24gZmFpbCBmb3IgNjQgYml0ICh0cml2aWFsIGZpeCkuCisKK1N1biBGZWIgIDE0OjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjFnCisJLSBEZWFsIGNvcnJlY3RseSB3aXRoIDY0IGJpdCBQQ0kgYWRkcmVzcyByZWdpc3RlcnMgb24gTGludXggMi4yLgorCSAgUG9pbnRlZCBvdXQgYnkgTGVvbmFyZCBadWJrb2ZmLgorCS0gQWxsb3cgdG8gdHVuZSByZXF1ZXN0X2lycSgpIGZsYWdzIGZyb20gdGhlIGJvb3QgY29tbWFuZCBsaW5lIHVzaW5nIAorCSAgbmNyNTNjOHh4PWlycW06Pz8sIGFzIGZvbGxvd3M6CisJICBhKSBJZiBiaXQgMHgxMCBpcyBzZXQgaW4gaXJxbSwgU0FfU0hJUlEgZmxhZyBpcyBub3QgdXNlZC4KKwkgIGIpIElmIGJpdCAweDIwIGlzIHNldCBpbiBpcnFtLCBTQV9JTlRFUlJVUFQgZmxhZyBpcyBub3QgdXNlZC4KKwkgIEJ5IGRlZmF1bHQgdGhlIGRyaXZlciB1c2VzIGJvdGggU0FfU0hJUlEgYW5kIFNBX0lOVEVSUlVQVC4KKwkgIE9wdGlvbiAnbmNyNTNjOHh4PWlycW06MHgyMCcgbWF5IGJlIHVzZWQgd2hlbiBhbiBJUlEgaXMgc2hhcmVkIGJ5IAorCSAgYSA1M0M4WFggYWRhcHRlciBhbmQgYSBuZXR3b3JrIGJvYXJkLgorCS0gVGlueSBtaXNwZWxsaW5nIGZpeGVkIChBQk9SVCBpbnN0ZWFkIG9mIEFCUlQpLiBXYXMgZm9ydHVuYXRlbHkgCisJICBoYXJtbGVzcy4KKwktIE5lZ290aWF0ZSBTWU5DIGRhdGEgdHJhbnNmZXJzIHdpdGggQ0NTIGRldmljZXMuCisKK1NhdCBKYW4gMTYgIDE3OjMwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjFmCisJLSBTb21lIFBDSSBmaXgtdXBzIG5vdCBuZWVkZWQgYW55IG1vcmUgZm9yIFBQQyAoZnJvbSBDb3J0KS4KKwktIENhY2hlIGxpbmUgc2l6ZSBzZXQgdG8gMTYgRFdPUkRTIGZvciBTcGFyYyAgIChmcm9tIERTTSkuCisJLSBXYWl0aW5nIGxpc3QgbG9vay11cCBkaWRuJ3Qgd29yayBmb3IgdGhlIGZpcnN0IGNvbW1hbmQgb2YgdGhlIGxpc3QuCisJLSBSZW1vdmUgMiB1c2VsZXNzIGxpbmVzIG9mIGNvZGUuCisKK1N1biBEZWMgMTMgIDE4OjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjFlCisJLSBTYW1lIHdvcmstYXJvdW5kIGFzIGZvciB0aGUgNTNjODc2IHJldiA8PSAweDE1IGZvciA1M2M4OTYgcmV2IDE6CisJICBEaXNhYmxlIG92ZXJsYXBwZWQgYXJiaXRyYXRpb24uIFRoaXMgd2lsbCBub3QgbWFrZSBkaWZmZXJlbmNlIAorCSAgc2luY2UgdGhlIGNoaXAgaGFzIG9uLWNoaXAgUkFNLgorCitUaHUgTm92IDI2ICAyMjowMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogcmV2aXNpb24gMy4xZAorCS0gVGhlIFNJU0wgUkFJRCBjaGFuZ2UgcmVxdWlyZXMgbm93IHJlbWFwX3BjaV9tZW0oKSBzdHVmZiB0byBiZSAKKwkgIGNvbXBpbGVkIGZvciBfX2kzODZfXyB3aGVuIG5vcm1hbCBJT3MgYXJlIHVzZWQuCisJLSBNaW5vciBzcGVsbGluZyBmaXhlcyBpbiBkb2MgZmlsZXMuCisKK1NhdCBOb3YgMjEgIDE4OjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjFjCisJLSBJZ25vcmUgY2hpcHMgdGhhdCBhcmUgZHJpdmVuIGJ5IFNJU0wgUkFJRCAoREFDIDk2MCkuCisJICBDaGFuZ2Ugc2VudCBieSBMZW9uYXJkIFp1YmtvZmYgYW5kIHNsaWdodGx5IHJld29ya2VkLgorCS0gU3RpbGwgYSBidWdsZXQgaW4gdGhlIHRhZ3MgaW5pdGlhbCBzZXR0aW5ncyB0aGF0IG5lZWRlZCB0byBiZSBmaXhlZC4KKwkgIEl0IHdhcyBub3QgcG9zc2libGUgdG8gZGlzYWJsZSBUR1EgYXQgc3lzdGVtIHN0YXJ0dXAgZm9yIGRldmljZXMgCisJICB0aGF0IGNsYWltIFRHUSBzdXBwb3J0LiBUaGUgZHJpdmVyIHVzZWQgYXQgbGVhc3QgMiBmb3IgdGhlIHF1ZXVlIAorCSAgZGVwdGggYnV0IGRpZCdudCBrZWVwIHRyYWNrIG9mIHVzZXIgc2V0dGluZ3MgZm9yIHRhZ3MgZGVwdGggbG93ZXIgCisJICB0aGFuIDIuCisKK1dlZCBOb3YgMTEgIDEwOjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjFiCisJLSBUaGUgZHJpdmVyIHdhcyB1bmhhcHB5IHdoZW4gY29uZmlndXJlZCB3aXRoIGRlZmF1bHRfdGFncyA+IE1BWF9UQUdTCisJICBIb3BlZnVsbHkgZG91Ymx5LWZpeGVkLgorCS0gVXBkYXRlIHRoZSBDb25maWd1cmUuaGVscCBkcml2ZXIgc2VjdGlvbiB0aGF0IHNwZWFrcyBvZiBUQUdTLgorCitXZWQgT2N0IDIxIDIxOjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjFhCisJLSBDaGFuZ2VzIGZyb20gRWRkaWUgRG9zdCBmb3IgU3BhcmMgYW5kIEFscGhhOgorCSAgaW9yZW1hcC9pb3VubWFwIHN1cHBvcnQgZm9yIFNwYXJjLgorCSAgcGNpdnRvcGh5cyBjaGFuZ2VkIHRvIGJ1c19kdm1hX3RvX3BoeXMuCisJLSBBZGQgdGhlIDUzYzg3NiBkZXNjcmlwdGlvbiB0byB0aGUgY2hpcCB0YWJsZS4gVGhpcyBpcyBvbmx5IHVzZWZ1bCAKKwkgIGZvciBwcmludGluZyB0aGUgcmlnaHQgbmFtZSBvZiB0aGUgY29udHJvbGxlci4KKwktIERFTC00NDEgSXRlbSAyIHdvcmstYXJvdW5kIGZvciB0aGUgNTNjODc2IHJldiA8PSA1ICgweDE1KS4KKwktIEFkZCBhZGRpdGlvbmFsIGNoZWNraW5nIG9mIElOUVVJUlkgZGF0YToKKwkgIENoZWNrIElOUVVJUlkgZGF0YSByZWNlaXZlZCBsZW5ndGggaXMgYXQgbGVhc3QgNy4gQnl0ZSA3IG9mIAorCSAgaW5xdWlyeSBkYXRhIGNvbnRhaW5zIGRldmljZSBmZWF0dXJlcyBiaXRzIGFuZCB0aGUgZHJpdmVyIG1pZ2h0IAorCSAgYmUgY29uZnVzZWQgYnkgZ2FyYmFnZS4gQWxzbyBjaGVjayBwZXJpcGhlcmFsIHF1YWxpZmllci4KKwktIENsZWFudXAgb2YgdGhlIFNDU0kgdGFza3MgbWFuYWdlbWVudDoKKwkgIFJlbW92ZSB0aGUgc3BlY2lhbCBjYXNlIGZvciAzMiB0YWdzLiBOb3cgdGhlIGRyaXZlciBvbmx5IHVzZXMgdGhlIAorCSAgc2NoZW1lIHRoYXQgYWxsb3dzIHVwIHRvIDY0IHRhZ3MgcGVyIExVTi4KKwkgIE1lcmdlIHNvbWUgY29kZSBmcm9tIHRoZSA4OTYgZHJpdmVyLgorCSAgVXNlIGEgMSwzLDUsLi4uTUFYVEFHUyoyKzEgdGFnIG51bWJlcmluZy4gUHJldmlvdXMgZHJpdmVyIGNvdWxkICAKKwkgIHVzZSBhbnkgdGFnIG51bWJlciBmcm9tIDEgdG8gMjUzIGFuZCBzb21lIG5vbiBjb25mb3JtYW50IGRldmljZXMgIAorCSAgbWlnaHQgaGF2ZSBwcm9ibGVtcyB3aXRoIGxhcmdlIHRhZyBudW1iZXJzLgorCS0gJ25vX3N5bmMnIGNoYW5nZWQgdG8gJ25vX2Rpc2MnIGluIHRoZSBSRUFETUUgZmlsZS4gVGhpcyBpcyBhbiBvbGQgCisJICBhbmQgdHJpdmlhbCBtaXN0YWtlIHRoYXQgc2VlbXMgdG8gZGVtb25zdHJhdGUgdGhlIFJFQURNRSBmaWxlIGlzIAorCSAgbm90IG9mdGVuIHJlYWQuIDopCisKK1N1biBPY3QgIDQgMTQ6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDMuMGkKKwktIENvc21ldGljIGNoYW5nZXMgZm9yIHNwYXJjIChidXQgbm90IGZvciB0aGUgZHJpdmVyKSB0aGF0IG5lZWRzICAKKwkgIF9faXJxX2l0b2EoKSB0byBiZSB1c2VkIGZvciBwcmludGVkIElSUSB2YWx1ZSB0byBiZSB1bmRlcnN0YW5kYWJsZS4KKwktIFNvbWUgcHJvYmxlbXMgd2l0aCB0aGUgZHJpdmVyIHRoYXQgZGlkbid0IG9jY3VyIHVzaW5nIGRyaXZlciAyLjVmIAorCSAgd2VyZSBkdWUgdG8gYSBTQ1NJIHNlbGVjdGlvbiBwcm9ibGVtIHRyaWdnZXJlZCBieSBhIGNsZWFybHkgCisJICBkb2N1bWVudGVkIGZlYXR1cmUgdGhhdCBpbiBmYWN0IHNlZW1zIG5vdCB0byB3b3JrOiAoNTNDOFhYIGNoaXBzICAKKwkgIGFyZSBjbGFpbWVkIGJ5IHRoZSBtYW51YWxzIHRvIGJlIGFibGUgdG8gZXhlY3V0ZSBTQ1NJIHNjcmlwdHMganVzdCAKKwkgIGFmdGVyIGFiaXRyYXRpb24gd2hpbGUgdGhlIFNDU0kgY29yZSBpcyBwZXJmb3JtaW5nIFNDU0kgc2VsZWN0aW9uKS4KKwkgIFRoaXMgb3B0aW1pemF0aW9uIGlzIGJyb2tlbiBhbmQgaGFzIGJlZW4gcmVtb3ZlZC4KKwktIFNvbWUgYnJva2VuIHNjc2kgZGV2aWNlcyBhcmUgY29uZnVzZWQgd2hlbiBhIG5lZ290aWF0aW9uIGlzIHN0YXJ0ZWQgCisJICBvbiBhIExVTiB0aGF0IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSByZWFsIGRldmljZS4gQWNjb3JkaW5nIHRvIAorCSAgU0NTSSBzcGVjcywgdGhpcyBpcyBhIGRldmljZSBmaXJtd2FyZSBidWcuIFRoaXMgaGFzIGJlZW4gd29ya2VkIAorCSAgYXJvdW5kIGJ5IG9ubHkgc3RhcnRpbmcgbmVnb3RpYXRpb24gaWYgdGhlIExVTiBoYXMgcHJldmlvdXNseSBiZSAKKwkgIHVzZWQgZm9yIGF0IGxlYXN0IDEgc3VjY2Vzc2Z1bCBTQ1NJIGNvbW1hbmQuCisJLSBUaGUgJ2xhc3QgbWVzc2FnZSBzZW50JyBwcmludGVkIG91dCBvbiBNX1JFSkVDVCBtZXNzYWdlIHJlY2VwdGlvbiAKKwkgIHdhcyByZWFkIGZyb20gdGhlIFNGQlIgaS9vIHJlZ2lzdGVyIGFmdGVyIHRoZSBwcmV2aW91cyBtZXNzYWdlIGhhZCAKKwkgIGJlZW4gc2VudC4gCisJICBUaGlzIHdhcyBub3QgY29ycmVjdCBhbmQgYWZmZWN0cyBhbGwgcHJldmlvdXMgZHJpdmVyIHZlcnNpb25zIGFuZCAKKwkgIHRoZSBvcmlnaW5hbCBGcmVlQlNEIG9uZSBhcyB3ZWxsLiBUaGUgU0NTSSBzY3JpcHRzIGhhcyBiZWVuIGZpeGVkIAorCSAgc28gdGhhdCBpdCBub3cgcHJvdmlkZXMgdGhlIHJpZ2h0IGluZm9ybWF0aW9uIHRvIHRoZSBDIGNvZGUuCisKK1NhdCBKdWwgMTggMTM6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDMuMGcKKwktIFByZWxpbWluYXJ5IGZpeGVzIGZvciBCaWcgRW5kaWFuIChzZW50IGJ5IEVkZGllIEMuIERvc3QpLgorCSAgQmlnIEVuZGlhbiBhcmNoaXRlY3R1cmVzIHNob3VsZCB3b3JrIGFnYWluIHdpdGggdGhlIGRyaXZlci4KKwkgIEVkZGllJ3MgcGF0Y2ggaGFzIGJlZW4gcGFydGlhbGx5IGFwcGxpZWQgc2luY2UgY3VycmVudCAyLjEuMTA5IAorCSAgZG9lcyBub3QgaGF2ZSBhbGwgdGhlIFNwYXJjIGNoYW5nZXMgb2YgdGhlIHZnZXIgdHJlZS4KKwktIFVzZSBvZiBCSVRTX1BFUl9MT05HIGluc3RlYWQgb2YgKH4wVUwgPT0gMHhmZmZmZmZmZlVMKSBoYXMgZml4ZWQKKwkgIHRoZSBwcm9ibGVtIG9ic2VydmVkIHdoZW4gdGhlIGRyaXZlciB3YXMgY29tcGlsZWQgdXNpbmcgRUdDUyBvciAKKwkgIFBHQ0MuCisKK01vbiBKdWwgMTMgMjA6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDMuMGYKKwktIFNvbWUgc3BlbGxpbmcgZml4ZXMuCisJLSBsaW51eC9jb25maWcuaCBtaXNwbGFjZWQgaW4gbmNyNTNjOHh4LmgKKwktIE1PRFVMRV9QQVJNIHN0dWZmIGFkZGVkIGZvciBsaW51eCAyLjEuCisJLSBjaGVjayBJTlFVSVJZIHJlc3BvbnNlIGRhdGEgZm9ybWF0IGlzIGV4YWN0bHkgMi4gCisJLSB1c2UgQklUU19QRVJfTE9ORyBpZiBkZWZpbmVkLiAKKworU3VuIEp1biAyOCAxMjowMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogcmV2aXNpb24gMy4wZQorCS0gU29tZSBjbGVhbnVwLCBzcGVsbGluZyBmaXhlcywgdmVyc2lvbiBjaGVja3MsIGRvY3VtZW50YXRpb25zIAorCSAgY2hhbmdlcywgZXRjIC4uLgorCitTYXQgSnVuIDIwIDIwOjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAzLjBjCisJLSBBZGQgYSBib290IHNldHVwIG9wdGlvbiB0aGF0IGFsbG93cyB0byBzZXQgdXAgZGV2aWNlIHF1ZXVlIGRlcHRocyAKKwkgIGF0IGJvb3QtdXAuIFRoaXMgb3B0aW9uIGlzIHZlcnkgdXNlZnVsIHNpbmNlIExpbnV4IGRvZXMgbm90IAorCSAgYWxsb3cgdG8gY2hhbmdlIHNjc2kgZGV2aWNlIHF1ZXVlIGRlcHRoIG9uY2UgdGhlIHN5c3RlbSBoYXMgYmVlbiAKKwkgIGJvb3RlZCB1cC4KKworU3VuIEp1biAxNSAyMzowMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogcmV2aXNpb24gMy4wYQorCS0gU3VwcG9ydCBmb3IgdXAgdG8gNjQgVEFHUyBwZXIgTFVOLgorCS0gUmV3cml0ZSB0aGUgVEFSR0VUIHZzIExVTiBjYXBhYmlsaXRpZXMgbWFuYWdlbWVudC4KKwkgIENtZFF1ZXVlIGlzIG5vdyBoYW5kbGVkIGFzIGEgTFVOIGNhcGFiaWxpdHkgYXMgaXQgc2hhbGwgYmUuCisJICBUaGlzIGFsc28gZml4ZXMgYSBidWcgdHJpZ2dlcmVkIHdoZW4gZGlzYWJsaW5nIHRhZ2dlZCBjb21tYW5kIAorCSAgcXVldWluZyBmb3IgYSBkZXZpY2UgdGhhdCBoYWQgdGhpcyBmZWF0dXJlIGVuYWJsZWQuCisJLSBSZW1vdmUgdGhlIG5jcl9vcGVubmluZ3MoKSBzdHVmZiB0aGF0IHdhcyB1c2VsZXNzIHVuZGVyIExpbnV4IAorCSAgYW5kIGhhcmQgdG8gdW5kZXJzdGFuZCB0byBtZS4KKwktIEFkZCAic2V0dmVyYm9zZSIgcHJvY2ZzIGRyaXZlciBjb21tYW5kLiBJdCBhbGxvd3MgdG8gdHVuZSAKKwkgIHZlcmJvc2UgbGV2ZWwgYWZ0ZXIgYm9vdC11cC4gU2V0dGluZyB0aGlzIGxldmVsIHRvIHplcm8sIGZvciAKKwkgIGV4YW1wbGUgYXZvaWQgZmxvb2RpbmcgdGhlIHN5c2xvZyBmaWxlLgorCS0gQWRkIEtFUk5fWFhYIHRvIHNvbWUgcHJpbnRrJ3MuCisKK1R1ZSBKdW4gMTAgMjM6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDMuMAorCS0gTGludXggY29uZmlnIGNoYW5nZXMgZm9yIDIuMC4zNDoKKwkgIFJlbW92ZSBOVlJBTSBkZXRlY3Rpb24gY29uZmlnIG9wdGlvbi4gVGhpcyBvcHRpb24gaXMgbm93IGVuYWJsZWQgCisJICBieSBkZWZhdWx0IGJ1dCBjYW4gYmUgZGlzYWJsZWQgYnkgZWRpdGluZyB0aGUgZHJpdmVyIGhlYWRlciBmaWxlLgorCSAgQWRkIGEgUFJPRklMRSBjb25maWcgb3B0aW9uLgorCS0gVXBkYXRlIENvbmZpZ3VyZS5oZWxwCisJLSBBZGQgY2FsbHMgdG8gbmV3IGZ1bmN0aW9uIG1kZWxheSgpIGZvciBtaWxsaS1zZWNvbmRzIGRlbGF5IGlmIAorCSAga2VybmVsIHZlcnNpb24gPj0gMi4xLjEwNS4KKwktIFJlcGxhY2UgYWxsIHByaW50ZihzKSBieSBwcmludGsocykuIEFmdGVyIGFsbCwgdGhlIG5jcjUzYzh4eCBpcyAKKwkgIGEgZHJpdmVyIGZvciBMaW51eC4KKwktIFBlcmZvcm0gYXV0by1zZW5zZSBvbiBDT01NQU5EIFRFUk1JTkFURUQuIE5vdCBzdXJlIGl0IGlzIHVzZWZ1bC4KKwktIFNvbWUgb3RoZXIgbWlub3IgY2hhbmdlcy4KKworVHVlIEp1biA0IDIzOjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAyLjZuCisJLSBDb2RlIGNsZWFudXAgYW5kIHNpbXBsaWZpY2F0aW9uOgorCSAgUmVtb3ZlIGtlcm5lbCAxLjIuWCBhbmQgMS4zLlggc3VwcG9ydC4KKwkgIFJlbW92ZSB0aGUgX29sZF8gdGFyZ2V0IGNhcGFiaWxpdGllcyB0YWJsZS4KKwkgIFJlbW92ZSB0aGUgZXJyb3IgcmVjb3ZlcnkgY29kZSB0aGF0IGhhdmUnbnQgYmVlbiByZWFsbHkgdXNlZnVsLgorCSAgVXNlIGEgc2luZ2xlIGFsaWdubWVudCBib3VuZGFyeSAoQ0FDSEVfTElORV9TSVpFKSBmb3IgZGF0YSAKKwkgIHN0cnVjdHVyZXMuCisJLSBTZXZlcmFsIGFnZ3Jlc3NpdmUgU0NSSVBUUyBvcHRpbWl6YXRpb25zIGFuZCBjaGFuZ2VzOgorCSAgUmVzZWxlY3QgU0NSSVBUUyBjb2RlIHJld3JpdHRlbi4KKwkgIFN1cHBvcnQgZm9yIHNlbGVjdGlvbi9yZXNlbGVjdGlvbiB3aXRob3V0IEFUTi4KKwkgIEFuZCBzb21lIG90aGVycy4KKwktIE1pc2NhbGxhbmVvdXMgY2hhbmdlcyBpbiB0aGUgQyBjb2RlOgorCSAgQ291bnQgYWN0dWFsIG51bWJlciBvZiBDQ0IgcXVldWVkIHRvIHRoZSBjb250cm9sbGVyIChmdXR1cmUgdXNlKS4KKwkgIExvdHMgb2Ygb3RoZXIgbWlub3IgY2hhbmdlcy4KKworV2VkIE1heSAxMyAyMDowMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogcmV2aXNpb24gMi42bQorCS0gUHJvYmxlbSBvZiBtaXNzZWQgU0NTSSBidXMgcmVzZXQgd2l0aCB0aGUgNTNDODk1IGZpeGVkIGJ5IAorCSAgUmljaGFyZCBXYWx0aGFtLiBUaGUgNTNDODk1IG5lZWRzIGFib3V0IDY1MCB1cyBmb3IgdGhlIGJ1cyAKKwkgIG1vZGUgdG8gc2V0dGxlLiBEZWxheXMgdXNlZCB3aGlsZSByZXNldHRpbmcgdGhlIGNvbnRyb2xsZXIgCisJICBhbmQgdGhlIGJ1cyBoYXZlIGJlZW4gYWRqdXN0ZWQuIFRoYW5rcyBSaWNoYXJkIQorCS0gU29tZSBzaW1wbGlmaWNhdGlvbiBmb3IgNjQgYml0IGFyY2ggZG9uZSBjY2IgYWRkcmVzcyB0ZXN0aW5nLgorCS0gQWRkIGEgY2hlY2sgb2YgdGhlIE1TR19PVVQgcGhhc2UgYWZ0ZXIgU2VsZWN0aW9uIHdpdGggQVROLgorCS0gVGhlIG5ldyB0YWdnZWQgcXVldWUgc3R1ZmYgc2VlbXMgb2ssIHNvIHNvbWUgaW5mb3JtYXRpb25uYWwgCisJICBtZXNzYWdlIGhhdmUgYmVlbiBjb25kaXRpb25uZWQgYnkgdmVyYm9zZSA+PSAzLgorCS0gRG9ubm90IHJlc2V0IGlmIGEgU0JNQyBpbnRlcnJ1cHQgcmVwb3J0cyB0aGUgc2FtZSBidXMgbW9kZS4KKwktIFByaW50IG91dCB0aGUgd2hvbGUgZHJpdmVyIHNldC11cC4gU29tZSBvcHRpb25zIHdlcmUgbWlzc2luZyBhbmQgCisJICB0aGUgcHJpbnQgc3RhdGVtZW50IHdhcyBtaXNwbGFjZWQgZm9yIG1vZHVsZXMuCisJLSBJZ25vcmUgYSBTQ1NJIHBhcml0eSBpbnRlcnJ1cHQgaWYgdGhlIGNoaXAgaXMgbm90IGNvbm5lY3RlZCB0byAKKwkgIHRoZSBTQ1NJIGJ1cy4KKworU2F0IE1heSAxIDE2OjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiByZXZpc2lvbiAyLjZsCisJLSBBZGQgQ0NCIGRvbmUgcXVldWUgc3VwcG9ydCBmb3IgQWxwaGEgYW5kIHBlcmhhcHMgc29tZSBvdGhlciAKKwkgIGFyY2hpdGVjdHVyZXMuCisJLSBBZGQgc29tZSBiYXJyaWVycyB0byBlbmZvcmNlIG1lbW9yeSBvcmRlcmluZyBmb3IgeDg2IGFuZCAKKwkgIEFscGhhIGFyY2hpdGVjdHVyZXMuCisJLSBGaXggc29tZXRoaW5nIHRoYXQgbG9va3MgbGlrZSBhbiBvbGQgYnVnIGluIHRoZSBuZWdvIFNJUiAKKwkgIGludGVycnVwdCBjb2RlIGluIGNhc2Ugb2YgbmVnb3RpYXRpb24gZmFpbHVyZS4KKworU2F0IEFwciAyNSAyMTowMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogcmV2aXNpb24gMi42aworCS0gUmVtb3ZlIGFsbCBhY2Nlc3NlcyB0byB0aGUgb24tY2hpcCBSQU0gZnJvbSB0aGUgQyBjb2RlOgorCSAgVXNlIFNDUklQVFMgdG8gbG9hZCB0aGUgb24tY2hpcCBSQU0uCisJICBVc2UgU0NSSVBUUyB0byByZXBhaXIgdGhlIHN0YXJ0IHF1ZXVlIG9uIHNlbGVjdGlvbiB0aW1lb3V0LgorCSAgVXNlIHRoZSBjb3B5IG9mIHNjcmlwdCBpbiBtYWluIG1lbW9yeSB0byBjYWxjdWxhdGUgdGhlIGNoaXAgCisJICBjb250ZXh0IG9uIHBoYXNlIG1pc21hdGNoLgorCS0gVGhlIGFib3ZlIGFsbG93cyBub3cgdG8gdXNlIHRoZSBvbi1jaGlwIFJBTSB3aXRob3V0IHJlcXVpcmluZyAKKwkgIHRvIGdldCBhY2Nlc3MgdG8gdGhlIG9uLWNoaXAgUkFNIGZyb20gdGhlIEMgY29kZS4gVGhpcyBtYWtlcyAKKwkgIG9uLWNoaXAgUkFNIHVzZWFibGUgZm9yIGxpbnV4LTEuMi4xMyBhbmQgZm9yIExpbnV4LUFscGhhIGZvciAKKwkgIGluc3RhbmNlLgorCS0gU29tZSBzaW1wbGlmaWNhdGlvbnMgYW5kIGNsZWFudXBzIGluIHRoZSBTQ1JJUFRTIGFuZCBDIGNvZGUuCisJLSBCdWdsZXQgZml4ZWQgaW4gcGFyaXR5IGVycm9yIHJlY292ZXJ5IFNDUklQVFMgKG5ldmVyIHRlc3RlZCkuCisJLSBNaW5vciB1cGRhdGVzIGluIFJFQURNRS5uY3I1M2M4eHguCisKK1dlZCBBcHIgMTUgMjE6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDIuNmoKKwktIEluY29ycG9yYXRlIGNoYW5nZXMgZnJvbSBsaW51eC0yLjEuOTUgbmNyNTNjOHh4IGRyaXZlciB2ZXJzaW9uLgorCS0gQWRkIFNNUCBzdXBwb3J0IGZvciBsaW51eC0yLjEuOTUgYW5kIGFib3ZlLgorCS0gRml4IGEgYnVnIHdoZW4gUVVFVUUgRlVMTCBpcyByZXR1cm5lZCBhbmQgbm8gY29tbWFuZHMgYXJlIAorCSAgZGlzY29ubmVjdGVkLiBUaGlzIGhhcHBlbnMgd2l0aCBBdGxhcyBJIC8gTDkxMiBhbmQgbWF5IGhhcHBlbiAKKwkgIHdpdGggQXRsYXMgSUkgLyBMWFk0LgorCS0gTmFpbCBhbm90aGVyIG9uZSBvbiBDSEVDSyBjb25kaXRpb24gd2hlbiByZXF1ZXVpbmcgdGhlIGNvbW1hbmQgCisJICBmb3IgYXV0by1zZW5zZS4KKwktIENhbGwgc2NzaV9kb25lKCkgZm9yIGFsbCBjb21wbGV0ZWQgY29tbWFuZHMgYWZ0ZXIgaW50ZXJydXB0IAorCSAgaGFuZGxpbmcuCisJLSBJbmNyZWFzZSB0aGUgZG9uZSBxdWV1ZSB0byAyNCBlbnRyaWVzLgorCitTYXQgQXByIDQgMjA6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDIuNmkKKwktIENURVNUMCBpcyB1c2VkIGJ5IHRoZSA1M0M4ODUgZm9yIFBvd2VyIE1hbmFnZW1lbnQgYW5kIAorCSAgcHJpb3JpdHkgc2V0dGluZyBiZXR3ZWVuIHRoZSAyIGZ1bmN0aW9ucy4KKwkgIFVzZSBTRElEIGluc3RlYWQgYXMgYWN0dWFsIHRhcmdldCBudW1iZXIuIEp1c3QgaGF2ZSBoYWQgdG8gCisJICBvdmVyd3JpdGUgaXQgd2l0aCBTU0lEIG9uIHJlc2VsZWN0aW9uLgorCS0gU3BsaXQgREFUQV9JTiBhbmQgREFUQV9PVVQgc2NyaXB0cyBpbnRvIDIgc3ViLXNjcmlwdHMuCisJICA2NCBzZWdtZW50cyBhcmUgbW92ZWQgZnJvbSBvbi1jaGlwIFJBTSBzY3JpcHRzLgorCSAgSWYgbW9yZSBzZWdtZW50cywgYSBzY3JpcHQgaW4gbWFpbiBtZW1vcnkgaXMgdXNlZCBmb3IgdGhlIAorCSAgYWRkaXRpb25hbCBzZWdtZW50cy4KKwktIFNpbmNlIHRoZSBTQ1JJUFRTIHByb2Nlc3NvciBjb250aW51ZXMgU0NSSVBUUyBleGVjdXRpb24gYWZ0ZXIgCisJICBoYXZpbmcgd29uIGFyYml0cmF0aW9uLCBkbyBzb21lIHN0dWZmIHByaW9yIHRvIHRlc3RpbmcgYW55IFNDU0kgCisJICBwaGFzZSBvbiByZXNlbGVjdGlvbi4gVGhpcyBzaG91bGQgaGF2ZSB0aGUgdmVydHVlIHRvIHByb2Nlc3MgCisJICBzY3JpcHRzIGluIHBhcmFsbGVsIHdpdGggdGhlIFNDU0kgY29yZSBwZXJmb3JtaW5nIHNlbGVjdGlvbi4KKwktIEluY3JlYXNlIHRoZSBkb25lIHF1ZXVlIHRvIDEyIGVudHJpZXMuCisKK1N1biBNYXIgMjkgMTI6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDIuNmgKKwktIFNvbWUgZml4ZXMuCisKK1R1ZSBNYXIgMjYgMjM6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDIuNmcKKwktIE5ldyBkb25lIHF1ZXVlLiA4IGVudHJpZXMgYnkgZGVmYXVsdCAoNiBhbHdheXMgdXNlYWJsZSkuCisJICBDYW4gYmUgaW5jcmVhc2VkIGlmIG5lZWRlZC4KKwktIFJlc291cmNlcyBtYW5hZ2VtZW50IHVzaW5nIGRvdWJseSBsaW5rZWQgcXVldWVzLgorCS0gTmV3IGF1dG8tc2Vuc2UgYW5kIFFVRVVFIEZVTEwgaGFuZGxpbmcgdGhhdCBkb2VzIG5vdCBuZWVkIHRvIAorCSAgc3RhbGwgdGhlIE5DUiBxdWV1ZSBhbnkgbW9yZS4KKwktIE5ldyBDQ0Igc3RhcnZhdGlvbiBhdm9pZGluZyBhbGdvcml0aG0uCisJLSBQcmVwYXJlIENDQnMgZm9yIFNDU0kgY29tbWFuZHMgdGhhdCBjYW5ub3QgYmUgcXVldWVkLCBpbnN0ZWFkIG9mIAorCSAgaW5zZXJ0aW5nIHRoZXNlIGNvbW1hbmRzIGludG8gdGhlIHdhaXRpbmcgbGlzdC4gVGhlIHdhaXRpbmcgbGlzdCAKKwkgIGlzIG5vdyBvbmx5IHVzZWQgd2hpbGUgcmVzZXR0aW5nIGFuZCB3aGVuIG1lbW9yeSBmb3IgQ0NCcyBpcyBub3QgCisJICB5ZXQgYXZhaWxhYmxlPworCitTdW4gRmViIDggMjI6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDIuNmYKKwktIFNvbWUgZml4ZXMgaW4gb3JkZXIgdG8gcmVhbGx5IHN1cHBvcnQgdGhlIDUzQzg5NSwgYXQgbGVhc3Qgd2l0aCAKKwkgIEZBU1QtMjAgZGV2aWNlcy4KKwktIEhlYXZ5IGNoYW5nZXMgaW4gdGhlIHRhcmdldC9sdW4gcmVzb3VyY2VzIG1hbmFnZW1lbnQgdG8gYWxsb3cgCisJICB0aGUgc2NyaXB0cyB0byBqdW1wIGRpcmVjdGx5IHRvIHRoZSBDQ0Igb24gcmVzZWxlY3Rpb24gaW5zdGVhZCAKKwkgIG9mIHdhbGtpbmcgb24gdGhlIGx1biBDQ0JzIGxpc3QuIFVwIHRvIDMyIHRhZ3MgcGVyIGx1biBhcmUgbm93IAorCSAgc3VwcG9ydGVkIHdpdGhvdXQgc2NyaXB0IHByb2Nlc3NvciBhbmQgUENJIHRyYWZmaWMgb3ZlcmhlYWQuCisKK1N1biBKYW4gMTEgMjI6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHJldmlzaW9uIDIuNmQKKwktIG5ldyAoZGlmZmVyZW50ID8pIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzdGFydCBxdWV1ZToKKyAgICAgICAgICBVc2UgYSBzaW1wbGUgQ0FMTCB0byBhIGxhdW5jaCBzY3JpcHQgaW4gdGhlIENDQi4KKwktIGltcGxlbWVudCBhIG1pbmltYWwgZG9uZSBxdWV1ZSAoMSBlbnRyeSA6LSkgKS4KKyAgICAgICAgICB0aGlzIGF2b2lkIHNjYW5uaW5nIGFsbCBDQ0JzIG9uIElOVCBGTFkgKE9ubHkgc2NhbiBhbGwgQ0NCcywgb24gCisgICAgICAgICAgb3ZlcmZsb3cpLiBIaXQgcmF0aW8gaXMgYmV0dGVyIHRoYW4gOTkuOSAlIG9uIG15IHN5c3RlbSwgc28gbm8gCisgICAgICAgICAgbmVlZCB0byBoYXZlIGEgbGFyZ2VyIGRvbmUgcXVldWUuCisJLSBnZW5lcmFsaXphdGlvbiBvZiB0aGUgcmVzdGFydCBvZiBDQ0Igb24gc3BlY2lhbCBjb25kaXRpb24gYXMgCisgICAgICAgICAgQWJvcnQsIFFVRVVFIEZVTEwsIENIRUNLIENPTkRJVElPTi4KKyAgICAgICAgICBUaGlzIGhhcyBiZWVuIGNhbGxlZCAnc2lsbHkgc2NoZWR1bGVyJy4KKwktIG1ha2UgYWxsIHRoZSBwcm9maWxpbmcgY29kZSBjb25kaXRpb25uZWQgYnkgYSBjb25maWcgb3B0aW9uLgorCSAgVGhpcyBzcGFyZSBzb21lIFBDSSB0cmFmZmljIGFuZCBDIGNvZGUgd2hlbiB0aGlzIGZlYXR1cmUgaXMgbm90IAorICAgICAgICAgIG5lZWRlZC4KKwktIGhhbmRsZSBtb3JlIGNsZWFubHkgdGhlIHNpdHVhdGlvbiB3aGVyZSBkaXJlY3Rpb24gaXMgdW5rbm93bi4KKwkgIFRoZSBwb2ludGVycyBwYXRjaGluZyBpcyBub3cgcGVyZm9ybWVkIGJ5IHRoZSBTQ1JJUFRTIHByb2Nlc3Nvci4KKwktIHJlbW92ZSBzb21lIHVzZWxlc3Mgc2NyaXB0cyBpbnN0cnVjdGlvbnMuCisKKwlQb3J0ZWQgZnJvbSBkcml2ZXIgMi41IHNlcmllczoKKyAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJLSBVc2UgRkFTVC01IGluc3RlYWQgb2YgU0xPVyBmb3Igc2xvdyBzY3NpIGRldmljZXMgYWNjb3JkaW5nIHRvIAorCSAgbmV3IFNQSS0yIGRyYWZ0LgorCS0gTWFrZSBzb21lIGNoYW5nZXMgaW4gb3JkZXIgdG8gYWNjb21tb2RhdGUgd2l0aCA4NzUgcmV2IDw9IDMgCisJICBkZXZpY2UgZXJyYXRhIGxpc3RpbmcgMzk3LiBNaW5vciBjb25zZXF1ZW5jZXMgYXJlOgorCSAgLiBMZWF2ZSB1c2Ugb2YgUENJIFdyaXRlIGFuZCBJbnZhbGlkYXRlIHVuZGVyIHVzZXIgY29udHJvbC4KKwkgICAgTm93LCBieSBkZWZhdWx0IHRoZSBkcml2ZXIgZG9lcyBub3QgZW5hYmxlIFBDSSBNV0kgYW5kIG9wdGlvbgorCSAgICAnc3BlY2Y6eScgaXMgcmVxdWlyZWQgaW4gb3JkZXIgdG8gZW5hYmxlIHRoaXMgZmVhdHVyZS4KKwkgIC4gTWVtb3J5IFJlYWQgTGluZSBpcyBub3QgZW5hYmxlZCBmb3IgODc1IGFuZCA4NzUtbGlrZSBjaGlwcy4KKwkgIC4gUHJvZ3JhbW1lZCBidXJzdCBsZW5ndGggc2V0IHRvIDY0IERXT1JEUyAoaW5zdGVhZCBvZiAxMjgpLgorCSAgICAoTm90ZTogU1lNQklPUyB1c2VzIDMyIERXT1JEUyBmb3IgdGhlIFNETVMgQklPUykKKwktIEFkZCAnYnVzY2hrJyBib290IG9wdGlvbi4KKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgY2hlY2tpbmcgb2YgU0NTSSBCVVMgZGF0YSBsaW5lcyBhZnRlciBTQ1NJIAorCSAgUkVTRVQgKHNldCBieSBkZWZhdWx0KS4gKFN1Ym1pdHRlZCBieSBSaWNoYXJkIFdhbHRoYW0pLgorCS0gVXBkYXRlIHRoZSBSRUFETUUgZmlsZS4KKwktIERpc3BhdGNoIENPTkRJVElPTiBNRVQgYW5kIFJFU0VSVkFUSU9OIENPTkZMSUNUIHNjc2kgc3RhdHVzIAorCSAgYXMgT0sgZHJpdmVyIHN0YXR1cy4KKwktIFVwZGF0ZSB0aGUgUkVBRE1FIGZpbGUgYW5kIHRoZSBTeW1iaW9zIE5WUkFNIGZvcm1hdCBkZWZpbml0aW9uIAorCSAgd2l0aCByZW1vdmFibGUgbWVkaWEgZmxhZ3MgdmFsdWVzIChhdmFpbGFibGUgd2l0aCBTRE1TIDQuMDkpLgorCS0gU2V2ZXJhbCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgZml4LXVwcyBmb3IgcG93ZXJwYy4KKwkgIChQYXRjaCBzZW50IGJ5IENvcnQpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5zeW01M2M4eHggYi9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLnN5bTUzYzh4eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjk4NWVjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5zeW01M2M4eHgKQEAgLTAsMCArMSw1OTMgQEAKK1NhdCBNYXkgMTIgMTI6MDAgMjAwMSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuNy4zYworCS0gRW5zdXJlIExFREMgYml0IGluIEdQQ05UTCBpcyBjbGVhcmVkIHdoZW4gcmVhZGluZyB0aGUgTlZSQU0uCisJICBGaXggc2VudCBieSBTdGlnIFRlbGZlciA8c3RpZ0BhcGktbmV0d29ya3MuY29tPi4KKwktIEJhY2twb3J0IGZyb20gU1lNLTIgdGhlIHdvcmstYXJvdW5kIHRoYXQgYWxsb3dzIHRvIHN1cHBvcnQgCisJICBoYXJkd2FyZXMgdGhhdCBmYWlsIFBDSSBwYXJpdHkgY2hlY2tpbmcuCisJLSBDaGVjayB0aGF0IHdlIHJlY2VpdmVkIGF0IGxlYXN0IDggYnl0ZXMgb2YgSU5RVUlSWSByZXNwb25zZSAKKwkgIGZvciBieXRlIDcsIHRoYXQgY29udGFpbnMgZGV2aWNlIGNhcGFiaWxpdGllcywgdG8gYmUgdmFsaWQuCisJLSBEZWZpbmUgc2NzaV9zZXRfcGNpX2RldmljZSgpIGFzIG5pbCBmb3Iga2VybmVsIDwgMi40LjQuCisJLSArIEEgY291cGxlIG9mIG1pbm9yIGNoYW5nZXMuCisJICAKK1NhdCBBcHIgNyAxOTozMCAyMDAxIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS43LjNiCisJLSBGaXggYW4gdW5hbGlnbmVkIExPQUQgZnJvbSBzY3JpcHRzICh3YXMgdXNlZCBhcyBkdW1teSByZWFkKS4KKwktIEluIG5jcl9zb2Z0X3Jlc2V0KCksIG9ubHkgdHJ5IHRvIEFCT1JUIHRoZSBjdXJyZW50IG9wZXJhdGlvbiAKKwkgIGZvciBjaGlwcyB0aGF0IHN1cHBvcnQgU1JVTiBiaXQgaW4gSVNUQVQxIGFuZCBpZiBTQ1JJUFRTIGFyZSAKKwkgIGN1cnJlbnRseSBydW5uaW5nLCBhcyA4OTYgYW5kIDEwMTAgbWFudWFscyBzdWdnZXN0LgorCS0gSW4gdGhlIENDQiBhYm9ydCBwYXRoLCBkbyBub3QgYXNzdW1lIHRoYXQgdGhlIENDQiBpcyBjdXJyZW50bHkgCisJICBxdWV1ZWQgdG8gU0NSSVBUUy4gVGhpcyBpcyBub3QgYWx3YXlzIHRydWUsIG5vdGFibHkgYWZ0ZXIgYSAKKwkgIFFVRVVFIEZVTEwgc3RhdHVzIG9yIHdoZW4gdXNpbmcgdW50YWdnZWQgY29tbWFuZHMuCisKK1N1biBNYXIgNCAxODozMCAyMDAxIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS43LjNhCisJLSBGaXggYW4gaXNzdWUgaW4gdGhlIG5jcl9pbnRfdWRjKCkgKHVuZXhwZWN0ZWQgZGlzY29ubmVjdCkKKwkgIGhhbmRsaW5nLiBJZiB0aGUgRFNBIGRpZG4ndCBtYXRjaCBhIENDQiwgYSBiYWQgd3JpdGUgdG8gCisJICBtZW1vcnkgY291bGQgaGFwcGVuLgorCitNb24gRmViIDEyIDIyOjMwIDIwMDEgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjcuMworCS0gU3VwcG9ydCBmb3IgaHBwYS4KKwkgIFRpbnkgcGF0Y2ggc2VudCB0byBtZSBieSBSb2JlcnQgSGlyc3QuCisJLSBUaW55IHBhdGNoIGZvciBpYTY0IHNlbnQgdG8gbWUgYnkgUGFtZWxhIERlbGFuZXkuCisKK1R1ZSBGZWIgNiAxMzozMCAyMDAxIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS43LjMtcHJlMQorCS0gQ2FsbCBwY2lfZW5hYmxlX2RldmljZSgpIGFzIEFDIHdhbnRzIHRoaXMgdG8gYmUgZG9uZS4KKwktIEdldCBib3RoIHRoZSBCQVIgY29va2llcyB1c2VkIGJ5IENQVSBhbmQgYWN0dWFsIFBDSSBCQVIgCisJICB2YWx1ZXMgdXNlZCBmcm9tIFNDUklQVFMuIFJlY2VudCBQQ0kgY2hpcHMgYXJlIGFibGUgdG8gCisJICBhY2Nlc3MgdGhlbXNlbHZlcyB1c2luZyBpbnRlcm5hbCBjeWNsZXMsIGJ1dCB0aGV5IGNvbXBhcmUgCisJICBCQVIgdmFsdWVzIHRvIGRlc3RpbmF0aW9uIGFkZHJlc3MgdG8gbWFrZSBkZWNpc2lvbi4KKwkgIEVhcmxpZXIgY2hpcHMgc2ltcGx5IHVzZSBQQ0kgdHJhbnNhY3Rpb25zIHRvIGFjY2VzcyBJTyAKKwkgIHJlZ2lzdGVycyBmcm9tIFNDUklQVFMuCisJICBUaGUgYnVzX2R2bWFfdG9fbWVtKCkgaW50ZXJmYWNlIHRoYXQgcmV2ZXJzZXMgdGhlIGFjdHVhbCAKKwkgIFBDSSBCQVIgdmFsdWUgZnJvbSB0aGUgQkFSIGNvb2tpZSBpcyBub3cgdXNlbGVzcy4KKwkgIFRoaXMgcG9pbnQgaGFkIGJlZW4gZGlzY3Vzc2VkIGF0IHRoZSBsaXN0IGFuZCB0aGUgc29sdXRpb24gCisJICBnb3QgYXBwcm92ZWQgYnkgUENJIGNvZGUgbWFpbnRhaW5lciAoTWFydGluIE1hcmVzKS4KKwktIE1lcmdlIGNoYW5nZXMgZm9yIGxpbnV4LTIuNCB0aGF0IGRlY2xhcmUgdGhlIGhvc3QgdGVtcGxhdGUgCisJICBpbiB0aGUgZHJpdmVyIG9iamVjdCBhbHNvIHdoZW4gdGhlIGRyaXZlciBpcyBzdGF0aWNhbGx5IAorCSAgbGlua2VkIHdpdGggdGhlIGtlcm5lbC4KKwktIEluY3JlYXNlIFNDU0kgbWVzc2FnZSBzaXplIHVwIHRvIDEyIGJ5dGVzLCBnaXZlbiB0aGF0IDggCisJICBieXRlcyB3YXMgbm90IGVub3VnaCBmb3IgdGhlIFBQUiBtZXNzYWdlIChmaXgpLgorCS0gQWRkIGZpZWxkICdtYXhvZmZzX3N0JyAobWF4IG9mZnNldCBmb3IgU1QgZGF0YSB0cmFuc2ZlcnMpLgorCSAgVGhlIEMxMDEwIHN1cHBvcnRzIG9mZnNldCA2MiBpbiBEVCBtb2RlIGJ1dCBvbmx5IDMxIGluIAorCSAgU1QgbW9kZSwgdG8gMiBkaWZmZXJlbnQgdmFsdWVzIGZvciB0aGUgbWF4IFNDU0kgb2Zmc2V0IAorCSAgYXJlIG5lZWRlZC4gUmVwbGFjZSB0aGUgb2J2aW91c2x5IHdyb25nIG1hc2tpbmcgb2YgdGhlIAorCSAgb2Zmc2V0IGFnYWluc3QgMHgxZiBmb3IgU1QgbW9kZSBieSBhIGxvd2VyaW5nIHRvIAorCSAgbWF4b2Zmc19zdCBvZiB0aGUgU0NTSSBvZmZzZXQgaW4gU1QgbW9kZS4KKwktIFJlZmluZSBhIHdvcmstYXJvdW5kIGZvciB0aGUgQzEwMTAtNjYuIFJldmlzaW9uIDEgZG9lcyAKKwkgIG5vdCByZXF1aXJlcyBleHRyYSBjeWNsZXMgaW4gRFQgREFUQSBPVVQgcGhhc2UuCisJLSBBZGQgYSBtaXNzaW5nIGVuZGlhbi1pemF0aW9uIChhYnJ0X3RibC5hZGRyKS4KKwktIE1pbm9yIGNsZWFuLXVwIGluIHRoZSBucCBzdHJ1Y3R1cmUgZm9yIGZpZWxkcyBhY2Nlc3NlZCAKKwkgIGZyb20gU0NSSVBUUyB0aGF0IHJlcXVpcmVzIHNwZWNpYWwgYWxpZ25tZW50cy4KKworU3VuIFNlcCAyNCAyMTozMCAyMDAwIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS43LjIKKwktIFJlbW92ZSB0aGUgaGFjayBmb3IgUFBDIGFkZGVkIGluIHByZXZpb3VzIGRyaXZlciB2ZXJzaW9uLgorCS0gQWRkIEZFX0RBQyBmZWF0dXJlIGJpdCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIDY0IGJpdCBQQ0kgCisJICBhZGRyZXNzaW5nIChGRV9EQUMpIGFuZCA2NCBiaXQgUENJIGludGVyZmFjZSAoRkVfNjRCSVQpLgorCS0gR2V0IHJpZCBvZiB0aGUgYm9vdCBjb21tYW5kIGxpbmUgInVsdHJhOiIgYXJndW1lbnQuCisJICBUaGlzIHBhcmFtZXRlciB3YXNuJ3QgdGhhdCBjbGV2ZXIgc2luY2Ugd2UgY2FuIHVzZSAic3luYzoiIAorCSAgZm9yIFVsdHJhL1VsdHJhMiBzZXR0aW5ncywgYW5kIGZvciBVbHRyYTMgd2UgbWF5IHdhbnQgdG8gCisJICBwYXNzIFBQUiBvcHRpb25zIChmb3Igbm93IG9ubHkgRFQgY2xvY2tpbmcpLgorCS0gQWRkIEZFX1ZBUkNMSyBmZWF0dXJlIGJpdCB0aGF0IGluZGljYXRlcyB0aGF0IFNDU0kgY2xvY2sgCisJICBmcmVxdWVuY3kgbWF5IHZhcnkgZGVwZW5kaW5nIG9uIGJvYXJkIGRlc2lnbiBhbmQgdGh1cywgCisJICB0aGUgZHJpdmVyIHNob3VsZCB0cnkgdG8gZXZhbHVhdGUgdGhlIFNDU0kgY2xvY2suCisJLSBTaW1wbGlmeSB0aGUgd2F5IHRoZSBkcml2ZXIgZGV0ZXJtaW5lIHRoZSBTQ1NJIGNsb2NrOgorCSAgVUxUUkEzIC0+IDE2MCBNSHosIFVMVFJBMiAtPiA4MCBNSHogb3RoZXJ3aXNlIDQwIE1Iei4KKwkgIE1lYXN1cmUgdGhlIFNDU0kgY2xvY2sgZnJlcXVlbmN5IGlmIEZFX1ZBUkNMSyBpcyBzZXQuCisJLSBSZW1vdmUgRkVfQ0xLODAgZmVhdHVyZSBiaXQgdGhhdCBnb3QgdXNlbGVzcy4KKwktIEFkZCBzdXBwb3J0IGZvciB0aGUgU1lNNTNDODc1QSAoUGFtZWxhIERlbGFuZXkpLgorCitXZWQgSnVsIDI2IDIzOjMwIDIwMDAgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjcuMQorCS0gUHJvdmlkZSBPcGVuRmlybWFyZSBwYXRoIHRocm91Z2ggdGhlIHByb2MgRlMgb24gUFBDLgorCS0gRG93bmxvYWQgb2Ygb24tY2hpcCBTUkFNIHVzaW5nIG1lbWNweV90b2lvKCkgZG9lc24ndCB3b3JrIAorCSAgb24gUFBDLiBSZXN0b3JlIHByZXZpb3VzIG1ldGhvZCAoTUVNT1JZIE1PVkUgZnJvbSBTQ1JJUFRTKS4KKwktIFJlbW92ZSB0cmFpbGluZyBhcmd1bWVudCAjMiBmcm9tIGEgY291cGxlIG9mICN1bmRlZnMuCisKK1N1biBKdWwgMDkgMTY6MzAgMjAwMCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuNy4wCisJLSBSZW1vdmUgdGhlIFBST0ZJTEUgQyBhbmQgU0NSSVBUUyBjb2RlLgorCSAgVGhpcyBmYWNpbGl0eSB3YXMgbm90IHRoaXMgdXNlZnVsIGFuZCB0aHVzIHdhcyBub3QgbG9uZ2VyIAorCSAgZGVzaXJhYmxlIGdpdmVuIHRoZSBpbmNyZWFzaW5nIGNvbXBsZXhpdHkgb2YgdGhlIGRyaXZlciBjb2RlLgorCS0gTWVyZ2VzIGZyb20gRnJlZUJTRCBzeW0tMS42LjIgZHJpdmVyOgorCSAgKiBDbGFyaWZ5IG1lbW9yeSBiYXJyaWVycyBuZWVkZWQgYnkgdGhlIGRyaXZlciBmb3IgYXJjaGl0ZWN0dXJlcyAKKwkgICAgdGhhdCBpbXBsZW1lbnQgYSB3ZWFrIG1lbW9yeSBvcmRlcmluZy4KKwkgICogU2ltcGxlciBoYW5kbGluZyBvZiBpbGxlZ2FsIHBoYXNlcyBhbmQgZGF0YSBvdmVycnVuIGZyb20gCisJICAgIFNDUklQVFMuIFRoZXNlIGVycm9ycyBhcmUgbm93IGltbWVkaWF0ZWx5IHJlcG9ydGVkIHRvIAorCSAgICB0aGUgQyBjb2RlIGJ5IGFuIGludGVycnVwdC4KKwkgICogU3luYyB0aGUgcmVzaWR1YWwgaGFuZGxpbmcgY29kZSB3aXRoIHN5bS0xLjYuMiBhbmQgbm93IAorCSAgICByZXBvcnQgYHJlc2lkJyB0byB1c2VyIGZvciBsaW51eCB2ZXJzaW9uID49IDIuMy45OSAKKwktIEdlbmVyYWwgY2xlYW51cDoKKwkgIE1vdmUgZGVmaW5pdGlvbnMgZm9yIGJhcnJpZXJzIGFuZCBJTy9NTUlPIG9wZXJhdGlvbnMgdG8gdGhlIAorCSAgc3ltNTNjOHh4X2RlZnMuaCBoZWFkZXIgZmlsZXMuIFRoZXkgYXJlIG5vdyBzaGFyZWQgYnkgdGhlIAorCSAgYm90aCBkcml2ZXJzLgorCSAgUmVtb3ZlIHVudXNlZCBvcHRpb25zIHRoYXQgY2xhaW1lZCB0byBvcHRpbWl6ZSBmb3IgdGhlIDg5Ni4KKwkgIElmIGZhY3QsIHRoZXkgd2VyZSBub3QgdGhpcyBjbGV2ZXIuIDopCisJICBVc2UgU0NTSV9OQ1JfSU9NQVBQRUQgaW5zdGVhZCBvZiBOQ1JfSU9NQVBQRUQuCisJICBSZW1vdmUgYSBjb3VwbGUgb2YgdW51c2VkIGZpZWxkcyBmcm9tIGRhdGEgc3RydWN0dXJlcy4KKworVGh1IE1heSAxMSAxMjo0MCAyMDAwIFBhbSBEZWxhbmV5IChwYW0uZGVsYW5leUBsc2lsLmNvbSkKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuNmIKKwktIE1lcmdlZCB2ZXJzaW9uLgorCitNb24gQXByIDI0IDEyOjAwIDIwMDAgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjVtCisJLSBSZXR1cm4gdmFsdWUgMSAoaW5zdGVhZCBvZiAwKSBmcm9tIHRoZSBkcml2ZXIgc2V0dXAgcm91dGluZS4KKwktIERvIG5vdCBlbmFibGUgUENJIERBQyBjeWNsZXMuIFRoaXMganVzdCBicm9rZSBzdXBwb3J0IGZvciAKKwkgIFNZTTUzNEM4OTYgb24gc3BhcmM2NC4gUHJvYmxlbSBmaXhlZCBieSBEYXZpZCBTLiBNaWxsZXIuCisKK0ZyaSBBcHIgMTQgOTowMCAyMDAwIFBhbSBEZWxhbmV5IChwYW0uZGVsYW5leUBsc2lsLmNvbSkKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuNmItOQorCS0gQWRkZWQgNTNDMTAxMF82NiBzdXBwb3J0LgorCS0gU21hbGwgZml4IHRvIGludGVncml0eSBjaGVja2luZyBjb2RlLgorCS0gUmVtb3ZlZCByZXF1aXJlbWVudCBmb3IgaW50ZWdyaXR5IGNoZWNraW5nIGlmIHdhbnQgdG8gcnVuCisJICBhdCB1bHRyYSAzLgorIAorU2F0IEFwciAxICAxMjowMCAyMDAwIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS41bAorCS0gVGlueSBjaGFuZ2UgZm9yIF9fc3BhcmNfXyBhcHBlYXJlZCBpbiAyLjMuOTktcHJlNC4xIHRoYXQgCisJICBhcHBsaWVzIHRvIGNhY2hlIGxpbmUgc2l6ZSAoPyBQcm9iYWJseSBmcm9tIERhdmlkIFMgTWlsbGVyKS4KKwktIE1ha2Ugc3VyZSBubyBkYXRhIHRyYW5zZmVyIHdpbGwgaGFwcGVuIGZvciBTY3NpX0NtbmQgcmVxdWVzdHMgCisJICB0aGF0IHN1cHBseSBTQ1NJX0RBVEFfTk9ORSBkaXJlY3Rpb24gKHRoaXMgYXZvaWRzIHNvbWUgQlVHKCkgCisJICBzdGF0ZW1lbnQgaW4gdGhlIFBDSSBjb2RlIHdoZW4gYSBkYXRhIGJ1ZmZlciBpcyBhbHNvIHN1cHBsaWVkKS4KKworU2F0IE1hciAxMSAxMjowMCAyMDAwIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS42Yi01CisJLSBUZXN0IGFnYWluc3QgZXhwZWN0ZWQgZGF0YSB0cmFuc2ZlciBkaXJlY3Rpb24gZnJvbSBTQ1JJUFRTLgorCS0gQWRkIHN1cHBvcnQgZm9yIHRoZSBuZXcgZHluYW1pYyBkbWEgbWFwcGluZyBrZXJuZWwgaW50ZXJmYWNlLgorCSAgUmVxdWlyZXMgTGludXgtMi4zLjQ3ICh0ZXN0ZWQgd2l0aCBwcmUtMi4zLjQ3LTYpLgorCSAgTWFueSB0aGFua3MgdG8gRGF2aWQgUy4gTWlsbGVyIGZvciBoaXMgcHJlbGltaW5hcnkgY2hhbmdlcyAKKwkgIHRoYXQgaGF2ZSBiZWVuIHVzZWZ1bCBndWlkZWxpbmVzLgorCS0gR2V0IGRhdGEgdHJhbnNmZXIgZGlyZWN0aW9uIGZyb20gdGhlIHNjc2kgY29tbWFuZCBzdHJ1Y3R1cmUgCisJICAoU2NzaV9DbW5kKSB3aXRoIGtlcm5lbHMgdGhhdCBwcm92aWRlIHRoaXMgaW5mb3JtYXRpb24uCisKK01vbiBNYXIgIDYgMjM6MzAgMjAwMCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuNWsKKwktIFRlc3QgYWdhaW5zdCBleHBlY3RlZCBkYXRhIHRyYW5zZmVyIGRpcmVjdGlvbiBmcm9tIFNDUklQVFMuCisJLSBSZXZlcnQgdGhlIGNoYW5nZSBpbiAnbmNyX2ZsdXNoX2RvbmVfY21kcygpJyBidXQgdW5tYXAgdGhlIAorCSAgc2NzaSBkbWEgYnVmZmVyIHByaW9yIHRvIHF1ZXVlaW5nIHRoZSBjb21tYW5kIHRvIG91ciBkb25lIAorCSAgbGlzdC4KKwktIE1pc2NlbGxhbmVvdXMgKG1pbm9yKSBmaXhlcyBpbiB0aGUgY29kZSBhZGRlZCBpbiBkcml2ZXIgCisJICB2ZXJzaW9uIDEuNWouCisKK01vbiBGZWIgMTQgNDowMCAyMDAwIFBhbSBEZWxhbmV5IChwYW0uZGVsYW5leUBsc2lsLmNvbSkKKyAJKiB2ZXJzaW9uIHN5bTUzYzh4eC1wcmUtMS42Yi0yLgorCS0gVXBkYXRlZCB0aGUgU0NSSVBUUyBlcnJvciBoYW5kbGluZyBvZiB0aGUgU1dJREUKKwkgIGNvbmRpdGlvbiAtIHRvIHJlbW92ZSBhbnkgcmVhZHMgb2YgdGhlIHNiZGwKKwkgIHJlZ2lzdGVyLiBDaGFuZ2VzIG5lZWRlZCBiZWNhdXNlIHRoZSA4OTYgYW5kIDEwMTAKKwkgIGNoaXBzIHdpbGwgY2hlY2sgcGFyaXR5IGluIHNvbWUgc3BlY2lhbCBjaXJjdW1zdGFuY2VzLgorCSAgVGhpcyB3aWxsIGNhdXNlIGEgcGFyaXR5IGVycm9yIGludGVycnVwdCBpZiBub3QgaW4KKwkgIGRhdGEgcGhhc2UuICBDaGFuZ2VzIGJhc2VkIG9uIHRob3NlIG1hZGUgaW4gdGhlCisJICBGcmVlQlNEIGRyaXZlciB2ZXJzaW9uIDEuMy4yLgorCitTdW4gRmViIDIwIDExOjAwIDIwMDAgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjVqCisJLSBBZGQgc3VwcG9ydCBmb3IgdGhlIG5ldyBkeW5hbWljIGRtYSBtYXBwaW5nIGtlcm5lbCBpbnRlcmZhY2UuCisJICBSZXF1aXJlcyBMaW51eC0yLjMuNDcgKHRlc3RlZCB3aXRoIHByZS0yLjMuNDctNikuCisJICBNYW55IHRoYW5rcyB0byBEYXZpZCBTLiBNaWxsZXIgZm9yIGhpcyBwcmVsaW1pbmFyeSBjaGFuZ2VzIAorCSAgdGhhdCBoYXZlIGJlZW4gdXNlZnVsIGd1aWRlbGluZXMsIGZvciBoYXZpbmcgcmV2aWV3ZWQgdGhlIAorCSAgY29kZSBhbmQgaGF2aW5nIHRlc3RlZCB0aGlzIGRyaXZlciB2ZXJzaW9uIG9uIFVsdHJhLVNwYXJjLgorCS0gMiB0aW55IGJ1Z3MgZml4ZWQgaW4gdGhlIFBDSSB3cmFwcGVyIHRoYXQgcHJvdmlkZXMgc3VwcG9ydCAKKwkgIGZvciBlYXJseSBrZXJuZWxzIHdpdGhvdXQgcGNpIGRldmljZSBzdHJ1Y3R1cmUuCisJLSBHZXQgZGF0YSB0cmFuc2ZlciBkaXJlY3Rpb24gZnJvbSB0aGUgc2NzaSBjb21tYW5kIHN0cnVjdHVyZSAKKwkgIChTY3NpX0NtbmQpIHdpdGgga2VybmVscyB0aGF0IHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbi4KKwktIEZpeCBhbiBvbGQgYnVnIHRoYXQgb25seSBhZmZlY3RlZCA4OTYgcmV2LiAxIHdoZW4gZHJpdmVyIAorCSAgcHJvZmlsZSBzdXBwb3J0IG9wdGlvbiB3YXMgc2V0IGluIGtlcm5lbCBjb25maWd1cmF0aW9uLgorCitGcmkgSmFuIDE0IDE0OjAwIDIwMDAgUGFtIERlbGFuZXkgKHBhbS5kZWxhbmV5QGxzaWwuY29tKQorIAkqIHZlcnNpb24gc3ltNTNjOHh4LXByZS0xLjZiLTEuCisJLSBNZXJnZSBwYXJhbGxlbCBkcml2ZXIgc2VyaWVzIDEuNjEgYW5kIDEuNWUgCisKK1R1ZSBKYW4gMTEgMTQ6MDAgMjAwMCBQYW0gRGVsYW5leSAocGFtLmRlbGFuZXlAbHNpbC5jb20pCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjYxCisJLSBBZGRlZCBzdXBwb3J0IGZvciBtb3VudGluZyBkaXNrcyBvbiB3aWRlLW5hcnJvdy13aWRlCisJICBzY3NpIGNvbmZpZ3VyYXRpb25zLiAKKwktIE1vZGlmaWVkIG9mZnNldCB0byBiZSBhIG1heGltdW0gb2YgMzEgaW4gU1QgbW9kZSwgCisJICA2MiBpbiBEVCBtb2RlLgorCS0gQmFzZWQgb2ZmIG9mIDEuNjAKKworTW9uIEphbiAxMCAxMDowMCAyMDAwIFBhbSBEZWxhbmV5IChwYW0uZGVsYW5leUBsc2lsLmNvbSkKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuNjAKKwktIEFkZGVkIGNhcGFiaWxpdHkgdG8gdXNlIHRoZSBpbnRlZ3JpdHkgY2hlY2tpbmcgY29kZQorCSAgaW4gdGhlIGtlcm5lbCAob3B0aW9uYWwpLgorCS0gIEFkZGVkIFBQUiBuZWdvdGlhdGlvbi4KKwktIEFkZGVkIHN1cHBvcnQgZm9yIDUzQzEwMTAgVWx0cmEgMyBwYXJ0LgorCS0gQmFzZWQgb2ZmIG9mIDEuNWYKKworU2F0IEphbiA4ICAyMjowMCAyMDAwIEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS41aAorCS0gQWRkIHllYXIgMjAwMCBjb3B5cmlnaHQuCisJLSBEaXNwbGF5IGNvcnJlY3RseSBidXMgc2lnbmFscyB3aGVuIGJ1cyBpcyBkZXRlY3RlZCB3cm9uZy4KKwktIFNvbWUgZml4IGZvciBTcGFyYyBmcm9tIERTTSB0aGF0IHdlbnQgZGlyZWN0bHkgdG8ga2VybmVsIHRyZWUuCisKK01vbiBEZWMgNiAgMjI6MDAgMTk5OSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuNWcKKwktIENoYW5nZSBtZXNzYWdlcyB3cml0dGVuIGJ5IHRoZSBkcml2ZXIgYXQgaW5pdGlhbGlzYXRpb24gYW5kIAorCSAgdGhyb3VnaCB0aGUgL3Byb2MgRlMgKHJhdGhlciBjb3NtZXRpYyBjaGFuZ2VzIHRoYXQgY29uc2lzdCBpbgorCSAgcHJpbnRpbmcgb3V0IHRoZSBQQ0kgYnVzIG51bWJlciBhbmQgUENJIGRldmljZS9mdW5jdGlvbikuCisJLSBFbnN1cmUgdGhlIFNDUklQVFMgcHJvY2Vzc29yIGlzIHN0b3BwZWQgd2hpbGUgY2FsaWJyYXRpbmcgdGhlIAorCSAgU0NTSSBjbG9jayAodGhlIGluaXRpYWxpc2F0aW9uIGNvZGUgaGFzIGJlZW4gYSBiaXQgcmV3b3JrZWQpLgorCSAgQ2hhbmdlIG1vdmVkIHRvIHRoZSBGcmVlQlNEIHN5bV9oaXBkIGRyaXZlcikuCisJLSBTb21lIGZpeGVzIGluIHRoZSBNT0RJRllfRFAvSUdOX1JFU0lEVUUgY29kZSBhbmQgcmVzaWR1YWwgCisJICBjYWxjdWxhdGlvbiAobW92ZWQgZnJvbSBGcmVlQlNEIHN5bV9oaXBkIGRyaXZlcikuCisJLSBBZGQgTlZSQU0gc3VwcG9ydCBmb3IgVGVrcmFtIGJvYXJkcyB0aGF0IHVzZSAyNEMxNiBFRVBST00uCisJICBDb2RlIG1vdmVkIGZyb20gdGhlIEZyZWVCU0Qgc3ltX2hpcGQgZHJpdmVyLCBzaW5jZSBpdCBoYXMgCisJICBiZWVuIHRoYXQgb25lIHRoYXQgZ290IHRoaXMgZmVhdHVyZSBmaXJzdC4KKwktIERlZmluaXRlbHkgZGlzYWJsZSBvdmVybGFwcGVkIFBDSSBhcmJpdHJhdGlvbiBmb3IgYWxsIGR1YWwgCisJICBmdW5jdGlvbiBjaGlwcywgc2luY2UgSSBjYW5ub3QgbWFrZSBzdXJlIGZvciB3aGF0IGNoaXAgcmV2aXNpb25zIAorCSAgaXQgaXMgYWN0dWFsbHkgc2FmZS4KKwktIEFkZCBzdXBwb3J0IGZvciB0aGUgU1lNNTNDMTUxMEQgKGFsc28gZm9yIG5jcjUzYzh4eCkuCisJLSBGaXggdXAgcHJvcGVybHkgdGhlIFBDSSBsYXRlbmN5IHRpbWVyIHdoZW4gbmVlZGVkIG9yIGFza2VkIGZvci4KKwktIEdldCByaWQgb2YgdGhlIG9sZCBQQ0kgYmlvcyBpbnRlcmZhY2UsIGJ1dCBwcmVzZXJ2ZSBrZXJuZWwgMi4wIAorCSAgY29tcGF0aWJpbGl0eSBmcm9tIGEgc2ltcGxlIHdyYXBwZXIuCisJLSBVcGRhdGUgdGhlIHBvb3IgVGVrcmFtIHN5bmMgZmFjdG9yIHRhYmxlLgorCS0gRml4IGluIGEgdGlueSAncHJpbnRrJyBidWcgdGhhdCBtYXkgb29wcyBpbiBjYXNlIG9mIGV4dGVuZGVkIAorCSAgZXJyb3JzICh1bnJlY292ZXJlZCBwYXJpdHkgZXJyb3IsIGRhdGEgb3ZlcnJ1biwgZXRjIC4uLikKKwkgIChTZW50IGJ5IFBhbWVsYSBEZWxhbmV5IGZyb20gTFNJTE9HSUMpCisJLSBSZW1vdmUgdGhlIGNvbXBpbGF0aW9uIGNvbmRpdGlvbiBhYm91dCBoYXZpbmcgdG8gYWNxdWlyZSB0aGUgCisJICBpb19yZXF1ZXN0X2xvY2sgc2luY2UgaXQgc2VlbXMgdG8gYmUgYSBkZWZpbml0ZSBmZWF0dXJlIG5vdy46KQorCS0gQ2hhbmdlIGdldF9wYWdlcyBieSBHZXRQYWdlcyBzaW5jZSBMaW51eCA+PSAyLjMuMjcgbm93IHdhbnRzIAorCSAgZ2V0X3BhZ2VzIHRvIGV2ZXIgYmUgdXNlZCBhcyBhIGtlcm5lbCBzeW1ib2wgKGZyb20gMi4zLjI3KS4KKwktIHByb2NfZGlyIHN0cnVjdHVyZSBubyBsb25nZXIgbmVlZGVkIGZvciBrZXJuZWwgPj0gMi4zLjI3LgorCitTdW4gT2N0ICAzICAxOTowMCAxOTk5IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS41ZgorCS0gQ2hhbmdlIHRoZSB3YXkgdGhlIGRyaXZlciBjaGVja3MgdGhlIFBDSSBjbG9jayBmcmVxdWVuY3ksIHNvIAorCSAgdGhhdCBvdmVyY2xvY2tlZCBQQ0kgQlVTIHVwIHRvIDQ4IE1IeiB3aWxsIG5vdCBiZSByZWZ1c2VkLgorCSAgVGhlIG1vcmUgdGhlIEJVUyBpcyBvdmVyY2xvY2tlZCwgdGhlIGxlc3MgdGhlIGRyaXZlciB3aWxsIAorCSAgZ3VhcmFudGVlIHRoYXQgaXRzIG1lYXN1cmUgb2YgdGhlIFNDU0kgY2xvY2sgaXMgY29ycmVjdC4KKwktIEJhY2twb3J0IHNvbWUgbWlub3IgaW1wcm92ZW1lbnRzIG9mIFNDUklQVFMgZnJvbSB0aGUgc3ltX2hpcGQgCisJICBkcml2ZXIuCisJLSBCYWNrcG9ydCB0aGUgY29kZSByZXdyaXRlIG9mIHRoZSBTVEFSVCBRVUVVRSBkZXF1ZXVpbmcgKG9uIAorCSAgYmFkIHNjc2kgc3RhdHVzIHJlY2VpdmVkKSBmcm9tIHRoZSBzeW1faGlwZCBkcml2ZXIuCisKK1NhdCBTZXAgMTEgIDExOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjVlCisJLSBOZXcgbGludXgtMi4zLjEzIF9fc2V0dXAgc2NoZW1lIHN1cHBvcnQgYWRkZWQuCisJLSBDbGVhbnVwIG9mIHRoZSBleHRlbmRlZCBlcnJvciBzdGF0dXMgaGFuZGxpbmc6CisJICBVc2UgMSBiaXQgcGVyIGVycm9yIHR5cGUuCisJLSBBbHNvIHNhdmUgdGhlIGV4dGVuZGVkIGVycm9yIHN0YXR1cyBwcmlvciB0byBhdXRvLXNlbnNlLgorCS0gQWRkIHRoZSBGRV9ESUZGIGNoaXAgZmVhdHVyZSBiaXQgdG8gaW5kaWNhdGUgc3VwcG9ydCBvZiAKKwkgIGRpZmYgcHJvYmluZyBmcm9tIEdQSU8zICg4MjUvODI1QS84NzYvODc1KS4KKwktIFJlbW92ZSB0aGUgcXVpcmsgaGFuZGxpbmcgdGhhdCBoYXMgYmVlbiB1c2VsZXNzIHNpbmNlIGRheSBvbmUuCisJLSBXb3JrLWFyb3VuZCBQQ0kgY2hpcHMgYmVpbmcgcmVwb3J0ZWQgdHdpY2Ugb24gc29tZSBwbGF0Zm9ybXMuCisJLSBBZGQgc29tZSByZWR1bmRhbnQgUENJIHJlYWRzIGluIG9yZGVyIHRvIGRlYWwgd2l0aCBjb21tb24gCisJICBicmlkZ2UgbWlzYmVoYXZpb3VyIHJlZ2FyZGluZyBwb3N0ZWQgd3JpdGUgZmx1c2hpbmcuCisJLSBBZGQgc29tZSBvdGhlciBjb25kaXRpb25uYWwgY29kZSBmb3IgcGVvcGxlIHdobyBoYXZlIHRvIGRlYWwgCisJICB3aXRoIHJlYWxseSBicm9rZW4gYnJpZGdlcyAodGhleSB3aWxsIGhhdmUgdG8gZWRpdCBhIHNvdXJjZSAKKwkgIGZpbGUgdG8gdHJ5IHRoZXNlIG9wdGlvbnMpLgorCS0gSGFuZGxlIGNvcnJlY3RseSAoaG9wZWZ1bGx5KSBqaWZmaWVzIHdyYXAtYXJvdW5kLgorCS0gUmVzdG9yZSB0aGUgZW50cnkgdXNlZCB0byBkZXRlY3QgODc1IHVudGlsIHJldmlzaW9uIDB4ZmYuCisJICAoSSByZW1vdmVkIGl0IGluYWR2ZXJ0ZW50bHksIGl0IHNlZW1zIDopICkKKwktIFJlcGxhY2UgX19pbml0ZnVuYygpIHdoaWNoIGlzIGRlcHJlY2F0ZWQgc3R1ZmYgYnkgX19pbml0IHdoaWNoIAorCSAgaXMgbm90IHlldCBzby4gOy0pCisJLSBSZXdyaXRlIHRoZSBNRVNTQUdFIElOIHNjcmlwdHMgbW9yZSBnZW5lcmljIGJ5IHVzaW5nIGEgTU9WRSAKKwkgIHRhYmxlIGluZGlyZWN0LiBFeHRlbmRlZCBtZXNzYWdlcyBvZiBhbnkgc2l6ZSBhcmUgYWNjZXB0ZWQgbm93LgorCSAgKFNpemUgaXMgbGltaXRlZCB0byA4IGZvciBub3csIGJ1dCBhIGNvbnN0YW50IGlzIGp1c3QgdG8gYmUgCisJICBpbmNyZWFzZWQgaWYgbmVjZXNzYXJ5KQorCS0gRml4IHNvbWUgYnVnIGluIHRoZSBmdWxseSB1bnRlc3RlZCBNRFAgaGFuZGxpbmc6KSBhbmQgc2hhcmUgCisJICBzb21lIGNvZGUgYmV0d2VlbiBNRFAgaGFuZGxpbmcgYW5kIHJlc2lkdWFsIGNhbGN1bGF0aW9uLgorCS0gQ2FsY3VsYXRlIHRoZSBkYXRhIHRyYW5zZmVyIHJlc2lkdWFsIGFzIHRoZSAyJ3MgY29tcGxlbWVudCAKKwkgIGludGVnZXIgKEEgcG9zaXRpdmUgdmFsdWUgaW4gcmV0dXJuZWQgb24gZGF0YSBvdmVycnVuLCBhbmQgCisJICBhIG5lZ2F0aXZlIG9uZSBvbiB1bmRlcnJ1bikuCisJLSBBZGQgc3VwcG9ydCBvZiBzb21lICdyZXNvdXJjZSBoYW5kbGluZycgZm9yIGxpbnV4LTIuMy4xMy4KKwkgIEJhc2ljYWxseSB0aGUgQkFScyBoYXZlIGJlZW4gY2hhbmdlZCB0byBzb21ldGhpbmcgbW9yZSBjb21wbGV4IAorCSAgaW4gdGhlIHBjaV9kZXYgc3RydWN0dXJlLgorCS0gUmVtb3ZlIHNvbWUgZGVwcmVjYXRlZCBjb2RlLgorCitTYXQgSnVuICA1ICAxMTowMCAxOTk5IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS41YworCS0gRG8gbm90IG5lZ290aWF0ZSBvbiBhdXRvLXNlbnNlIGlmIHdlIGFyZSBjdXJyZW50bHkgdXNpbmcgOCBiaXQgCisJICBhc3luYyB0cmFuc2ZlciBmb3IgdGhlIHRhcmdldC4KKwktIE9ubHkgY2hlY2sgZm9yIFNJU0wvUkFJRCBvbiBpMzg2IHBsYXRmb3Jtcy4KKwkgIChBIHByb2JsZW0gaGFzIGJlZW4gcmVwb3J0ZWQgb24gUFBDIHdpdGggdGhhdCBjb2RlKS4KKwktIE9uIE1TRyBSRUpFQ1QgZm9yIGEgbmVnb3RpYXRpb24sIHRoZSBkcml2ZXIgYXR0ZW1wdGVkIHRvIHJlc3RhcnQgCisJICB0aGUgU0NSSVBUIHByb2Nlc3NvciB3aGVuIHRoaXMgb25lIHdhcyBhbHJlYWR5IHJ1bm5pbmcuCisKK1NhdCBNYXkgMjkgIDEyOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjViCisJLSBGb3JjZSBuZWdvdGlhdGlvbiBwcmlvciBhdXRvLXNlbnNlLgorCSAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGRyaXZlciB3aWxsIGJlIGFibGUgdG8gZ3JhYiB0aGUgc2Vuc2UgZGF0YSAKKwkgIGZyb20gYSBkZXZpY2UgdGhhdCBoYXMgcmVjZWl2ZWQgYSBCVVMgREVWSUNFIFJFU0VUIG1lc3NhZ2UgZnJvbSAKKwkgIGFub3RoZXIgaW5pdGlhdG9yLgorCS0gQ29tcGxldGUgYWxsIGRpc2Nvbm5lY3RlZCBDQ0JzIGZvciBhIGxvZ2ljYWwgVU5JVCBpZiB3ZSBhcmUgdG9sZCAKKwkgIGFib3V0IGEgVU5JVCBBVFRFTlRJT04gZm9yIGEgUkVTRVQgY29uZGl0aW9uIGJ5IHRoaXMgdGFyZ2V0LgorCS0gQWRkIHRoZSBjb250cm9sIGNvbW1hbmQgJ2NsZWFyZGV2JyB0aGF0IGFsbG93cyB0byBzZW5kIGEgQUJPUlQgIAorCSAgbWVzc2FnZSB0byBhIGxvZ2ljYWwgVU5JVCAoZm9yIHRlc3QgcHVycG9zZSkuCisKK1R1ZSBNYXkgMjUgIDIzOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjVhCisJLSBBZGQgc3VwcG9ydCBmb3IgdGFzayBhYm9ydCBhbmQgYnVzIGRldmljZSByZXNldCBTQ1NJIG1lc3NhZ2UgCisJICBhbmQgaW1wbGVtZW50IHByb3BlciBzeW5jaG9uaXNhdGlvbiB3aXRoIFNDUklQVFMgdG8gaGFuZGxlIAorICAgICAgICAgIGNvcnJlY3RseSB0YXNrIGFib3J0aW9uIHdpdGhvdXQgcmFjZXMuCisJLSBTZW5kIGFuIEFCT1JUIG1lc3NhZ2UgKGlmIHVudGFnZ2VkKSBvciBBQk9SVCBUQUcgbWVzc2FnZSAoaWYgdGFnZ2VkKQorCSAgd2hlbiB0aGUgZHJpdmVyIGlzIHRvbGQgdG8gYWJvcnQgYSBjb21tYW5kIHRoYXQgaXMgZGlzY29ubmVjdGVkIGFuZCAKKwkgIGNvbXBsZXRlIHRoZSBjb21tYW5kIHdpdGggYXBwcm9wcmlhdGUgZXJyb3IuCisJICBJZiB0aGUgYWJvcnRlZCBjb21tYW5kIGlzIG5vdCB5ZXQgc3RhcnRlZCwgcmVtb3ZlIGl0IGZyb20gdGhlIHN0YXJ0IAorCSAgcXVldWUgYW5kIGNvbXBsZXRlIGl0IHdpdGggZXJyb3IuCisJLSBBZGQgdGhlIGNvbnRyb2wgY29tbWFuZCAncmVzZXRkZXYnIHRoYXQgYWxsb3dzIHRvIHNlbmQgYSBCVVMgCisJICBERVZJQ0UgUkVTRVQgbWVzc2FnZSB0byBhIHRhcmdldCAoZm9yIHRlc3QgcHVycG9zZSkuCisJLSBDbGVhbi11cCBzb21lIHVudXNlZCBvciB1c2VsZXNzIGNvZGUuCisKK0ZyaSBNYXkgMjEgIDIzOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjUKKwktIEFkZCBzdXBwb3J0IGZvciBDSE1PViB3aXRoIFdpZGUgY29udHJvbGxlcnMuCisJLSBIYW5kbGluZyBvZiB0aGUgU1dJREUgKGxvdyBieXRlIHJlc2lkdWUgYXQgdGhlIGVuZCBvZiBhIENITU9WIAorCSAgaW4gREFUQSBJTiBwaGFzZSB3aXRoIFdJREUgdHJhbnNmZXIgd2hlbiB0aGUgYnl0ZSBjb3VudCBnZXRzIG9kZCkuCisJLSBIYW5kbGluZyBvZiB0aGUgSUdOT1JFIFdJREUgUkVTSURVRSBtZXNzYWdlLgorCSAgSGFuZGxlZCBmcm9tIFNDUklQVFMgYXMgcG9zc2libGUgd2l0aCBzb21lIG9wdGltaXphdGlvbnMgd2hlbiBib3RoIAorCSAgYSB3aWRlIGRldmljZSBhbmQgdGhlIGNvbnRyb2xsZXIgYXJlIG9kZCBhdCB0aGUgc2FtZSB0aW1lIChTV0lERSAKKwkgIHByZXNlbnQgYW5kIElHTk9SRSBXSURFIFJFU0lEVUUgbWVzc2FnZSBvbiB0aGUgQlVTIGF0IHRoZSBzYW1lIHRpbWUpLgorCS0gQ2hlY2sgYWdhaW5zdCBkYXRhIE9WRVJSVU4vVU5ERVJSVU4gY29uZGl0aW9uIGF0IHRoZSBlbmQgb2YgYSBkYXRhIAorCSAgdHJhbnNmZXIsIHdoYXRldmVyIGEgU1dJREUgaXMgcHJlc2VudCAoT1ZFUlJVTiBpbiBEQVRBIElOIHBoYXNlKSAKKwkgIG9yIHRoZSBTT0RMIGlzIGZ1bGwgKFVOREVSUlVOIGluIERBVEEgb3V0IHBoYXNlKS4KKwktIEhhbmRsaW5nIG9mIHRoZSBNT0RJRlkgREFUQSBQT0lOVEVSIG1lc3NhZ2UuCisJICBUaGlzIG9uZSBjYW5ub3QgYmUgaGFuZGxlZCBmcm9tIFNDUklQVFMsIGJ1dCBob3BlZnVsbHkgaXQgd2lsbCBub3QKKwkgIGhhcHBlbiB2ZXJ5IG9mdGVuLiA6KQorCS0gTGFyZ2UgcmV3cml0ZSBvZiB0aGUgU0NTSSBNRVNTQUdFIGhhbmRsaW5nLgorCitTdW4gTWF5IDkgIDExOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjQKKwktIFN1cHBvcnQgZm9yIElNTUVESUFURSBBUkJJVFJBVElPTi4KKwkgIFNlZSB0aGUgUkVBRE1FIGZpbGUgZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZmVhdHVyZS4KKwkgIFJlcXVpcmVzIGJvdGggYSBjb21waWxlIG9wdGlvbiBhbmQgYSBib290IG9wdGlvbi4KKwktIE1pbm9yIFNDUklQVFMgb3B0aW1pemF0aW9uIGluIHJlc2VsZWN0aW9uIHBhdHRlcm4gZm9yIExVTiAwLgorCS0gU2ltcGxlciBhbGdvcml0aG0gdG8gZGVhbCB3aXRoIFNDU0kgY29tbWFuZCBzdGFydmF0aW9uLgorCSAgSnVzdCB1c2UgMiB0YWcgY291bnRlcnMgaW4gZmxpcC9mbG9wIGFuZCBzd2l0Y2ggdG8gdGhlIG90aGVyIAorCSAgb25lIGV2ZXJ5IDMgc2Vjb25kcy4KKwktIERvIHNvbWUgd29yayBpbiBTQ1JJUFRTIGFmdGVyIHRoZSBTRUxFQ1QgaW5zdHJ1Y3Rpb24gYW5kIHByaW9yIAorCSAgdG8gdGVzdGluZyBmb3IgYSBQSEFTRS4gU1lNQklPUyBzYXkgdGhpcyBmZWF0dXJlIGlzIHdvcmtpbmcgZmluZS4gCisJICAoQnR3LCBvbmx5IHByb2JsZW1zIHdpdGggVG9zaGliYSAzNDAxQiBoYWQgYmVlbiByZXBvcnRlZCkuCisJLSBNZWFzdXJlIHRoZSBQQ0kgY2xvY2sgc3BlZWQgYW5kIGRvIG5vdCBhdHRhY2ggY29udHJvbGxlcnMgaWYgCisJICByZXN1bHQgaXMgZ3JlYXRlciB0aGFuIDM3IE1Iei4gU2luY2UgdGhlIHByZWNpc2lvbiBvZiB0aGUgCisJICBhbGdvcml0aG0gKGZyb20gU3RlZmFuIEVzc2VyKSBpcyBiZXR0ZXIgdGhhbiAyJSwgdGhpcyBzaG91bGQgCisJICBiZSBmaW5lLgorCS0gRml4IHRoZSBtaXNkZXRlY3Rpb24gb2YgU1lNNTNDODc1RSAod2FzIGRldGVjdGVkIGFzIGEgODc2KS4KKwktIEZpeCB0aGUgbWlzZGV0ZWN0aW9uIG9mIFNZTTUzQzgxMCBub3QgQSAod2FzIGRldGVjdGVkIGFzIGEgODEwQSkuCisJLSBTdXBwb3J0IGZvciB1cCB0byAyNTYgVEFHUyBwZXIgTFVOIChDTURfUEVSX0xVTikuCisJICBDdXJyZW50bHkgbGltaXRlZCB0byAyNTUgZHVlIHRvIExpbnV4IGxpbWl0YXRpb24uIDopCisJLSBTdXBwb3J0IGZvciB1cCB0byA1MDggYWN0aXZlIGNvbW1hbmRzIChDQU5fUVVFVUUpLgorCS0gU3VwcG9ydCBmb3IgdGhlIDUzQzg5NUEgYnkgUGFtZWxhIERlbGFuZXkgPHBhbS5kZWxhbmV5QGxzaWwuY29tPgorCSAgVGhlIDUzQzg5NUEgY29udGFpbnMgYWxsIG9mIHRoZSBmZWF0dXJlcyBvZiB0aGUgODk2IGJ1dCBoYXMgb25seSAKKwkgIG9uZSBjaGFubmVsIGFuZCBoYXMgYSAzMiBiaXQgUENJIGJ1cy4gSXQgZG9lcyA2NCBiaXQgUENJIGFkZHJlc3NpbmcgCisJICB1c2luZyBkdWFsIGN5Y2xlIFBDSSBkYXRhIHRyYW5zZmVycy4KKwktIE1pc2NlbGxhbmVvdXMgbWlub3IgZml4ZXMuCisJLSBTb21lIGFkZGl0aW9ucyB0byB0aGUgUkVBRE1FLm5jcjUzYzh4eCBmaWxlLgorCitUdWUgQXByIDE1ICAxMDowMCAxOTk5IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS4zZQorCS0gU3VwcG9ydCBmb3IgYW55IG51bWJlciBvZiBMVU5zICg2NCkgKFNQSTItY29tcGxpYW50KS4KKwkgIChCdHcsIHRoaXMgbWF5IG9ubHkgYmUgZXZlciB1c2VmdWwgdW5kZXIgbGludXgtMi4yIDstKSkKKworU3VuIEFwciAxMSAgMTA6MDAgMTk5OSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuM2QKKwktIEFkZCAnaG9zdGlkOiNpZCcgYm9vdCBvcHRpb24uIFRoaXMgb3B0aW9uIGFsbG93cyB0byBjaGFuZ2UgdGhlIAorCSAgZGVmYXVsdCBTQ1NJIGlkIHRoZSBkcml2ZXIgdXNlcyBmb3IgY29udHJvbGxlcnMuCisJLSBNYWtlIFNDUklQVFMgbm90IHVzZSBzZWxmLW1hc3RlcmluZyBmb3IgUENJLgorCSAgVGhlcmUgd2VyZSBzdGlsbCAyIHBsYWNlcyB0aGUgZHJpdmVyIHVzZWQgdGhpcyBmZWF0dXJlIG9mIHRoZSAKKwkgIDUzQzhYWCBmYW1pbHkuCisJLSBNb3ZlIHNvbWUgZGF0YSBzdHJ1Y3R1cmVzIChudnJhbSBsYXlvdXRzIGFuZCBkcml2ZXIgc2V0LXVwKSB0byAKKwkgIHRoZSBzeW01M2M4eHhfZGVmcy5oIGZpbGUuIFNvLCB0aGUgYm90aCBkcml2ZXJzIHdpbGwgc2hhcmUgdGhlbS4KKwktIFNldCBNQVggTFVOUyB0byAxNiAoaW5zdGVhZCBvZiA4KS4KKworU2F0IE1hciAyMCAgMjE6MDAgMTk5OSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuM2IKKwktIEFkZCBzdXBwb3J0IGZvciBOQ1IgUFFTIFBEUy4KKwkgIEphbWVzIEJvdHRvbWxleSA8SmFtZXMuQm90dG9tbGV5QGNvbHVtYmlhc2MubmNyLmNvbT4KKwktIEFsbG93IHZhbHVlIDAgZm9yIGhvc3QgSUQuCisJLSBTdXBwb3J0IG1vcmUgdGhhbiA4IGNvbnRyb2xsZXJzICg+IDQwIGluIGZhY3QgOi0pICkKKwktIEFkZCAnZXhjbD0jaW9hZGRyJyBib290IG9wdGlvbjogZXhjbHVkZSBjb250cm9sbGVyLgorCSAgKFZlcnNpb24gMS4zYSBkcml2ZXIpCisKK1RodSBNYXIgMTEgIDIzOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjMgICAoOHh4LTg5NiBkcml2ZXIgYnVuZGxlKQorCS0gRXF1aXZhbGVudCBjaGFuZ2VzIGFzIG5jcjUzYzh4eC0zLjIgZHVlIHRvIHRoZSBkcml2ZXIgYnVuZGxlLgorCSAgKFNlZSBDaGFuZ2Vsb2cubmNyNTNjOHh4KQorCS0gRG8gYSBub3JtYWwgc29mdCByZXNldCBhcyBmaXJzdCBjaGlwIHJlc2V0LCBzaW5jZSBhYm9ydGluZyBjdXJyZW50IAorCSAgb3BlcmF0aW9uIG1heSByYWlzZSBhbiBpbnRlcnJ1cHQgd2UgYXJlIG5vdCBhYmxlIHRvIGhhbmRsZSBzaW5jZSAKKwkgIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBpcyBub3QgeWV0IGVzdGFibGlzaGVkLgorCitTYXQgTWFyIDYgIDExOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjJiCisJLSBGaXggc29tZSBvb29vbGQgYnVnIHRoYXQgaGFuZ3MgdGhlIGJ1cyBpZiBhIGRldmljZSByZWplY3RzIGEgCisJICBuZWdvdGlhdGlvbi4gQnR3LCB0aGUgY29ycmVzcG9uZGluZyBzdHVmZiBhbHNvIG5lZWRlZCBzb21lIGNsZWFudXAgCisJICBhbmQgdGh1cyB0aGUgY2hhbmdlIGlzIGEgYml0IGxhcmdlciB0aGFuIGl0IGNvdWxkIGhhdmUgYmVlbi4KKwktIFN0aWxsIHNvbWUgdHlwbyB0aGF0IG1hZGUgY29tcGlsYXRpb24gZmFpbCBmb3IgNjQgYml0ICh0cml2aWFsIGZpeCkuCisKK1N1biBGZWIgMjEgIDIwOjAwIDE5OTkgR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHN5bTUzYzh4eC0xLjJhCisJLSBUaGUgcmV3cml0ZSBvZiB0aGUgaW50ZXJydXB0IGhhbmRsaW5nIGJyb2tlIHRoZSBTQk1DIGludGVycnVwdCAKKwkgIGhhbmRsaW5nIGR1ZSB0byBhIDEgYml0IG1hc2sgdGlueSBlcnJvci4gSG9wZWZ1bGx5IGZpeGVkLgorCS0gSWYgSU5RVUlSWSBjYW1lIGZyb20gYSBzY2F0dGVyIGxpc3QsIHRoZSBkcml2ZXIgbG9va2VkIGludG8gCisJICB0aGUgc2NhdHRlcmxpc3QgaW5zdGVhZCBvZiB0aGUgZGF0YS46KSBTaW5jZSB0aGlzIHNob3VsZCBuZXZlcgorCSAgaGFwcGVuLCB3ZSBqdXN0IGRpc2NhcmQgdGhlIGRhdGEgaWYgdXNlX3NnIGlzIG5vdCB6ZXJvLgorCitGcmkgRmViIDEyICAyMzowMCAxOTk5IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS4yCisJLSBNYWpvciByZXdyaXRlIG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgYW5kIHJlY292ZXJ5IHN0dWZmIGZvciAKKwkgIHRoZSBzdXBwb3J0IG9mIG5vbiBjb21wbGlhbnQgU0NTSSByZW1vdmFsLCBpbnNlcnRpb24gYW5kIGFsbCAKKwkgIGtpbmRzIG9mIHNjcmV3LXVwIHRoYXQgbWF5IGhhcHBlbiBvbiB0aGUgU0NTSSBCVVMuCisJICBIb3BlZnVsbHksIHRoZSBkcml2ZXIgaXMgbm93IHVuYnJlYWthYmxlIG9yIG1heS1iZSwgaXQgaXMganVzdCAKKwkgIHF1aXRlIGJyb2NrZW4uIDotKQorCSAgTWFueSB0aGFua3MgdG8gSm9obnNvbiBSdXNzZWwgKFN5bWJpb3MpIGZvciBoYXZpbmcgcmVzcG9uZGVkIHRvIAorCSAgbXkgcXVlc3Rpb25zIGFuZCBmb3IgaGlzIGludGVyZXN0aW5nIGFkdmljZXMgYW5kIGNvbW1lbnRzIGFib3V0IAorCSAgc3VwcG9ydCBvZiBTQ1NJIGhvdC1wbHVnLgorCS0gQWRkICdyZWNvdmVyeScgb3B0aW9uIHRvIGRyaXZlciBzZXQtdXAuCisJLSBOZWdvdGlhdGUgU1lOQyBkYXRhIHRyYW5zZmVycyB3aXRoIENDUyBkZXZpY2VzLgorCS0gRGVhbCBjb3JyZWN0bHkgd2l0aCA2NCBiaXQgUENJIGFkZHJlc3MgcmVnaXN0ZXJzIG9uIExpbnV4IDIuMi4KKwkgIFBvaW50ZWQgb3V0IGJ5IExlb25hcmQgWnVia29mZi4KKworU3VuIEphbiAzMSAgMTg6MDAgMTk5OSBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gc3ltNTNjOHh4LTEuMWEKKwktIFNvbWUgODk2IGNoaXAgcmV2aXNpb25zIChhbGwgZm9yIG5vdyA6LSkpLCBtYXkgaGFuZy11cCBpZiB0aGUgCisJICBzb2Z0IHJlc2V0IGJpdCBpcyBzZXQgYXQgdGhlIHdyb25nIHRpbWUgd2hpbGUgU0NSSVBUUyBhcmUgcnVubmluZy4KKwkgIFdlIG5lZWQgdG8gZmlyc3QgYWJvcnQgdGhlIGN1cnJlbnQgU0NSSVBUUyBvcGVyYXRpb24gcHJpb3IgdG8gCisJICByZXNldHRpbmcgdGhlIGNoaXAuIFRoaXMgZml4IGhhcyBiZWVuIHNlbnQgdG8gbWUgYnkgU1lNQklPUy9MU0kgCisJICBhbmQgSSBqdXN0IHRyYW5zbGF0ZWQgaXQgaW50byBuY3I1M2M4eHggc3ludGF4LgorCSAgTXVzdCBiZSBjb25zaWRlcmVkIDEwMCAlIHRydXN0YWJsZSwgdW5sZXNzIEkgZGlkIHNvbWUgbWlzdGFrZSAKKwkgIHdoZW4gdHJhbnNsYXRpbmcgaXQuIDotKQorCitTdW4gSmFuIDI0ICAxODowMCAxOTk5IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS4xCisJLSBNYWpvciByZXdyaXRlIG9mIHRoZSBTQ1NJIHBhcml0eSBlcnJvciBoYW5kbGluZy4KKwkgIFRoZSBpbmZvcm1hdGlvbnMgY29udGFpbmVkIGluIHRoZSBkYXRhIG1hbnVhbHMgYXJlIGluY29tcGxldGUgYWJvdXQgCisJICB0aGlzIGZlYXR1cmUuCisJICBJIGFza2VkIFNZTUJJT1MgYWJvdXQgYW5kIGdvdCBpbiByZXBseSB0aGUgZXhwbGFuYXRpb25zIHRoYXQgYXJlIAorCSAgX2luZGVlZF8gbWlzc2luZyBpbiB0aGUgZGF0YSBtYW51YWxzLgorCS0gQWxsb3cgdG8gdHVuZSByZXF1ZXN0X2lycSgpIGZsYWdzIGZyb20gdGhlIGJvb3QgY29tbWFuZCBsaW5lIHVzaW5nIAorCSAgbmNyNTNjOHh4PWlycW06Pz8sIGFzIGZvbGxvd3M6CisJICBhKSBJZiBiaXQgMHgxMCBpcyBzZXQgaW4gaXJxbSwgU0FfU0hJUlEgZmxhZyBpcyBub3QgdXNlZC4KKwkgIGIpIElmIGJpdCAweDIwIGlzIHNldCBpbiBpcnFtLCBTQV9JTlRFUlJVUFQgZmxhZyBpcyBub3QgdXNlZC4KKwkgIEJ5IGRlZmF1bHQgdGhlIGRyaXZlciB1c2VzIGJvdGggU0FfU0hJUlEgYW5kIFNBX0lOVEVSUlVQVC4KKwkgIE9wdGlvbiAnbmNyNTNjOHh4PWlycW06MHgyMCcgbWF5IGJlIHVzZWQgd2hlbiBhbiBJUlEgaXMgc2hhcmVkIGJ5IAorCSAgYSA1M0M4WFggYWRhcHRlciBhbmQgYSBuZXR3b3JrIGJvYXJkLgorCS0gRml4IGZvciA2NCBiaXQgUENJIGFkZHJlc3MgcmVnaXN0ZXIgY2FsY3VsYXRpb24uIChMYW5jZSBSb2JpbnNvbikKKwktIEZpeCBmb3IgYmlnLWVuZGlhbiBpbiBwaGFzZSBtaXNtYXRjaCBoYW5kbGluZy4gKE1pY2hhbCBKYWVnZXJtYW5uKQorCitGcmkgSmFuICAxICAyMDowMCAxOTk5IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS4wYQorCS0gV2FpdGluZyBsaXN0IGxvb2stdXAgZGlkbid0IHdvcmsgZm9yIHRoZSBmaXJzdCBjb21tYW5kIG9mIHRoZSBsaXN0LgorCSAgSG9wZWZ1bGx5IGZpeGVkLCBidXQgdGVzdGVkIG9uIHBhcGVyIG9ubHkuIDspCisJLSBSZW1vdmUgdGhlIG1vc3QgcGFydCBvZiBQUEMgc3BlY2lmaWMgY29kZSBmb3IgTGludXgtMi4yLgorCSAgVGhhbmtzIHRvIENvcnQuCisJLSBTb21lIG90aGVyIG1pbm9ycyBjaGFuZ2VzLgorCitTYXQgRGVjIDE5ICAyMTowMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBzeW01M2M4eHgtMS4wCisJLSBEZWZpbmUgc29tZSBuZXcgSU8gcmVnaXN0ZXJzIGZvciB0aGUgODk2IChpc3RhdDEsIG1ib3gwLCBtYm94MSkKKwktIFJldmFtcCBzbGlnaGx5IHRoZSBTeW1iaW9zIE5WUkFNIGxheS1vdXQgYmFzZWQgb24gdGhlIGV4Y2VycHQgb2YgCisJICB0aGUgaGVhZGVyIGZpbGUgSSByZWNlaXZlZCBmcm9tIFN5bWJpb3MuCisJLSBDaGVjayB0aGUgUENJIGJ1cyBudW1iZXIgZm9yIHRoZSBib290IG9yZGVyIChVc2luZyBhIGZhc3QgCisJICBQQ0kgY29udHJvbGxlciBiZWhpbmcgYSBQQ0ktUENJIGJyaWRnZSBzZWVtcyBzdWItb3B0aW1hbCkuCisJLSBEaXNhYmxlIG92ZXJsYXBwZWQgUENJIGFyYml0cmF0aW9uIGZvciB0aGUgODk2IHJldmlzaW9uIDEuCisJLSBSZWR1Y2UgYSBiaXQgdGhlIG51bWJlciBvZiBJTyByZWdpc3RlciByZWFkcyBmb3IgcGhhc2UgbWlzbWF0Y2ggCisJICBieSByZWFkaW5nIERXT1JEUyBhdCBhIHRpbWUgaW5zdGVhZCBvZiBCWVRFUy4KKworVGh1IERlYyAgMyAgMjQ6MDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gcHJlLXN5bTUzYzh4eC0wLjE4CisJLSBJIHJlY2VpdmVkIHRoaXMgYWZ0ZXJub29uIGEgODk2IGZyb20gU1lNQklPUyBhbmQgc3RhcnRlZCB0ZXN0aW5nICAKKwkgIHRoZSBkcml2ZXIgd2l0aCB0aGlzIGJlYXN0LiBBZnRlciBoYXZpbmcgZml4ZWQgMyBidWdsZXRzLCBpdCB3b3JrZWQgIAorCSAgd2l0aCBhbGwgZmVhdHVyZXMgZW5hYmxlZCBpbmNsdWRpbmcgdGhlIHBoYXNlIG1pc21hdGNoIGhhbmRsaW5nIAorCSAgZnJvbSBTQ1JJUFRTLiBTaW5jZSB0aGlzIGZlYXR1cmUgaXMgbm90IHlldCB0ZXN0ZWQgZW5vdWdoLCB0aGUgCisJICBib290IG9wdGlvbiAnbmNyNTNjOHh4PXNwZWNmOjEnIGlzIHN0aWxsIHJlcXVpcmVkIHRvIGVuYWJsZSB0aGUgCisJICBkcml2ZXIgdG8gaGFuZGxlIFBNIGZyb20gU0NSSVBUUy4gCisKK1N1biBOb3YgMjkgIDE4OjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHByZS1zeW01M2M4eHgtMC4xNworCS0gVGhlIFNJU0wgUkFJRCBjaGFuZ2UgcmVxdWlyZXMgbm93IHJlbWFwX3BjaV9tZW0oKSBzdHVmZiB0byBiZSAKKwkgIGNvbXBpbGVkIGZvciBfX2kzODZfXyB3aGVuIG5vcm1hbCBJT3MgYXJlIHVzZWQuCisJLSBUaGUgUENJIG1lbW9yeSByZWFkIGZyb20gU0NSSVBUUyB0aGF0IHNob3VsZCBlbnN1cmUgb3JkZXJpbmcgCisJICB3YXMgaW4gZmFjdCBtaXNwbGFjZWQuIEJUVywgdGhpcyBtYXkgZXhwbGFpbiB3aHkgYnJva2VuIFBDSSAKKwkgIGRldmljZSBkcml2ZXJzIHJlZ2FyZGluZyBvcmRlcmluZyBhcmUgd29ya2luZyBzbyB3ZWxsLiA7LSkKKwktIFJld3JpdGUgbmNyNTNjOHh4X3NldHVwIChib290IGNvbW1hbmQgbGluZSBvcHRpb25zKSBzaW5jZSB0aGUgIAorCSAgYmluYXJ5IGNvZGUgd2FzIGEgYml0IHRvbyBibG9hdGVkIGluIG15IG9waW5pb24uCisJLSBNYWtlIHRoZSBjb2RlIHNpbXBsZXIgaW4gdGhlIHdha2V1cF9kb25lIHJvdXRpbmUuCisKK1R1ZSBOb3YgMjQgIDIzOjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHByZS1zeW01M2M4eHgtMC4xNgorCS0gQWRkIFNDU0lfTkNSX09QVElNSVpFXzg5Nl8xIGNvbXBpbGUgb3B0aW9uIGFuZCAnb3B0aW0nIGJvb3Qgb3B0aW9uLgorCSAgV2hlbiBzZXQsIHRoZSBkcml2ZXIgdW5jb25kaXRpb25uYWx5IGFzc3VtZXMgdGhhdCB0aGUgaW50ZXJydXB0IAorCSAgaGFuZGxlciBpcyBjYWxsZWQgZm9yIGNvbW1hbmQgY29tcGxldGlvbiwgdGhlbiBjbGVhcnMgSU5URiwgc2NhbnMgCisJICB0aGUgZG9uZSBxdWV1ZSBhbmQgcmV0dXJucyBpZiBzb21lIGNvbXBsZXRlZCBDQ0IgaXMgZm91bmQuIElmIG5vIAorCSAgY29tcGxldGVkIENDQiBhcmUgZm91bmQsIGludGVycnVwdCBoYW5kbGluZyB3aWxsIHByb2NlZWQgbm9ybWFsbHkuCisJICBXaXRoIGEgODk2IHRoYXQgaGFuZGxlcyBNQSBmcm9tIFNDUklQVFMsIHRoaXMgY2FuIGJlIGEgZ3JlYXQgd2luLCAKKwkgIHNpbmNlIHRoZSBkcml2ZXIgd2lsbCBuZXZlciBwZXJmb3JtcyBQQ0kgcmVhZCB0cmFuc2FjdGlvbnMsIGJ1dCAKKwkgIG9ubHkgUENJIHdyaXRlIHRyYW5zYWN0aW9ucyB0aGF0IG1heSBiZSBwb3N0ZWQuCisJICBJZiB0aGUgZHJpdmVyIGhhdmVuJ3QgdG8gYWxzbyByYWlzZSB0aGUgU0lHUCB0aGlzIHdvdWxkIGJlIHBlcmZlY3QuCisJICBFdmVuIHdpdGggdGhpcyBwZW5hbHR5LCBJIHRoaW5rIHRoYXQgdGhpcyB3aWxsIHdvcmsgZ3JlYXQuCisJICBPYnZpb3VzbHkgdGhpcyBvcHRpbWl6YXRpb24gbWFrZXMgc2Vuc2Ugb25seSBpZiB0aGUgSVJRIGlzIG5vdCAKKwkgIHNoYXJlZCB3aXRoIGFub3RoZXIgZGV2aWNlLgorCS0gU3RpbGwgYSBidWdsZXQgaW4gdGhlIHRhZ3MgaW5pdGlhbCBzZXR0aW5ncyB0aGF0IG5lZWRlZCB0byBiZSBmaXhlZC4KKwkgIEl0IHdhcyBub3QgcG9zc2libGUgdG8gZGlzYWJsZSBUR1EgYXQgc3lzdGVtIHN0YXJ0dXAgZm9yIGRldmljZXMgCisJICB0aGF0IGNsYWltIFRHUSBzdXBwb3J0LiBUaGUgZHJpdmVyIHVzZWQgYXQgbGVhc3QgMiBmb3IgdGhlIHF1ZXVlIAorCSAgZGVwdGggYnV0IGRpZCdudCBrZWVwIHRyYWNrIG9mIHVzZXIgc2V0dGluZ3MgZm9yIHRhZ3MgZGVwdGggbG93ZXIgCisJICB0aGFuIDIuCisKK1RodSBOb3YgMTkgIDIzOjAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHByZS1zeW01M2M4eHgtMC4xNQorCS0gQWRkIHN1cHBvcnQgZm9yIGhhcmR3YXJlIExFRCBjb250cm9sIG9mIHRoZSA4OTYuCisJLSBJZ25vcmUgY2hpcHMgdGhhdCBhcmUgZHJpdmVuIGJ5IFNJU0wgUkFJRCAoREFDIDk2MCkuCisJICBDaGFuZ2Ugc2VudCBieSBMZW9uYXJkIFp1YmtvZmYgYW5kIHNsaWdodGx5IHJld29ya2VkLgorCS0gUHJldmVudCA4MTBBIHJldiAxMSBhbmQgODYwIHJldiAxIGZyb20gdXNpbmcgY2FjaGUgbGluZSBiYXNlZCAKKwkgIHRyYW5zYWN0aW9ucyBzaW5jZSB0aG9zZSBlYXJseSBjaGlwIHJldmlzaW9ucyBtYXkgdXNlIHN1Y2ggb24gCisJICBMT0FEL1NUT1JFIGluc3RydWN0aW9ucyAod29yay1hcm91bmQpLgorCS0gUmVtb3ZlIHNvbWUgdXNlbGVzcyBhbmQgYmxvYXQgY29kZSBmcm9tIHRoZSBwY2kgaW5pdCBzdHVmZi4KKwktIERvIG5vdCB1c2UgdGhlIHJlYWRYKCkvd3JpdGVYKCkga2VybmVsIGZ1bmN0aW9ucyBmb3IgX19pMzg2X18sIAorCSAgc2luY2UgdGhleSBwZXJmb3JtIHVzZWxlc3MgbWFza2luZyBvcGVyYXRpb25zIGluIG9yZGVyIHRvIGRlYWwgCisJICB3aXRoIGJyb2tlbiBkcml2ZXIgaW4gMi4xLlgga2VybmVsLgorCitXZWQgTm92IDExICAxMDowMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBwcmUtc3ltNTNjOHh4LTAuMTQKKwktIFRoZSBkcml2ZXIgd2FzIHVuaGFwcHkgd2hlbiBjb25maWd1cmVkIHdpdGggZGVmYXVsdF90YWdzID4gTUFYX1RBR1MKKwkgIEhvcGVmdWxseSBkb3VibHktZml4ZWQuCisJLSBTZXQgUENJX1BBUklUWSBpbiBQQ0lfQ09NTUFORCByZWdpc3RlciBpbiBub3Qgc2V0IChQQ0kgZml4LXVwKS4KKwktIFByaW50IG91dCBzb21lIG1lc3NhZ2UgaWYgcGhhc2UgbWlzbWF0Y2ggaXMgaGFuZGxlZCBmcm9tIFNDUklQVFMuCisKK1N1biBOb3YgMSAgMTRIMDAgMTk5OCBHZXJhcmQgUm91ZGllciAoZ3JvdWRpZXJAY2x1Yi1pbnRlcm5ldC5mcikKKwkqIHZlcnNpb24gcHJlLXN5bTUzYzh4eC0wLjEzCisJLSBTb21lIHJld3JpdGUgb2YgdGhlIGRldmljZSBkZXRlY3Rpb24gY29kZS4gVGhpcyBjb2RlIGhhZCBiZWVuIAorCSAgcGF0Y2hlZCB0b28gbXVjaCBhbmQgbmVlZGVkIHRvIGJlIGZhY2UtbGlmdGVkIGEgYml0LgorCSAgUmVtb3ZlIGFsbCBwbGF0Zm9ybSBkZXBlbmRlbnQgZml4LXVwcyB0aGF0IHdhcyBub3QgbmVlZGVkIG9yCisJICBjb25mbGljdGVkIHdpdGggc29tZSBvdGhlciBkcml2ZXIgY29kZSBhcyB3b3JrLWFyb3VuZHMuCisJICBSZXJlYWQgdGhlIE5WUkFNIGJlZm9yZSB0aGUgY2FsbGluZyBvZiBuY3JfYXR0YWNoKCkuIFRoaXMgc3BhcmVzIAorCSAgc3RhY2sgc3BhY2UgYW5kIHNvIGFsbG93cyB0byBoYW5kbGUgbW9yZSBib2FyZHMuCisJICBIYW5kbGUgNjQgYml0IGJhc2UgYWRkcmVzc2VzIHVuZGVyIGxpbnV4LTIuMC5YLgorCSAgU2V0IE1BU1RFUiBiaXQgaW4gUENJIENPTU1BTkQgcmVnaXN0ZXIgaWYgbm90IHNldC4KKworV2VkIE9jdCAzMCAyMkgwMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBwcmUtc3ltNTNjOHh4LTAuMTIKKwktIERhbW5lZCEgSSBqdXN0IGJyb2tlIHRoZSBkcml2ZXIgZm9yIEFscGhhIGJ5IGxlYXZpbmcgYSBzdGFsZSAKKwkgIGluc3RydWN0aW9uIGluIHRoZSBzb3VyY2UgY29kZS4gSG9wZWZ1bGx5IGZpeGVkLgorCS0gRG8gbm90IHNldCBQRkVOIHdoZW4gaXQgaXMgdXNlbGVzcy4gRG9pbmcgc28gd2UgYXJlIHN1cmUgdGhhdCBCT0YgCisJICB3aWxsIGJlIGFjdGl2ZSwgc2luY2UgdGhlIG1hbnVhbCBhcHBlYXJzIHRvIGJlIHZlcnkgdW5jbGVhciBvbiB3aGF0IAorCSAgZmVhdHVyZSBpcyBhY3R1YWxseSB1c2VkIGJ5IHRoZSBjaGlwIHdoZW4gYm90aCBQRkVOIGFuZCBCT0YgYXJlIAorCSAgc2V0LgorCitTYXQgT2N0IDI0IDE2SDAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHByZS1zeW01M2M4eHgtMC4xMQorCS0gTE9BRC9TVE9SRSBpbnN0cnVjdGlvbnMgd2VyZSBtaXNjb21waWxlZCBmb3IgcmVnaXN0ZXIgb2Zmc2V0cyAKKwkgIGJleW9uZCAweDdmLiBUaGlzIGJyb2tlIGFjY2Vzc2VzIHRvIDg5NicgbmV3IHJlZ2lzdGVycy4KKwktIERpc2FibGUgYnkgZGVmYXVsdCBQaGFzZSBNaXNtYXRjaCBoYW5kbGluZyBmcm9tIFNDUklQVFMsIHNpbmNlIAorCSAgY3VycmVudCA4OTYgcmV2LjEgc2VlbXMgbm90IHRvIG9wZXJhdGUgc2FmZWx5IHdpdGggdGhlIGRyaXZlcgorCSAgd2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCAoYW5kIGFib3ZlIExPQUQvU1RPUkUgZml4IGFwcGxpZWQpLgorCSAgSSB3aWxsIGNoYW5nZSB0aGUgZGVmYXVsdCB0byAnZW5hYmxlZCcgd2hlbiB0aGlzIHByb2JsZW0gd2lsbCBiZSAKKwkgIHNvbHZlZC4KKwkgIFVzaW5nIGJvb3Qgb3B0aW9uICduY3I1M2M4eHg9c3BlY2Y6MScgZW5hYmxlcyB0aGlzIGZlYXR1cmUuCisJLSBJbXBsZW1lbnQgYSB3b3JrLWFyb3VuZCAoREVMIDQ3MiAtIElURU0gNSkgdGhhdCBzaG91bGQgYWxsb3cgdGhlIAorCSAgZHJpdmVyIHRvIHNhZmVseSBlbmFibGUgaGFyZHdhcmUgcGhhc2UgbWlzbWF0Y2ggd2l0aCA4OTYgcmV2LiAxLgorCitUdWUgT2N0IDIwIDIySDAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHByZS1zeW01M2M4eHgtMC4xMAorCS0gQWRkIHRoZSA1M2M4NzYgZGVzY3JpcHRpb24gdG8gdGhlIGNoaXAgdGFibGUuIFRoaXMgaXMgb25seSB1c2VmdWwgCisJICBmb3IgcHJpbnRpbmcgdGhlIHJpZ2h0IG5hbWUgb2YgdGhlIGNvbnRyb2xsZXIuCisJLSBBZGQgYWRkaXRpb25hbCBjaGVja2luZyBvZiBJTlFVSVJZIGRhdGE6CisJICBDaGVjayBJTlFVSVJZIGRhdGEgcmVjZWl2ZWQgbGVuZ3RoIGlzIGF0IGxlYXN0IDcuIEJ5dGUgNyBvZiAKKwkgIGlucXVpcnkgZGF0YSBjb250YWlucyBkZXZpY2UgZmVhdHVyZXMgYml0cyBhbmQgdGhlIGRyaXZlciBtaWdodCAKKwkgIGJlIGNvbmZ1c2VkIGJ5IGdhcmJhZ2UuIEFsc28gY2hlY2sgcGVyaXBoZXJhbCBxdWFsaWZpZXIuCisJLSBVc2UgYSAxLDMsNSwuLi5NQVhUQUdTKjIrMSB0YWcgbnVtYmVyaW5nLiBQcmV2aW91cyBkcml2ZXIgY291bGQgIAorCSAgdXNlIGFueSB0YWcgbnVtYmVyIGZyb20gMSB0byAyNTMgYW5kIHNvbWUgbm9uIGNvbmZvcm1hbnQgZGV2aWNlcyAgCisJICBtaWdodCBoYXZlIHByb2JsZW1zIHdpdGggbGFyZ2UgdGFnIG51bWJlcnMuCisJLSBVc2UgTkFNRTUzQyBhbmQgTkFNRTUzQzhYWCBmb3IgY2hpcCBuYW1lIHByZWZpeCBjaGlwIGZhbWlseSBuYW1lLgorCSAgSnVzdCBnaXZlIGEgdHJ5IHVzaW5nICJzeW01M2MiIGFuZCAic3ltNTNjOHh4IiBpbnN0ZWFkIG9mICJuY3I1M2MiIAorCSAgYW5kICJuY3I1M2M4eHgiLiA6LSkKKworU3VuIE9jdCAxMSAxN0gwMCAxOTk4IEdlcmFyZCBSb3VkaWVyIChncm91ZGllckBjbHViLWludGVybmV0LmZyKQorCSogdmVyc2lvbiBwcmUtc3ltNTNjOHh4LTAuOQorCS0gREVMLTQ0MSBJdGVtIDIgd29yay1hcm91bmQgZm9yIHRoZSA1M2M4NzYgcmV2IDw9IDUgKDB4MTUpLgorCS0gQnJlYWsgbmNyX3NjYXR0ZXIoKSBpbnRvIDIgZnVuY3Rpb25zIGluIG9yZGVyIHRvIGd1YXJhbnRlZSBiZXN0IAorCSAgcG9zc2libGUgY29kZSBvcHRpbWl6YXRpb24gZm9yIHRoZSBjYXNlIHdlIGdldCBhIHNjYXR0ZXIgbGlzdC4KKwktIEFkZCB0aGUgY29kZSBpbnRlbmRlZCB0byBzdXBwb3J0IHVwIHRvIDEgdGVyYS1ieXRlIGZvciA2NCBiaXQgc3lzdGVtcy4KKwkgIEl0IGlzIHByb2JhYmx5IHRvbyBlYXJseSwgYnV0IEkgd2FudGVkIHRvIGNvbXBsZXRlIHRoZSB0aGluZy4KKworU2F0IE9jdCAzIDE0SDAwIDE5OTggR2VyYXJkIFJvdWRpZXIgKGdyb3VkaWVyQGNsdWItaW50ZXJuZXQuZnIpCisJKiB2ZXJzaW9uIHByZS1zeW01M2M4eHgtMC44CisJLSBEbyBzb21lIHRlc3Rpbmcgd2l0aCBpb19tYXBwZWQgYW5kIGZpeCB3aGF0IG5lZWRlZCB0byBiZSBzby4KKwktIFdhaXQgZm9yIFNDU0kgc2VsZWN0aW9uIHRvIGNvbXBsZXRlIG9yIHRpbWUtb3V0IGltbWVkaWF0ZWx5IGFmdGVyIAorCSAgdGhlIGNoaXAgd29uIGFyYml0cmF0aW9uLCBzaW5jZSBleGVjdXRpbmcgU0NSSVBUUyB3aGlsZSB0aGUgU0NTSSAKKwkgIGNvcmUgaXMgcGVyZm9ybWluZyBTQ1NJIHNlbGVjdGlvbiBicmVha3MgdGhlIHNlbGVjdGlvbiBwcm9jZWR1cmUgCisJICBhdCBsZWFzdCBmb3Igc29tZSBjaGlwIHJldmlzaW9ucy4KKwktIEludGVycnVwdCB0aGUgU0NSSVBUUyBpZiBhIGRldmljZSBkb2VzIG5vdCBnbyB0byBNU0cgT1VUIHBoYXNlIGFmdGVyIAorCSAgaGF2aW5nIGJlZW4gc2VsZWN0ZWQgd2l0aCBBVE4uIFN1Y2ggYSBzaXR1YXRpb24gaXMgbm90IHJlY292ZXJhYmxlLCAKKwkgIGJldHRlciB0byBmYWlsIHdoZW4gd2UgYXJlIHN0dWNrLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5zeW01M2M4eHhfMiBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cuc3ltNTNjOHh4XzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThhNWQ3MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cuc3ltNTNjOHh4XzIKQEAgLTAsMCArMSwxNDQgQEAKK1NhdCBEZWMgMzAgMjE6MzAgMjAwMCBHZXJhcmQgUm91ZGllciAKKwkqIHZlcnNpb24gc3ltLTIuMS4wLTIwMDAxMjMwCisJLSBJbml0aWFsIHJlbGVhc2Ugb2YgU1lNLTIuCisKK01vbiBKYW4gMDggMjE6MzAgMjAwMSBHZXJhcmQgUm91ZGllciAKKwkqIHZlcnNpb24gc3ltLTIuMS4xLTIwMDEwMTA4CisJLSBDaGFuZ2UgYSBjb3VwbGUgb2YgZGVmaW5lcyBjb250YWluaW5nIG5jciBvciBOQ1IgYnkgdGhlaXIgCisJICBlcXVpdmFsZW50IGNvbnRhaW5pbmcgc3ltIG9yIFNZTSBpbnN0ZWFkLgorCitTdW4gSmFuIDE0IDIyOjMwIDIwMDEgR2VyYXJkIFJvdWRpZXIgCisJKiB2ZXJzaW9uIHN5bS0yLjEuMi0yMDAxMDExNAorCS0gRml4IGEgY291cGxlIG9mIHByaW50ZnM6CisJICAqIEFkZCB0aGUgdGFyZ2V0IG51bWJlciB0byB0aGUgZGlzcGxheSBvZiB0cmFuc2ZlciBwYXJhbWV0ZXJzLgorCSAgKiBNYWtlIHRoZSBkaXNwbGF5IG9mIFRDUSBhbmQgcXVldWUgZGVwdGggY2xlYXJlci4KKworV2VkIEphbiAxNyAyMzozMCAyMDAxIEdlcmFyZCBSb3VkaWVyIAorCSogdmVyc2lvbiBzeW0tMi4xLjMtMjAwMTAxMTcKKwktIFdyb25nIHJlc2lkdWFsIHZhbHVlcyB3ZXJlIHJldHVybmVkIGluIHNvbWUgc2l0dWF0aW9ucy4KKwkgIFRoaXMgYnJva2UgY2RyZWNvcmQgd2l0aCBsaW51eC0yLjQuMCwgZm9yIGV4YW1wbGUuCisKK1NhdCBKYW4gMjAgMTg6MDAgMjAwMSBHZXJhcmQgUm91ZGllciAKKwkqIHZlcnNpb24gc3ltLTIuMS40LTIwMDEwMTIwCisJLSBBZGQgeWVhciAyMDAxIHRvIENvcHlyaWdodC4KKwktIEEgdGlueSBidWcgaW4gdGhlIGRtYSBtZW1vcnkgZnJlZWluZyBwYXRoIGhhcyBiZWVuIGZpeGVkLgorCSAgKERyaXZlciB1bmxvYWQgZmFpbGVkIHdpdGggYSBiYWQgYWRkcmVzcyByZWZlcmVuY2UpLgorCitXZWQgSmFuIDI0IDIxOjAwIDIwMDEgR2VyYXJkIFJvdWRpZXIgCisJKiB2ZXJzaW9uIHN5bS0yLjEuNS0yMDAxMDEyNAorCS0gTWFrZSB0aGUgZHJpdmVyIHdvcmsgdW5kZXIgTGludXgtMi40Lnggd2hlbiBzdGF0aWNhbGx5IGxpbmtlZCAKKwkgIHdpdGggdGhlIGtlcm5lbC4KKwktIENoZWNrIGFnYWluc3QgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBmb3IgU0NSSVBUWiBhbmQgYWRkIHRoZSAKKwkgIG1pc3NpbmcgZnJlZSBvZiB0aGlzIG1lbW9yeSBvbiBpbnN0YW5jZSBkZXRhY2guCisJLSBDaGVjayBhZ2FpbnN0IEdQSU8zIHB1bGxlZCBsb3cgZm9yIEhWRCBjb250cm9sbGVycyAoZHJpdmVyIGRpZCAKKwkgIGp1c3QgdGhlIG9wcG9zaXRlKS4KKwkgIE1pc2RldGVjdGlvbiBvZiBCVVMgbW9kZSB3YXMgdHJpZ2dlcmVkIG9uIG1vZHVsZSByZWxvYWQgb25seSwgCisJICBzaW5jZSBCSU9TIHNldHRpbmdzIHdlcmUgdHJ1c3RlZCBpbnN0ZWFkIG9uIGZpcnN0IGxvYWQuCisKK1dlZCBGZWIgNyAyMTowMCAyMDAxIEdlcmFyZCBSb3VkaWVyIAorCSogdmVyc2lvbiBzeW0tMi4xLjYtMjAwMTAyMDcKKwktIENhbGwgcGNpX2VuYWJsZV9kZXZpY2UoKSBhcyB3aXNoZWQgYnkga2VybmVsIG1haW50YWluZXJzLgorCS0gQ2hhbmdlIHRoZSBzeW1fcXVldWVfc2NzaWlvKCkgaW50ZXJmYWNlLgorCSAgVGhpcyBpcyBpbnRlbmRlZCB0byBzaW1wbGlmeSBwb3J0YWJpbGl0eS4KKwktIE1vdmUgdGhlIGNvZGUgaW50ZW5kZWQgdG8gZGVhbCB3aXRoIHRoZSBkb3dsb2FkaW5nIG9mIFNDUklQVFMgCisJICBmcm9tIFNDUklQVFMgOikgaW4gdGhlIHBhdGNoIG1ldGhvZCAod2FzIHdyb25nbHkgcGxhY2VkIGluIAorCSAgdGhlIFNDUklQVFMgc2V0dXAgbWV0aG9kKS4KKwktIEFkZCBhIG1pc3NpbmcgY3B1X3RvX3NjcigpICAobnAtPmFib3J0X3RibC5hZGRyKQorCS0gUmVtb3ZlIGEgd3JvbmcgY3B1X3RvX3NjcigpIChucC0+dGFyZ3RibF9iYSkKKwktIENsZWFudXAgYSBiaXQgdGhlIFBQUiBmYWlsdXJlIHJlY292ZXJ5IGNvZGUuCisKK1NhdCBNYXIgMyAyMTowMCAyMDAxIEdlcmFyZCBSb3VkaWVyIAorCS0gQWRkIG9wdGlvbiBTWU1fT1BUX0FOTk9VTkNFX1RSQU5TRkVSX1JBVEUgYW5kIG1vdmUgdGhlIAorCSAgY29ycmVzcG9uZGluZyBjb2RlIHRvIGZpbGUgc3ltX21pc2MuYy4KKwkgIEFsc28gbW92ZSB0aGUgY29kZSB0aGF0IHNuaWZmZXMgSU5RVUlSWSB0byBzeW1fbWlzYy5jLgorCSAgVGhpcyBhbGxvd3MgdG8gc2hhcmUgdGhlIGNvcnJlc3BvbmRpbmcgY29kZSB3aXRoIE5ldEJTRCAKKwkgIHdpdGhvdXQgcG9sbHVhdGluZyB0aGUgY29yZSBkcml2ZXIgc291cmNlIChzeW1faGlwZC5jKS4KKwktIEFkZCBvcHRpb25uYWwgY29kZSB0aGF0IGhhbmRsZXMgSU8gdGltZW91dHMgZnJvbSB0aGUgZHJpdmVyLgorCSAgKG5vdCB1c2VkIHVuZGVyIExpbnV4LCBidXQgcmVxdWlyZWQgZm9yIE5ldEJTRCkKKwktIERvbm5vdCBhc3N1bWUgYW55IGxvbmdlciB0aGF0IFBBR0VfU0hJRlQgYW5kIFBBR0VfU0laRSBhcmUgCisJICBkZWZpbmVkIGF0IGNvbXBpbGUgdGltZSwgYXMgYXQgbGVhc3QgTmV0QlNEIHVzZXMgdmFyaWFibGVzIAorCSAgaW4gbWVtb3J5IGZvciB0aGF0LgorCS0gUmVmaW5lIGEgd29yay1hcm91bmQgZm9yIHRoZSBDMTAxMC0zMyB0aGF0IGNvbnNpc3RzIGluIAorCSAgZGlzYWJsaW5nIGludGVybmFsIExPQUQvU1RPUkUuIFdhcyBhcHBsaWVkIHVwIHRvIHJldmlzaW9uIDEuCisJICBJcyBub3cgb25seSBhcHBsaWVkIHRvIHJldmlzaW9uIDAuCisJLSBTb21lIGNvZGUgcmVvcmdhbmlzYXRpb25zIGR1ZSB0byBjb2RlIG1vdmVzIGJldHdlZW4gZmlsZXMuCisKK1R1ZXMgQXByIDEwIDIxOjAwIDIwMDEgR2VyYXJkIFJvdWRpZXIgCisJKiB2ZXJzaW9uIHN5bS0yLjEuOS0yMDAxMDQxMgorCS0gUmVzZXQgNTNDODk2IGFuZCA1M0MxMDEwIGNoaXAgYWNjb3JkaW5nIHRvIHRoZSBtYW51YWwuCisJICAoaS5lLjogc2V0IHRoZSBBQlJUIGJpdCBpbiBJU1RBVCBpZiBTQ1JJUFRTIGFyZSBydW5uaW5nKQorCS0gU2V0ICNMVU4gaW4gcmVxdWVzdCBzZW5zZSBvbmx5IGlmIHNjc2kgdmVyc2lvbiA8PSAyIGFuZAorCSAgI0xVTiA8PSA3LgorCS0gU2V0IGJ1c3lfaXRsIGluIExDQiB0byAxIGlmIHRoZSBMQ0IgaXMgYWxsb2NhdGVkIGFuZCBhIAorCSAgU0NTSSBjb21tYW5kIGlzIGFjdGl2ZS4gVGhpcyBpcyBhIHNpbXBsaWZpY2F0aW9uLgorCS0gSW4gc3ltX2hjYl9mcmVlKCksIGRvIG5vdCBzY2FuIHRoZSBmcmVlX2NjYnEgaWYgbm8gQ0NCcyAKKwkgIGhhcyBiZWVuIGFsbG9jYXRlZC4gVGhpcyBmaXhlcyBhIHBhbmljIGlmIGF0dGFjaCBmYWlsZWQuCisJLSBBZGQgRFQvU1QgKGRvdWJsZS9zaW1wbGUgdHJhbnNpdGlvbikgaW4gdGhlIHRyYW5zZmVyIAorCSAgbmVnb3RpYXRpb24gYW5ub3VuY2UuCisJLSBGb3JjZXMgdGhlIG1heCBudW1iZXIgb2YgdGFza3MgcGVyIExVTiB0byBhdCBsZWFzdCA2NC4KKwktIFVzZSBwY2lfc2V0X2RtYV9tYXNrKCkgZm9yIGxpbnV4LTIuNC4zIGFuZCBhYm92ZS4KKwktIEEgY291cGxlIG9mIGNvbW1lbnRzIGZpeGVzLgorCitXZWQgTWF5IDIyOjAwIDIwMDEgR2VyYXJkIFJvdWRpZXIgCisJKiB2ZXJzaW9uIHN5bS0yLjEuMTAtMjAwMTA1MDkKKwktIE1hc2sgR1BDTlRMIGFnYWluc3QgMHgxYyAod2FzIDB4ZmMpIGZvciB0aGUgcmVhZGluZyBvZiB0aGUgTlZSQU0uCisJICBUaGlzIGVuc3VyZSBMRURDIGJpdCB3aWxsIG5vdCBiZSBzZXQgb24gODk2IGFuZCBsYXRlciBjaGlwcy4KKwkgIEZpeCBzZW50IGJ5IENoaXAgU2FsemVuYmVyZyA8Y2hpcEBwZXJsc3VwcG9ydC5jb20+LgorCS0gRGVmaW5lIHRoZSBudW1iZXIgb2YgUFFTIEJVU2VzIHN1cHBvcnRlZC4KKwkgIEZpeCBzZW50IGJ5IFN0aWcgVGVsZmVyIDxzdGlnQGFwaS1uZXR3b3Jrcy5jb20+CisJLSBNaXNjZWxsYW5lb3VzIGNvbW1vbiBjb2RlIHJlYXJyYW5nZW1lbnRzIGR1ZSB0byBOZXRCU0QgYWNjZWwgCisJICBpb2N0bCBzdXBwb3J0LCB3aXRob3V0IGltcGFjdCBvbiBMaW51eCAoaG9wZWZ1bGx5KS4KKworTW9uIEp1bHkgMiAxMjowMCAyMDAxIEdlcmFyZCBSb3VkaWVyIAorCSogdmVyc2lvbiBzeW0tMi4xLjExLTIwMDEwNzAyCisJLSBBZGQgVGVrcmFtIDM5MCBVMkIvVTJXIFNDU0kgTEVEIGhhbmRsaW5nLgorCSAgU3VibWl0dGVkIGJ5IENoaXAgU2FsemVuYmVyZyA8Y2hpcEB2YWxpbnV4LmNvbT4KKwktIEFkZCBjYWxsIHRvIHNjc2lfc2V0X3BjaV9kZXZpY2UoKSBmb3Iga2VybmVscyA+PSAyLjQuNC4KKwktIENoZWNrIHBjaSBkbWEgbWFwcGluZyBmYWlsdXJlcyBhbmQgY29tcGxldGUgdGhlIElPIHdpdGggc29tZSAKKwkgIGVycm9yIHdoZW4gc3VjaCBtYXBwaW5nIGZhaWxzLgorCS0gRmlsbCBpbiBpbnN0YW5jZS0+bWF4X2NtZF9sZW4gZm9yIGtlcm5lbHMgPiAyLjQuMC4KKwktIEEgY291cGxlIG9mIHRpbnkgZml4ZXMgLi4uCisKK1N1biBTZXAgOSAxODowMCAyMDAxIEdlcmFyZCBSb3VkaWVyIAorCSogdmVyc2lvbiBzeW0tMi4xLjEyLTIwMDEwOTA5CisJLSBDaGFuZ2UgbXkgZW1haWwgYWRkcmVzcy4KKwktIEFkZCBpbmZyYXN0cnVjdHVyZSBmb3IgdGhlIGZvcnRoY29taW5nIDY0IGJpdCBETUEgYWRkcmVzc2luZyBzdXBwb3J0LgorCSAgKEJhc2VkIG9uIFBDSSA2NCBiaXQgcGF0Y2ggZnJvbSBEYXZpZCBTLiBNaWxsZXIpCisJLSBEb25ub3QgdXNlIGFueW1vcmUgdm1fb2Zmc2V0X3QgdHlwZS4KKworU2F0IFNlcCAxNSAyMDowMCAyMDAxIEdlcmFyZCBSb3VkaWVyIAorCSogdmVyc2lvbiBzeW0tMi4xLjEzLTIwMDEwOTE2CisJLSBBZGQgc3VwcG9ydCBmb3IgNjQgYml0IERNQSBhZGRyZXNzaW5nIHVzaW5nIHNlZ21lbnQgcmVnaXN0ZXJzLgorCSAgMTYgcmVnaXN0ZXJzIGZvciB1cCB0byA0IEdCIHggMTYgLT4gNjQgR0IuCisKK1NhdCBTZXAgMjIgMTI6MDAgMjAwMSBHZXJhcmQgUm91ZGllciAKKwkqIHZlcnNpb24gc3ltLTIuMS4xNC0yMDAxMDkyMgorCS0gQ29tcGxldGUgcmV3cml0ZSBvZiB0aGUgZWggaGFuZGxpbmcuIFRoZSBkcml2ZXIgaXMgbm93IHVzaW5nIGEgCisJICBzZW1hcGhvcmUgaW4gb3JkZXIgdG8gYmVoYXZlIHN5bmNocm9ub3VzbHkgYXMgcmVxdWlyZWQgYnkgdGhlIGVoIAorCSAgdGhyZWFkcy4gQSB0aW1lciBpcyBhbHNvIHVzZWQgdG8gcHJldmVudCBmcm9tIHdhaXRpbmcgaW5kZWZpbml0ZWx5LgorCitTdW4gU2VwIDMwIDE3OjAwIDIwMDEgR2VyYXJkIFJvdWRpZXIgCisJKiB2ZXJzaW9uIHN5bS0yLjEuMTUtMjAwMTA5MzAKKwktIEluY2x1ZGUgPGxpbnV4L21vZHVsZS5oPiB1bmNvbmRpdGlvbm5hbHkgYXMgZXhwZWN0ZWQgYnkgbGF0ZXN0CisJICBrZXJuZWxzLgorCS0gVXNlIGRlbF90aW1lcl9zeW5jKCkgZm9yIHJlY2VudCBrZXJuZWxzIHRvIGtpbGwgdGhlIGRyaXZlciB0aW1lciAKKwkgIG9uIG1vZHVsZSByZWxlYXNlLgorCitTdW4gT2N0IDI4IDE1OjAwIDIwMDEgR2VyYXJkIFJvdWRpZXIgCisJKiB2ZXJzaW9uIHN5bS0yLjEuMTYtMjAwMTEwMjgKKwktIFNsaWdodGx5IHNpbXBsaWZ5IGRyaXZlciBjb25maWd1cmF0aW9uLgorCS0gUHJlcGFyZSBhIG5ldyBwYXRjaCBhZ2FpbnN0IGxpbnV4LTIuNC4xMy4KKworU2F0IE5vdiAxNyAxMDowMCAyMDAxIEdlcmFyZCBSb3VkaWVyIAorCSogdmVyc2lvbiBzeW0tMi4xLjE3CisJLSBGaXggYSBjb3VwbGUgb2YgZ2NjL2djYzMgd2FybmluZ3MuCisJLSBBbGxvY2F0ZSBzZXBhcmF0ZWx5IGZyb20gdGhlIEhDQiB0aGUgYXJyYXkgZm9yIENDQnMgaGFzaGVkIGJ5IERTQS4KKwkgIEFsbCBkcml2ZXIgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBub3cgbm90IGdyZWF0ZXIgdGhhbiAxIFBBR0UgCisJICBldmVuIG9uIFBQQzY0IC8gNEtCIFBBR0Ugc3VycHJpc2luZyBzZXR1cC4KKworU2F0IERlYyAwMSAxODowMCAyMDAxIEdlcmFyZCBSb3VkaWVyIAorCSogdmVyc2lvbiBzeW0tMi4xLjE3YQorCS0gVXNlIHVfbG9uZyBpbnN0ZWFkIG9mIFUzMiBmb3IgdGhlIElPIGJhc2UgY29va2llLiBUaGlzIGlzIG1vcmUgCisJICBjb25zaXN0ZW50IHdpdGggd2hhdCBhcmNocyBhcmUgZXhwZWN0aW5nLgorCS0gVXNlIE1NSU8gcGVyIGRlZmF1bHQgZm9yIFBvd2VyIFBDIGluc3RlYWQgb2Ygc29tZSBmYWtlIG5vcm1hbCBJTywKKwkgIGFzIFBhdWwgTWFja2VycmFzIHN0YXRlZCB0aGF0IE1NSU8gd29ya3MgZmluZSBub3cgb24gdGhpcyBhcmNoLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL0ZsYXNoUG9pbnQudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL0ZsYXNoUG9pbnQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YWNhYTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvRmxhc2hQb2ludC50eHQKQEAgLTAsMCArMSwxNjMgQEAKK1RoZSBCdXNMb2dpYyBGbGFzaFBvaW50IFNDU0kgSG9zdCBBZGFwdGVycyBhcmUgbm93IGZ1bGx5IHN1cHBvcnRlZCBvbiBMaW51eC4KK1RoZSB1cGdyYWRlIHByb2dyYW0gZGVzY3JpYmVkIGJlbG93IGhhcyBiZWVuIG9mZmljaWFsbHkgdGVybWluYXRlZCBlZmZlY3RpdmUKKzMxIE1hcmNoIDE5OTcgc2luY2UgaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KKworCisKKwkgIE1ZTEVYIElOVFJPRFVDRVMgTElOVVggT1BFUkFUSU5HIFNZU1RFTSBTVVBQT1JUIEZPUiBJVFMKKwkgICAgICBCVVNMT0dJQyBGTEFTSFBPSU5UIExJTkUgT0YgU0NTSSBIT1NUIEFEQVBURVJTCisKKworRlJFTU9OVCwgQ0EsIC0tIE9jdG9iZXIgOCwgMTk5NiAtLSBNeWxleCBDb3Jwb3JhdGlvbiBoYXMgZXhwYW5kZWQgTGludXgKK29wZXJhdGluZyBzeXN0ZW0gc3VwcG9ydCB0byBpdHMgQnVzTG9naWMgYnJhbmQgb2YgRmxhc2hQb2ludCBVbHRyYSBTQ1NJCitob3N0IGFkYXB0ZXJzLiAgQWxsIG9mIEJ1c0xvZ2ljJ3Mgb3RoZXIgU0NTSSBob3N0IGFkYXB0ZXJzLCBpbmNsdWRpbmcgdGhlCitNdWx0aU1hc3RlciBsaW5lLCBjdXJyZW50bHkgc3VwcG9ydCB0aGUgTGludXggb3BlcmF0aW5nIHN5c3RlbS4gIExpbnV4Citkcml2ZXJzIGFuZCBpbmZvcm1hdGlvbiB3aWxsIGJlIGF2YWlsYWJsZSBvbiBPY3RvYmVyIDE1dGggYXQKK2h0dHA6Ly93d3cuZGFuZGVsaW9uLmNvbS9MaW51eC8uCisKKyJNeWxleCBpcyBjb21taXR0ZWQgdG8gc3VwcG9ydGluZyB0aGUgTGludXggY29tbXVuaXR5LCIgc2F5cyBQZXRlciBTaGFtYm9yYSwKK3ZpY2UgcHJlc2lkZW50IG9mIG1hcmtldGluZyBmb3IgTXlsZXguICAiV2UgaGF2ZSBzdXBwb3J0ZWQgTGludXggZHJpdmVyCitkZXZlbG9wbWVudCBhbmQgcHJvdmlkZWQgdGVjaG5pY2FsIHN1cHBvcnQgZm9yIG91ciBob3N0IGFkYXB0ZXJzIGZvciBzZXZlcmFsCit5ZWFycywgYW5kIGFyZSBwbGVhc2VkIHRvIG5vdyBtYWtlIG91ciBGbGFzaFBvaW50IHByb2R1Y3RzIGF2YWlsYWJsZSB0byB0aGlzCit1c2VyIGJhc2UuIgorCitUaGUgTGludXggT3BlcmF0aW5nIFN5c3RlbQorCitMaW51eCBpcyBhIGZyZWVseS1kaXN0cmlidXRlZCBpbXBsZW1lbnRhdGlvbiBvZiBVTklYIGZvciBJbnRlbCB4ODYsIFN1bgorU1BBUkMsIFNHSSBNSVBTLCBNb3Rvcm9sYSA2OGssIERpZ2l0YWwgQWxwaGEgQVhQIGFuZCBNb3Rvcm9sYSBQb3dlclBDCittYWNoaW5lcy4gIEl0IHN1cHBvcnRzIGEgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSwgaW5jbHVkaW5nIHRoZSBYIFdpbmRvdworU3lzdGVtLCBFbWFjcywgYW5kIFRDUC9JUCBuZXR3b3JraW5nLiAgRnVydGhlciBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgYXQKK2h0dHA6Ly93d3cubGludXgub3JnIGFuZCBodHRwOi8vd3d3LnNzYy5jb20vbGludXguCisKK0ZsYXNoUG9pbnQgSG9zdCBBZGFwdGVycworCitUaGUgRmxhc2hQb2ludCBmYW1pbHkgb2YgVWx0cmEgU0NTSSBob3N0IGFkYXB0ZXJzLCBkZXNpZ25lZCBmb3Igd29ya3N0YXRpb24KK2FuZCBmaWxlIHNlcnZlciBlbnZpcm9ubWVudHMsIGFyZSBhdmFpbGFibGUgaW4gbmFycm93LCB3aWRlLCBkdWFsIGNoYW5uZWwsCithbmQgZHVhbCBjaGFubmVsIHdpZGUgdmVyc2lvbnMuICBUaGVzZSBhZGFwdGVycyBmZWF0dXJlIFNlcUVuZ2luZQorYXV0b21hdGlvbiB0ZWNobm9sb2d5LCB3aGljaCBtaW5pbWl6ZXMgU0NTSSBjb21tYW5kIG92ZXJoZWFkIGFuZCByZWR1Y2VzCit0aGUgbnVtYmVyIG9mIGludGVycnVwdHMgZ2VuZXJhdGVkIHRvIHRoZSBDUFUuCisKK0Fib3V0IE15bGV4CisKK015bGV4IENvcnBvcmF0aW9uIChOQVNEQVEvTk0gU1lNQk9MOiBNWUxYKSwgZm91bmRlZCBpbiAxOTgzLCBpcyBhIGxlYWRpbmcKK3Byb2R1Y2VyIG9mIFJBSUQgdGVjaG5vbG9neSBhbmQgbmV0d29yayBtYW5hZ2VtZW50IHByb2R1Y3RzLiAgVGhlIGNvbXBhbnkKK3Byb2R1Y2VzIGhpZ2ggcGVyZm9ybWFuY2UgZGlzayBhcnJheSAoUkFJRCkgY29udHJvbGxlcnMsIGFuZCBjb21wbGVtZW50YXJ5Citjb21wdXRlciBwcm9kdWN0cyBmb3IgbmV0d29yayBzZXJ2ZXJzLCBtYXNzIHN0b3JhZ2Ugc3lzdGVtcywgd29ya3N0YXRpb25zCithbmQgc3lzdGVtIGJvYXJkcy4gIFRocm91Z2ggaXRzIHdpZGUgcmFuZ2Ugb2YgUkFJRCBjb250cm9sbGVycyBhbmQgaXRzCitCdXNMb2dpYyBsaW5lIG9mIFVsdHJhIFNDU0kgaG9zdCBhZGFwdGVyIHByb2R1Y3RzLCBNeWxleCBwcm92aWRlcyBlbmFibGluZworaW50ZWxsaWdlbnQgSS9PIHRlY2hub2xvZ2llcyB0aGF0IGluY3JlYXNlIG5ldHdvcmsgbWFuYWdlbWVudCBjb250cm9sLAorZW5oYW5jZSBDUFUgdXRpbGl6YXRpb24sIG9wdGltaXplIEkvTyBwZXJmb3JtYW5jZSwgYW5kIGVuc3VyZSBkYXRhIHNlY3VyaXR5CithbmQgYXZhaWxhYmlsaXR5LiAgUHJvZHVjdHMgYXJlIHNvbGQgZ2xvYmFsbHkgdGhyb3VnaCBhIG5ldHdvcmsgb2YgT0VNcywKK21ham9yIGRpc3RyaWJ1dG9ycywgVkFScywgYW5kIHN5c3RlbSBpbnRlZ3JhdG9ycy4gIE15bGV4IENvcnBvcmF0aW9uIGlzCitoZWFkcXVhcnRlcmVkIGF0IDM0NTUxIEFyZGVud29vZCBCbHZkLiwgRnJlbW9udCwgQ0EuCisKKwkJCQkgICAjIyMjCisKK0NvbnRhY3Q6CisKK1BldGVyIFNoYW1ib3JhCitWaWNlIFByZXNpZGVudCBvZiBNYXJrZXRpbmcKK015bGV4IENvcnAuCis1MTAvNzk2LTYxMDAKK3BldGVyc0BteWxleC5jb20KKwwKKwkJCSAgICAgICBBTk5PVU5DRU1FTlQKKwkgICAgICAgQnVzTG9naWMgRmxhc2hQb2ludCBMVC9CVC05NDggVXBncmFkZSBQcm9ncmFtCisJCQkgICAgICAxIEZlYnJ1YXJ5IDE5OTYKKworCQkJICBBRERJVElPTkFMIEFOTk9VTkNFTUVOVAorCSAgICAgICBCdXNMb2dpYyBGbGFzaFBvaW50IExXL0JULTk1OCBVcGdyYWRlIFByb2dyYW0KKwkJCSAgICAgICAxNCBKdW5lIDE5OTYKKworRXZlciBzaW5jZSBpdHMgaW50cm9kdWN0aW9uIGxhc3QgT2N0b2JlciwgdGhlIEJ1c0xvZ2ljIEZsYXNoUG9pbnQgTFQgaGFzCitiZWVuIHByb2JsZW1hdGljIGZvciBtZW1iZXJzIG9mIHRoZSBMaW51eCBjb21tdW5pdHksIGluIHRoYXQgbm8gTGludXgKK2RyaXZlcnMgaGF2ZSBiZWVuIGF2YWlsYWJsZSBmb3IgdGhpcyBuZXcgVWx0cmEgU0NTSSBwcm9kdWN0LiAgRGVzcGl0ZSBpdCdzCitvZmZpY2lhbGx5IGJlaW5nIHBvc2l0aW9uZWQgYXMgYSBkZXNrdG9wIHdvcmtzdGF0aW9uIHByb2R1Y3QsIGFuZCBub3QgYmVpbmcKK3BhcnRpY3VsYXJseSB3ZWxsIHN1aXRlZCBmb3IgYSBoaWdoIHBlcmZvcm1hbmNlIG11bHRpdGFza2luZyBvcGVyYXRpbmcKK3N5c3RlbSBsaWtlIExpbnV4LCB0aGUgRmxhc2hQb2ludCBMVCBoYXMgYmVlbiB0b3V0ZWQgYnkgY29tcHV0ZXIgc3lzdGVtCit2ZW5kb3JzIGFzIHRoZSBsYXRlc3QgdGhpbmcsIGFuZCBoYXMgYmVlbiBzb2xkIGV2ZW4gb24gbWFueSBvZiB0aGVpciBoaWdoCitlbmQgc3lzdGVtcywgdG8gdGhlIGV4Y2x1c2lvbiBvZiB0aGUgb2xkZXIgTXVsdGlNYXN0ZXIgcHJvZHVjdHMuICBUaGlzIGhhcworY2F1c2VkIGdyaWVmIGZvciBtYW55IHBlb3BsZSB3aG8gaW5hZHZlcnRlbnRseSBwdXJjaGFzZWQgYSBzeXN0ZW0gZXhwZWN0aW5nCit0aGF0IGFsbCBCdXNMb2dpYyBTQ1NJIEhvc3QgQWRhcHRlcnMgd2VyZSBzdXBwb3J0ZWQgYnkgTGludXgsIG9ubHkgdG8KK2Rpc2NvdmVyIHRoYXQgdGhlIEZsYXNoUG9pbnQgd2FzIG5vdCBzdXBwb3J0ZWQgYW5kIHdvdWxkIG5vdCBiZSBmb3IgcXVpdGUKK3NvbWUgdGltZSwgaWYgZXZlci4KKworQWZ0ZXIgdGhpcyBwcm9ibGVtIHdhcyBpZGVudGlmaWVkLCBCdXNMb2dpYyBjb250YWN0ZWQgaXRzIG1ham9yIE9FTQorY3VzdG9tZXJzIHRvIG1ha2Ugc3VyZSB0aGUgQlQtOTQ2Qy85NTZDIE11bHRpTWFzdGVyIGNhcmRzIHdvdWxkIHN0aWxsIGJlCittYWRlIGF2YWlsYWJsZSwgYW5kIHRoYXQgTGludXggdXNlcnMgd2hvIG1pc3Rha2VubHkgb3JkZXJlZCBzeXN0ZW1zIHdpdGgKK3RoZSBGbGFzaFBvaW50IHdvdWxkIGJlIGFibGUgdG8gdXBncmFkZSB0byB0aGUgQlQtOTQ2Qy4gIFdoaWxlIHRoaXMgaGVscGVkCittYW55IHB1cmNoYXNlcnMgb2YgbmV3IHN5c3RlbXMsIGl0IHdhcyBvbmx5IGEgcGFydGlhbCBzb2x1dGlvbiB0byB0aGUKK292ZXJhbGwgcHJvYmxlbSBvZiBGbGFzaFBvaW50IHN1cHBvcnQgZm9yIExpbnV4IHVzZXJzLiAgSXQgZGlkIG5vdGhpbmcgdG8KK2Fzc2lzdCB0aGUgcGVvcGxlIHdobyBpbml0aWFsbHkgcHVyY2hhc2VkIGEgRmxhc2hQb2ludCBmb3IgYSBzdXBwb3J0ZWQKK29wZXJhdGluZyBzeXN0ZW0gYW5kIHRoZW4gbGF0ZXIgZGVjaWRlZCB0byBydW4gTGludXgsIG9yIHRob3NlIHdobyBoYWQKK2VuZGVkIHVwIHdpdGggYSBGbGFzaFBvaW50IExULCBiZWxpZXZpbmcgaXQgd2FzIHN1cHBvcnRlZCwgYW5kIHdlcmUgdW5hYmxlCit0byByZXR1cm4gaXQuCisKK0luIHRoZSBtaWRkbGUgb2YgRGVjZW1iZXIsIEkgYXNrZWQgdG8gbWVldCB3aXRoIEJ1c0xvZ2ljJ3Mgc2VuaW9yCittYW5hZ2VtZW50IHRvIGRpc2N1c3MgdGhlIGlzc3VlcyByZWxhdGVkIHRvIExpbnV4IGFuZCBmcmVlIHNvZnR3YXJlIHN1cHBvcnQKK2ZvciB0aGUgRmxhc2hQb2ludC4gIFJ1bW9ycyBvZiB2YXJ5aW5nIGFjY3VyYWN5IGhhZCBiZWVuIGNpcmN1bGF0aW5nCitwdWJsaWNseSBhYm91dCBCdXNMb2dpYydzIGF0dGl0dWRlIHRvd2FyZCB0aGUgTGludXggY29tbXVuaXR5LCBhbmQgSSBmZWx0CitpdCB3YXMgYmVzdCB0aGF0IHRoZXNlIGlzc3VlcyBiZSBhZGRyZXNzZWQgZGlyZWN0bHkuICBJIHNlbnQgYW4gZW1haWwKK21lc3NhZ2UgYWZ0ZXIgMTFwbSBvbmUgZXZlbmluZywgYW5kIHRoZSBtZWV0aW5nIHRvb2sgcGxhY2UgdGhlIG5leHQKK2FmdGVybm9vbi4gIFVuZm9ydHVuYXRlbHksIGNvcnBvcmF0ZSB3aGVlbHMgc29tZXRpbWVzIGdyaW5kIHNsb3dseSwKK2VzcGVjaWFsbHkgd2hlbiBhIGNvbXBhbnkgaXMgYmVpbmcgYWNxdWlyZWQsIGFuZCBzbyBpdCdzIHRha2VuIHVudGlsIG5vdworYmVmb3JlIHRoZSBkZXRhaWxzIHdlcmUgY29tcGxldGVseSBkZXRlcm1pbmVkIGFuZCBhIHB1YmxpYyBzdGF0ZW1lbnQgY291bGQKK2JlIG1hZGUuCisKK0J1c0xvZ2ljIGlzIG5vdCBwcmVwYXJlZCBhdCB0aGlzIHRpbWUgdG8gcmVsZWFzZSB0aGUgaW5mb3JtYXRpb24gbmVjZXNzYXJ5Citmb3IgdGhpcmQgcGFydGllcyB0byB3cml0ZSBkcml2ZXJzIGZvciB0aGUgRmxhc2hQb2ludC4gIFRoZSBvbmx5IGV4aXN0aW5nCitGbGFzaFBvaW50IGRyaXZlcnMgaGF2ZSBiZWVuIHdyaXR0ZW4gZGlyZWN0bHkgYnkgQnVzTG9naWMgRW5naW5lZXJpbmcsIGFuZAordGhlcmUgaXMgbm8gRmxhc2hQb2ludCBkb2N1bWVudGF0aW9uIHN1ZmZpY2llbnRseSBkZXRhaWxlZCB0byBhbGxvdyBvdXRzaWRlCitkZXZlbG9wZXJzIHRvIHdyaXRlIGEgZHJpdmVyIHdpdGhvdXQgc3Vic3RhbnRpYWwgYXNzaXN0YW5jZS4gIFdoaWxlIHRoZXJlCithcmUgcGVvcGxlIGF0IEJ1c0xvZ2ljIHdobyB3b3VsZCByYXRoZXIgbm90IHJlbGVhc2UgdGhlIGRldGFpbHMgb2YgdGhlCitGbGFzaFBvaW50IGFyY2hpdGVjdHVyZSBhdCBhbGwsIHRoYXQgZGViYXRlIGhhcyBub3QgeWV0IGJlZW4gc2V0dGxlZCBlaXRoZXIKK3dheS4gIEluIGFueSBldmVudCwgZXZlbiBpZiBkb2N1bWVudGF0aW9uIHdlcmUgYXZhaWxhYmxlIHRvZGF5IGl0IHdvdWxkCit0YWtlIHF1aXRlIGEgd2hpbGUgZm9yIGEgdXNhYmxlIGRyaXZlciB0byBiZSB3cml0dGVuLCBlc3BlY2lhbGx5IHNpbmNlIEknbQorbm90IGNvbnZpbmNlZCB0aGF0IHRoZSBlZmZvcnQgcmVxdWlyZWQgd291bGQgYmUgd29ydGh3aGlsZS4KKworSG93ZXZlciwgQnVzTG9naWMgZG9lcyByZW1haW4gY29tbWl0dGVkIHRvIHByb3ZpZGluZyBhIGhpZ2ggcGVyZm9ybWFuY2UKK1NDU0kgc29sdXRpb24gZm9yIHRoZSBMaW51eCBjb21tdW5pdHksIGFuZCBkb2VzIG5vdCB3YW50IHRvIHNlZSBhbnlvbmUgbGVmdAordW5hYmxlIHRvIHJ1biBMaW51eCBiZWNhdXNlIHRoZXkgaGF2ZSBhIEZsYXNocG9pbnQgTFQuICBUaGVyZWZvcmUsIEJ1c0xvZ2ljCitoYXMgcHV0IGluIHBsYWNlIGEgZGlyZWN0IHVwZ3JhZGUgcHJvZ3JhbSB0byBhbGxvdyBhbnkgTGludXggdXNlciB3b3JsZHdpZGUKK3RvIHRyYWRlIGluIHRoZWlyIEZsYXNoUG9pbnQgTFQgZm9yIHRoZSBuZXcgQlQtOTQ4IE11bHRpTWFzdGVyIFBDSSBVbHRyYQorU0NTSSBIb3N0IEFkYXB0ZXIuICBUaGUgQlQtOTQ4IGlzIHRoZSBVbHRyYSBTQ1NJIHN1Y2Nlc3NvciB0byB0aGUgQlQtOTQ2QworYW5kIGhhcyBhbGwgdGhlIGJlc3QgZmVhdHVyZXMgb2YgYm90aCB0aGUgQlQtOTQ2QyBhbmQgRmxhc2hQb2ludCBMVCwKK2luY2x1ZGluZyBzbWFydCB0ZXJtaW5hdGlvbiBhbmQgYSBmbGFzaCBQUk9NIGZvciBlYXN5IGZpcm13YXJlIHVwZGF0ZXMsIGFuZAoraXMgb2YgY291cnNlIGNvbXBhdGlibGUgd2l0aCB0aGUgcHJlc2VudCBMaW51eCBkcml2ZXIuICBUaGUgcHJpY2UgZm9yIHRoaXMKK3VwZ3JhZGUgaGFzIGJlZW4gc2V0IGF0IFVTICQ0NSBwbHVzIHNoaXBwaW5nIGFuZCBoYW5kbGluZywgYW5kIHRoZSB1cGdyYWRlCitwcm9ncmFtIHdpbGwgYmUgYWRtaW5pc3RlcmVkIHRocm91Z2ggQnVzTG9naWMgVGVjaG5pY2FsIFN1cHBvcnQsIHdoaWNoIGNhbgorYmUgcmVhY2hlZCBieSBlbGVjdHJvbmljIG1haWwgYXQgdGVjaHN1cEBidXNsb2dpYy5jb20sIGJ5IFZvaWNlIGF0ICsxIDQwOAorNjU0LTA3NjAsIG9yIGJ5IEZBWCBhdCArMSA0MDggNDkyLTE1NDIuCisKK0FzIG9mIDE0IEp1bmUgMTk5NiwgdGhlIG9yaWdpbmFsIEJ1c0xvZ2ljIEZsYXNoUG9pbnQgTFQgdG8gQlQtOTQ4IHVwZ3JhZGUKK3Byb2dyYW0gaGFzIG5vdyBiZWVuIGV4dGVuZGVkIHRvIGVuY29tcGFzcyB0aGUgRmxhc2hQb2ludCBMVyBXaWRlIFVsdHJhCitTQ1NJIEhvc3QgQWRhcHRlci4gIEFueSBMaW51eCB1c2VyIHdvcmxkd2lkZSBtYXkgdHJhZGUgaW4gdGhlaXIgRmxhc2hQb2ludAorTFcgKEJULTk1MCkgZm9yIGEgQlQtOTU4IE11bHRpTWFzdGVyIFBDSSBVbHRyYSBTQ1NJIEhvc3QgQWRhcHRlci4gIFRoZQorcHJpY2UgZm9yIHRoaXMgdXBncmFkZSBoYXMgYmVlbiBzZXQgYXQgVVMgJDY1IHBsdXMgc2hpcHBpbmcgYW5kIGhhbmRsaW5nLgorCitJIHdhcyBhIGJldGEgdGVzdCBzaXRlIGZvciB0aGUgQlQtOTQ4Lzk1OCwgYW5kIHZlcnNpb25zIDEuMi4xIGFuZCAxLjMuMSBvZgorbXkgQnVzTG9naWMgZHJpdmVyIGFscmVhZHkgaW5jbHVkZWQgbGF0ZW50IHN1cHBvcnQgZm9yIHRoZSBCVC05NDgvOTU4LgorQWRkaXRpb25hbCBjb3NtZXRpYyBzdXBwb3J0IGZvciB0aGUgVWx0cmEgU0NTSSBNdWx0aU1hc3RlciBjYXJkcyB3YXMgYWRkZWQKK3N1YnNlcXVlbnQgcmVsZWFzZXMuICBBcyBhIHJlc3VsdCBvZiB0aGlzIGNvb3BlcmF0aXZlIHRlc3RpbmcgcHJvY2VzcywKK3NldmVyYWwgZmlybXdhcmUgYnVncyB3ZXJlIGZvdW5kIGFuZCBjb3JyZWN0ZWQuICBNeSBoZWF2aWx5IGxvYWRlZCBMaW51eAordGVzdCBzeXN0ZW0gcHJvdmlkZWQgYW4gaWRlYWwgZW52aXJvbm1lbnQgZm9yIHRlc3RpbmcgZXJyb3IgcmVjb3ZlcnkKK3Byb2Nlc3NlcyB0aGF0IGFyZSBtdWNoIG1vcmUgcmFyZWx5IGV4ZXJjaXNlZCBpbiBwcm9kdWN0aW9uIHN5c3RlbXMsIGJ1dAorYXJlIGNydWNpYWwgdG8gb3ZlcmFsbCBzeXN0ZW0gc3RhYmlsaXR5LiAgSXQgd2FzIGVzcGVjaWFsbHkgY29udmVuaWVudAorYmVpbmcgYWJsZSB0byB3b3JrIGRpcmVjdGx5IHdpdGggdGhlaXIgZmlybXdhcmUgZW5naW5lZXIgaW4gZGVtb25zdHJhdGluZwordGhlIHByb2JsZW1zIHVuZGVyIGNvbnRyb2wgb2YgdGhlIGZpcm13YXJlIGRlYnVnZ2luZyBlbnZpcm9ubWVudDsgdGhpbmdzCitzdXJlIGhhdmUgY29tZSBhIGxvbmcgd2F5IHNpbmNlIHRoZSBsYXN0IHRpbWUgSSB3b3JrZWQgb24gZmlybXdhcmUgZm9yIGFuCitlbWJlZGRlZCBzeXN0ZW0uICBJIGFtIHByZXNlbnRseSB3b3JraW5nIG9uIHNvbWUgcGVyZm9ybWFuY2UgdGVzdGluZyBhbmQKK2V4cGVjdCB0byBoYXZlIHNvbWUgZGF0YSB0byByZXBvcnQgaW4gdGhlIG5vdCB0b28gZGlzdGFudCBmdXR1cmUuCisKK0J1c0xvZ2ljIGFza2VkIG1lIHRvIHNlbmQgdGhpcyBhbm5vdW5jZW1lbnQgc2luY2UgYSBsYXJnZSBwZXJjZW50YWdlIG9mIHRoZQorcXVlc3Rpb25zIHJlZ2FyZGluZyBzdXBwb3J0IGZvciB0aGUgRmxhc2hQb2ludCBoYXZlIGVpdGhlciBiZWVuIHNlbnQgdG8gbWUKK2RpcmVjdGx5IHZpYSBlbWFpbCwgb3IgaGF2ZSBhcHBlYXJlZCBpbiB0aGUgTGludXggbmV3c2dyb3VwcyBpbiB3aGljaCBJCitwYXJ0aWNpcGF0ZS4gIFRvIHN1bW1hcml6ZSwgQnVzTG9naWMgaXMgb2ZmZXJpbmcgTGludXggdXNlcnMgYW4gdXBncmFkZQorZnJvbSB0aGUgdW5zdXBwb3J0ZWQgRmxhc2hQb2ludCBMVCAoQlQtOTMwKSB0byB0aGUgc3VwcG9ydGVkIEJULTk0OCBmb3IgVVMKKyQ0NSBwbHVzIHNoaXBwaW5nIGFuZCBoYW5kbGluZywgb3IgZnJvbSB0aGUgdW5zdXBwb3J0ZWQgRmxhc2hQb2ludCBMVworKEJULTk1MCkgdG8gdGhlIHN1cHBvcnRlZCBCVC05NTggZm9yICQ2NSBwbHVzIHNoaXBwaW5nIGFuZCBoYW5kbGluZy4KK0NvbnRhY3QgQnVzTG9naWMgVGVjaG5pY2FsIFN1cHBvcnQgYXQgdGVjaHN1cEBidXNsb2dpYy5jb20gb3IgKzEgNDA4Cis2NTQtMDc2MCB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGVpciBvZmZlci4KKworCQlMZW9uYXJkIE4uIFp1YmtvZmYKKwkJbG56QGRhbmRlbGlvbi5jb20KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9MSUNFTlNFLkZsYXNoUG9pbnQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvTElDRU5TRS5GbGFzaFBvaW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZDBmZTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvTElDRU5TRS5GbGFzaFBvaW50CkBAIC0wLDAgKzEsNjAgQEAKKyAgICAgICAgICAgICAgICAgICAgIEZsYXNoUG9pbnQgRHJpdmVyIERldmVsb3BlcidzIEtpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDEuMAorCisgICAgICAgICAgICAgICAgICAgQ29weXJpZ2h0IDE5OTUtMTk5NiBieSBNeWxleCBDb3Jwb3JhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBtYXkgcmVkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiBlaXRoZXI6CisKKyAgICBhKSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbiwKKworICAgIG9yCisKKyAgICBiKSB0aGUgIkJTRC1zdHlsZSBMaWNlbnNlIiBpbmNsdWRlZCBiZWxvdy4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorV0lUSE9VVCBBTlkgV0FSUkFOVFksIHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKK29yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIG9yIHRoZSBCU0Qtc3R5bGUgTGljZW5zZSBiZWxvdyBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZword2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKzY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCitUaGUgQlNELXN0eWxlIExpY2Vuc2UgaXMgYXMgZm9sbG93czoKKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCittZXQ6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGlzIExJQ0VOU0UuRmxhc2hQb2ludAorICAgZmlsZSwgd2l0aG91dCBtb2RpZmljYXRpb24sIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZworICAgZGlzY2xhaW1lci4gIFRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IG5vdGljZSBtdXN0IGFwcGVhciBpbW1lZGlhdGVseSBhdAorICAgdGhlIGJlZ2lubmluZyBvZiBhbGwgc291cmNlIGZpbGVzOgorCisgICAgICAgIENvcHlyaWdodCAxOTk1LTE5OTYgYnkgTXlsZXggQ29ycG9yYXRpb24uICBBbGwgUmlnaHRzIFJlc2VydmVkCisKKyAgICAgICAgVGhpcyBmaWxlIGlzIGF2YWlsYWJsZSB1bmRlciBib3RoIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgICAgICBhbmQgYSBCU0Qtc3R5bGUgY29weXJpZ2h0OyBzZWUgTElDRU5TRS5GbGFzaFBvaW50IGZvciBkZXRhaWxzLgorCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworMy4gVGhlIG5hbWUgb2YgTXlsZXggQ29ycG9yYXRpb24gbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCisgICBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE1ZTEVYIENPUlAuIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKK0lNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKK09GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOCitOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCitJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKK0NBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvTXlsZXgudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL015bGV4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGY2OTI5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL015bGV4LnR4dApAQCAtMCwwICsxLDUgQEAKK1BsZWFzZSBzZWUgdGhlIGZpbGUgUkVBRE1FLkJ1c0xvZ2ljIGZvciBpbmZvcm1hdGlvbiBhYm91dCBMaW51eCBzdXBwb3J0IGZvcgorTXlsZXggKGZvcm1lcmx5IEJ1c0xvZ2ljKSBNdWx0aU1hc3RlciBhbmQgRmxhc2hQb2ludCBTQ1NJIEhvc3QgQWRhcHRlcnMuCisKK1RoZSBNeWxleCBEQUM5NjAgUENJIFJBSUQgQ29udHJvbGxlcnMgYXJlIG5vdyBzdXBwb3J0ZWQuICBQbGVhc2UgY29uc3VsdAoraHR0cDovL3d3dy5kYW5kZWxpb24uY29tL0xpbnV4LyBmb3IgZnVydGhlciBpbmZvcm1hdGlvbiBvbiB0aGUgREFDOTYwIGRyaXZlci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9OaW5qYVNDU0kudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL05pbmphU0NTSS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQxNzgwZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9OaW5qYVNDU0kudHh0CkBAIC0wLDAgKzEsMTMwIEBACisKKyAgICAgICAgIFdvcmtCaVQgTmluamFTQ1NJLTMvMzJCaSBkcml2ZXIgZm9yIExpbnV4CisKKzEuIENvbW1lbnQKKyBUaGlzIGlzIFdvcmtiaXQgY29ycC4ncyhodHRwOi8vd3d3LndvcmtiaXQuY28uanAvKSBOaW5qYVNDU0ktMworKGh0dHA6Ly93d3cud29ya2JpdC5jby5qcC90cy96X25qM3IuaHRtbCkgYW5kIE5pbmphU0NTSS0zMkJpCisoaHR0cDovL3d3dy53b3JrYml0LmNvLmpwL3RzL3pfbmpzYzMyYmkuaHRtbCkgUENNQ0lBIGNhcmQgZHJpdmVyIG1vZHVsZQorZm9yIExpbnV4LgorCisyLiBNeSBMaW51eCBlbnZpcm9ubWVudAorTGludXgga2VybmVsOiAyLjQuNyAvIDIuMi4xOQorcGNtY2lhLWNzOiAgICAzLjEuMjcKK2djYzogICAgICAgICAgZ2NjLTIuOTUuNAorUEMgY2FyZDogICAgICBJLU8gZGF0YSBQQ1NDLUYgKE5pbmphU0NTSS0zKQorICAgICAgICAgICAgICBJLU8gZGF0YSBDQlNDLUlJIGluIDE2IGJpdCBtb2RlIChOaW5qYVNDU0ktMzJCaSkKK1NDU0kgZGV2aWNlOiAgSS1PIGRhdGEgQ0RQUy1QWDI0IChDRC1ST00gZHJpdmUpCisgICAgICAgICAgICAgIE1lZGlhIEludGVsbGlnZW50IE1NTy02NDBHVCAoT3B0aWNhbCBkaXNrIGRyaXZlKQorCiszLiBJbnN0YWxsCitbMV0gQ2hlY2sgeW91ciBQQyBjYXJkIGlzIHRydWUgIk5pbmphU0NTSS0zIiBjYXJkLgorICAgIElmIHlvdSBpbnN0YWxsZWQgcGNtY2lhLWNzIGFscmVhZHksIHBjbWNpYSByZXBvcnRzIHlvdXIgY2FyZCBhcyBVTktOT1dOCisgICAgY2FyZCwgYW5kIHdyaXRlIFsiV0JUIiwgIk5pbmphU0NTSS0zIiwgIlIxLjAiXSBvciBzb21lIG90aGVyIHN0cmluZyB0bworICAgIHlvdXIgY29uc29sZSBvciBsb2cgZmlsZS4KKyAgICBZb3UgY2FuIGFsc28gdXNlICJjYXJkY3RsIiBwcm9ncmFtICh0aGlzIHByb2dyYW0gaXMgaW4gcGNtY2lhLWNzIHNvdXJjZQorICAgIGNvZGUpIHRvIGdldCBtb3JlIGluZm8uCisKKyMgY2F0IC92YXIvbG9nL21lc3NnYWVzCisuLi4KK0phbiAgMiAwMzo0NTowNiBsaW5kYmVyZyBjYXJkbWdyWzc4XTogdW5zdXBwb3J0ZWQgY2FyZCBpbiBzb2NrZXQgMQorSmFuICAyIDAzOjQ1OjA2IGxpbmRiZXJnIGNhcmRtZ3JbNzhdOiAgIHByb2R1Y3QgaW5mbzogIldCVCIsICJOaW5qYVNDU0ktMyIsICJSMS4wIgorLi4uCisjIGNhcmRjdGwgaWRlbnQKK1NvY2tldCAwOgorICBubyBwcm9kdWN0IGluZm8gYXZhaWxhYmxlCitTb2NrZXQgMToKKyAgcHJvZHVjdCBpbmZvOiAiSU8gREFUQSIsICJDQlNDMTYgICAgICAgIiwgIjEiCisKKworWzJdIEdldCBMaW51eCBrZXJuZWwgc291cmNlLCBhbmQgZXh0cmFjdCBpdCB0byAvdXNyL3NyYy4KKyAgICBCZWNhdXNlIE5pbmphU0NTSSBkcml2ZXIgcmVxdWllcnMgc29tZSBTQ1NJIGhlYWRlciBmaWxlcyBpbiBMaW51eCBrZXJuZWwKKyAgICBzb3VyY2UuCisgICAgSSByZWNvbWVuZCByZWJ1aWxkaW5nIHlvdXIga2VybmVsLiBUaGlzIGVsaW1pbmF0ZSBzb21lIHZlcnNpb25pbmcgcHJvYmxlbS4KKyQgY2QgL3Vzci9zcmMKKyQgdGFyIC16eHZmIGxpbnV4LXgueC54LnRhci5negorJCBjZCBsaW51eAorJCBtYWtlIGNvbmZpZworLi4uCisKK1szXSBJZiB5b3UgdXNlIHRoaXMgZHJpdmVyIHdpdGggS2VybmVsIDIuMiwgVW5wYWNrIHBjbWNpYS1jcyBpbiBzb21lIGRpcmVjdG9yeQorICAgIGFuZCBtYWtlICYgaW5zdGFsbC4gVGhpcyBkcml2ZXIgcmVxdWllcyBwY21jaWEtY3MgaGVhZGVyIGZpbGUuCiskIGNkIC91c3Ivc3JjCiskIHRhciB6eHZmIGNzLXBjbWNpYS1jcy0zLngueC50YXIuZ3oKKy4uLgorCitbNF0gRXh0cmFjdCB0aGlzIGRyaXZlcidzIGFyY2hpdmUgc29tZXdoZXJlLCBhbmQgZWRpdCBNYWtlZmlsZSwgdGhlbiBkbyBtYWtlLgorJCB0YXIgLXp4dmYgbnNwX2NzLXgueC50YXIuZ3oKKyQgY2QgbnNwX2NzLXgueAorJCBlbWFjcyBNYWtlZmlsZQorLi4uCiskIG1ha2UKKworWzVdIENvcHkgbnNwX2NzLm8gdG8gc3VpdGFibGUgcGxhc2UsIGxpa2UgL2xpYi9tb2R1bGVzLzxLZXJuZWwgdmVyc2lvbj4vcGNtY2lhLyAuCisKK1s2XSBBZGQgdGhlc2UgbGluZXMgdG8gL2V0Yy9wY21jaWEvY29uZmlnIC4KKyAgICBJZiB5b3UgeXNlIHBjbWNpYS1jcy0zLjEuOCBvciBsYXRlciwgd2UgY2FuIHVzZSAibnNwX2NzLmNvbmYiIGZpbGUuCisgICAgU28sIHlvdSBkb24ndCBuZWVkIHRvIGVkaXQgZmlsZS4gSnVzdCBjb3B5IHRvIC9ldGMvcGNtY2lhLyAuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RldmljZSAibnNwX2NzIgorICBjbGFzcyAic2NzaSIgbW9kdWxlICJuc3BfY3MiCisKK2NhcmQgIldvcmtCaXQgTmluamFTQ1NJLTMiCisgIHZlcnNpb24gIldCVCIsICJOaW5qYVNDU0ktMyIsICJSMS4wIgorICBiaW5kICJuc3BfY3MiCisKK2NhcmQgIldvcmtCaXQgTmluamFTQ1NJLTMyQmkgKDE2Yml0KSIKKyAgdmVyc2lvbiAiV09SS0JJVCIsICJVbHRyYU5pbmphLTE2IiwgIjEiCisgIGJpbmQgIm5zcF9jcyIKKworIyBPRU0KK2NhcmQgIldvcmtCaXQgTmluamFTQ1NJLTMyQmkgKDE2Yml0KSAvIElPLURBVEEiCisgIHZlcnNpb24gIklPIERBVEEiLCAiQ0JTQzE2ICAgICAgICIsICIxIgorICBiaW5kICJuc3BfY3MiCisKKyMgT0VNCitjYXJkICJXb3JrQml0IE5pbmphU0NTSS0zMkJpICgxNmJpdCkgLyBLTUUtMSIKKyAgdmVyc2lvbiAiS01FICAgICIsICJTQ1NJLUNBUkQtMDAxIiwgIjEiCisgIGJpbmQgIm5zcF9jcyIKK2NhcmQgIldvcmtCaXQgTmluamFTQ1NJLTMyQmkgKDE2Yml0KSAvIEtNRS0yIgorICB2ZXJzaW9uICJLTUUgICAgIiwgIlNDU0ktQ0FSRC0wMDIiLCAiMSIKKyAgYmluZCAibnNwX2NzIgorY2FyZCAiV29ya0JpdCBOaW5qYVNDU0ktMzJCaSAoMTZiaXQpIC8gS01FLTMiCisgIHZlcnNpb24gIktNRSAgICAiLCAiU0NTSS1DQVJELTAwMyIsICIxIgorICBiaW5kICJuc3BfY3MiCitjYXJkICJXb3JrQml0IE5pbmphU0NTSS0zMkJpICgxNmJpdCkgLyBLTUUtNCIKKyAgdmVyc2lvbiAiS01FICAgICIsICJTQ1NJLUNBUkQtMDA0IiwgIjEiCisgIGJpbmQgIm5zcF9jcyIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWzddIFN0YXJ0IChvciByZXN0YXJ0KSBwY21jaWEtY3MuCisjIC9ldGMvcmMuZC9yYy5wY21jaWEgc3RhcnQgICAgICAgIChCU0Qgc3R5bGUpCitvcgorIyAvZXRjL2luaXQuZC9wY21jaWEgc3RhcnQgICAgICAgICAoU1lTViBzdHlsZSkKKworCis0LiBIaXN0b3J5CitTZWUgUkVBRE1FLm5pbl9jcyAuCisKKzUuIENhdXRpb24KKyBJZiB5b3UgZWplY3QgY2FyZCB3aGVuIGRvaW5nIHNvbWUgb3BlcmF0aW9uIGZvciB5b3VyIFNDU0kgZGV2aWNlIG9yIHN1c3BlbmQKK3lvdXIgY29tcHV0ZXIsIHlvdSBlbmNvdW50IHNvbWUgKkJBRCogZXJyb3IgbGlrZSBkaXNrIGNyYXNoLgorIEl0IHdvcmtzIGdvb2Qgd2hlbiBJIHVzaW5nIHRoaXMgZHJpdmVyIHJpZ2h0IHdheS4gQnV0IEknbSBub3QgZ3VhcmFudGVlCit5b3VyIGRhdGEuIFBsZWFzZSBiYWNrdXAgeW91ciBkYXRhIHdoZW4geW91IHVzZSB0aGlzIGRyaXZlci4KKworNi4gS25vd24gQnVncworIEluIDIuNCBrZXJuZWwsIHlvdSBjYW4ndCB1c2UgNjQwTUIgT3B0aWNhbCBkaXNrLiBUaGlzIGVycm9yIGNvbWVzIGZyb20KK2hpZ2ggbGV2ZWwgU0NTSSBkcml2ZXIuCisKKzcuIFRlc3RpbmcKKyBQbGVhc2Ugc2VuZCBtZSBzb21lIHJlcG9ydHMoYnVnIHJlcG9ydHMgZXRjLi4pIG9mIHRoaXMgc29mdHdhcmUuCitXaGVuIHlvdSBzZW5kIHJlcG9ydCwgcGxlYXNlIHRlbGwgbWUgdGhlc2Ugb3IgbW9yZS4KKwljYXJkIG5hbWUKKwlrZXJuZWwgdmVyc2lvbgorCXlvdXIgU0NTSSBkZXZpY2UgbmFtZShoYXJkIGRyaXZlLCBDRC1ST00sIGV0Yy4uLikKKworOC4gQ29weXJpZ2h0CisgU2VlIEdQTC4KKworCisyMDAxLzA4LzA4IHlva290YUBuZXRsYWIuaXMudHN1a3ViYS5hYy5qcCA8WU9LT1RBIEhpcm9zaGk+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvYWhhMTUyeC50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvYWhhMTUyeC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNlMDIyYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9haGExNTJ4LnR4dApAQCAtMCwwICsxLDE4MyBAQAorJElkOiBSRUFETUUuYWhhMTUyeCx2IDEuMiAxOTk5LzEyLzI1IDE1OjMyOjMwIGZpc2NoZXIgRXhwIGZpc2NoZXIgJAorQWRhcHRlYyBBSEEtMTUyMC8xNTIyIFNDU0kgZHJpdmVyIGZvciBMaW51eCAoYWhhMTUyeCkKKworQ29weXJpZ2h0IDE5OTMtMTk5OSBK/HJnZW4gRmlzY2hlciA8ZmlzY2hlckBub3JiaXQuZGU+CitUQzE1NTAgcGF0Y2hlcyBieSBMdXVrIHZhbiBEaWprIChsZHpAeHM0YWxsLm5sKQorCisKK0luIFJldmlzaW9uIDIgdGhlIGRyaXZlciB3YXMgbW9kaWZpZWQgYSBsb3QgKGVzcGVjaWFsbHkgdGhlCitib3R0b20taGFsZiBoYW5kbGVyIGNvbXBsZXRlKCkpLgorCitUaGUgZHJpdmVyIGlzIG11Y2ggY2xlYW5lciBub3csIGhhcyBzdXBwb3J0IGZvciB0aGUgbmV3CitlcnJvciBoYW5kbGluZyBjb2RlIGluIDIuMywgcHJvZHVjZWQgbGVzcyBjcHUgbG9hZCAobXVjaAorbGVzcyBwb2xsaW5nIGxvb3BzKSwgaGFzIHNsaWdodGx5IGhpZ2hlciB0aHJvdWdocHV0IChhdAorbGVhc3Qgb24gbXkgYW5jaWVudCB0ZXN0IGJveDsgYSBpNDg2LzMzTWh6LzIwTUIpLgorCisKK0NPTkZJR1VSQVRJT04gQVJHVU1FTlRTOgorCitJT1BPUlQgICAgICAgIGJhc2UgaW8gYWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDM0MC8weDE0MCkKK0lSUSAgICAgICAgICAgaW50ZXJydXB0IGxldmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgKDktMTI7IGRlZmF1bHQgMTEpCitTQ1NJX0lEICAgICAgIHNjc2kgaWQgb2YgY29udHJvbGxlciAgICAgICAgICAgICAgICAgICAgICgwLTc7IGRlZmF1bHQgNykKK1JFQ09OTkVDVCAgICAgYWxsb3cgdGFyZ2V0cyB0byBkaXNjb25uZWN0IGZyb20gdGhlIGJ1cyAgKDAvMTsgZGVmYXVsdCAxIFtvbl0pCitQQVJJVFkgICAgICAgIGVuYWJsZSBwYXJpdHkgY2hlY2tpbmcgICAgICAgICAgICAgICAgICAgICgwLzE7IGRlZmF1bHQgMSBbb25dKQorU1lOQ0hST05PVVMgICBlbmFibGUgc3luY2hyb25vdXMgdHJhbnNmZXJzICAgICAgICAgICAgICAoMC8xOyBkZWZhdWx0IDEgW29uXSkKK0RFTEFZOiAgICAgICAgYnVzIHJlc2V0IGRlbGF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQgMTAwKQorRVhUX1RSQU5TOiAgICBlbmFibGUgZXh0ZW5kZWQgdHJhbnNsYXRpb24gICAgICAgICAgICAgICAoMC8xOiBkZWZhdWx0IDAgW29mZl0pCisgICAgICAgICAgICAgIChzZWUgTk9URVMpCisKK0NPTVBJTEUgVElNRSBDT05GSUdVUkFUSU9OIChnbyBpbnRvIEFIQTE1MlggaW4gZHJpdmVycy9zY3NpL01ha2VmaWxlKToKKworLURBVVRPQ09ORgorIHVzZSBjb25maWd1cmF0aW9uIHRoZSBjb250cm9sbGVyIHJlcG9ydHMgKEFIQS0xNTJ4IG9ubHkpCisKKy1EU0tJUF9CSU9TVEVTVAorIERvbid0IHRlc3QgZm9yIEJJT1Mgc2lnbmF0dXJlIChBSEEtMTUxMCBvciBkaXNhYmxlZCBCSU9TKQorCistRFNFVFVQMD0ieyBJT1BPUlQsIElSUSwgU0NTSV9JRCwgUkVDT05ORUNULCBQQVJJVFksIFNZTkNIUk9OT1VTLCBERUxBWSwgRVhUX1RSQU5TIH0iCisgb3ZlcnJpZGUgZm9yIHRoZSBmaXJzdCBjb250cm9sbGVyIAorCistRFNFVFVQMT0ieyBJT1BPUlQsIElSUSwgU0NTSV9JRCwgUkVDT05ORUNULCBQQVJJVFksIFNZTkNIUk9OT1VTLCBERUxBWSwgRVhUX1RSQU5TIH0iCisgb3ZlcnJpZGUgZm9yIHRoZSBzZWNvbmQgY29udHJvbGxlcgorCistREFIQTE1MlhfREVCVUcKKyBlbmFibGUgZGVidWdnaW5nIG91dHB1dAorCistREFIQTE1MlhfU1RBVAorIGVuYWJsZSBzb21lIHN0YXRpc3RpY3MKKworCitMSUxPIENPTU1BTkQgTElORSBPUFRJT05TOgorCithaGExNTJ4PTxJT1BPUlQ+Wyw8SVJRPlssPFNDU0ktSUQ+Wyw8UkVDT05ORUNUPlssPFBBUklUWT5bLDxTWU5DSFJPTk9VUz5bLDxERUxBWT4gWyw8RVhUX1RSQU5TXV1dXV1dXQorCisgVGhlIG5vcm1hbCBjb25maWd1cmF0aW9uIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHNwZWNpZnlpbmcgYSBjb21tYW5kIGxpbmUuCisgV2hlbiB5b3UgZG8gdGhpcywgdGhlIEJJT1MgdGVzdCBpcyBza2lwcGVkLiBFbnRlcmVkIHZhbHVlcyBoYXZlIHRvIGJlCisgdmFsaWQgKGtub3duKS4gIERvbid0IHVzZSB2YWx1ZXMgdGhhdCBhcmVuJ3Qgc3VwcG9ydGVkIHVuZGVyIG5vcm1hbAorIG9wZXJhdGlvbi4gIElmIHlvdSB0aGluayB0aGF0IHlvdSBuZWVkIG90aGVyIHZhbHVlczogY29udGFjdCBtZS4KKyBGb3IgdHdvIGNvbnRyb2xsZXJzIHVzZSB0aGUgYWhhMTUyeCBzdGF0ZW1lbnQgdHdpY2UuCisKKworU1lNQk9MUyBGT1IgTU9EVUxFIENPTkZJR1VSQVRJT046CisKK0Nob29zZSBmcm9tIDIgYWx0ZXJuYXRpdmVzOgorCisxLiBzcGVjaWZ5IGV2ZXJ5dGhpbmcgKG9sZCkKKworYWhhMTUyeD1JT1BPUlQsSVJRLFNDU0lfSUQsUkVDT05ORUNULFBBUklUWSxTWU5DSFJPTk9VUyxERUxBWSxFWFRfVFJBTlMKKyAgY29uZmlndXJhdGlvbiBvdmVycmlkZSBmb3IgZmlyc3QgY29udHJvbGxlcgorCisKK2FoYTE1MngxPUlPUE9SVCxJUlEsU0NTSV9JRCxSRUNPTk5FQ1QsUEFSSVRZLFNZTkNIUk9OT1VTLERFTEFZLEVYVF9UUkFOUworICBjb25maWd1cmF0aW9uIG92ZXJyaWRlIGZvciBzZWNvbmQgY29udHJvbGxlcgorCisyLiBzcGVjaWZ5IG9ubHkgd2hhdCB5b3UgbmVlZCB0byAoaXJxIG9yIGlvIGlzIHJlcXVpcmVkOyBuZXcpCisKK2lvPUlPUE9SVDBbLElPUE9SVDFdCisgIElPUE9SVCBmb3IgZmlyc3QgYW5kIHNlY29uZCBjb250cm9sbGVyCisKK2lycT1JUlEwWyxJUlExXQorICBJUlEgZm9yIGZpcnN0IGFuZCBzZWNvbmQgY29udHJvbGxlcgorCitzY3NpaWQ9U0NTSUlEMFssU0NTSUlEMV0KKyAgU0NTSUlEIGZvciBmaXJzdCBhbmQgc2Vjb25kIGNvbnRyb2xsZXIKKworcmVjb25uZWN0PVJFQ09OTkVDVDBbLFJFQ09OTkVDVDFdCisgIGFsbG93IHRhcmdldHMgdG8gZGlzY29ubmVjdCBmb3IgZmlyc3QgYW5kIHNlY29uZCBjb250cm9sbGVyCisKK3Bhcml0eT1QQVIwW1BBUjFdCisgIHVzZSBwYXJpdHkgZm9yIGZpcnN0IGFuZCBzZWNvbmQgY29udHJvbGxlcgorCitzeW5jPVNZTkNIUk9OT1VTMFssU1lOQ0hST05PVVMxXQorICBlbmFibGUgc3luY2hyb25vdXMgdHJhbnNmZXJzIGZvciBmaXJzdCBhbmQgc2Vjb25kIGNvbnRyb2xsZXIKKworZGVsYXk9REVMQVkwWyxERUxBWTFdCisgIHJlc2V0IERFTEFZIGZvciBmaXJzdCBhbmQgc2Vjb25kIGNvbnRyb2xsZXIKKworZXh0dHJhbnM9RVhUVFJBTlMwWyxFWFRUUkFOUzFdCisgIGVuYWJsZSBleHRlbmRlZCB0cmFuc2xhdGlvbiBmb3IgZmlyc3QgYW5kIHNlY29uZCBjb250cm9sbGVyCisKKworSWYgeW91IHVzZSBib3RoIGFsdGVybmF0aXZlcyB0aGUgZmlyc3Qgd2lsbCBiZSB0YWtlbi4KKworCitOT1RFUyBPTiBFWFRfVFJBTlM6IAorCitTQ1NJIHVzZXMgYmxvY2sgbnVtYmVycyB0byBhZGRyZXNzIGJsb2Nrcy9zZWN0b3JzIG9uIGEgZGV2aWNlLgorVGhlIEJJT1MgdXNlcyBhIGN5bGluZGVyL2hlYWQvc2VjdG9yIGFkZHJlc3Npbmcgc2NoZW1lIChDL0gvUykKK3NjaGVtZSBpbnN0ZWFkLiAgRE9TIGV4cGVjdHMgYSBCSU9TIG9yIGRyaXZlciB0aGF0IHVuZGVyc3RhbmRzIHRoaXMKK0MvSC9TIGFkZHJlc3NpbmcuCisKK1RoZSBudW1iZXIgb2YgY3lsaW5kZXJzL2hlYWRzL3NlY3RvcnMgaXMgY2FsbGVkIGdlb21ldHJ5IGFuZCBpcyByZXF1aXJlZAorYXMgYmFzZSBmb3IgcmVxdWVzdHMgaW4gQy9IL1MgYWRkcmVzc2luZy4gIFNDU0kgb25seSBrbm93cyBhYm91dCB0aGUKK3RvdGFsIGNhcGFjaXR5IG9mIGRpc2tzIGluIGJsb2NrcyAoc2VjdG9ycykuCisKK1RoZXJlZm9yZSB0aGUgU0NTSSBCSU9TL0RPUyBkcml2ZXIgaGFzIHRvIGNhbGN1bGF0ZSBhIGxvZ2ljYWwvdmlydHVhbAorZ2VvbWV0cnkganVzdCB0byBiZSBhYmxlIHRvIHN1cHBvcnQgdGhhdCBhZGRyZXNzaW5nIHNjaGVtZS4gIFRoZSBnZW9tZXRyeQorcmV0dXJuZWQgYnkgdGhlIFNDU0kgQklPUyBpcyBhIHB1cmUgY2FsY3VsYXRpb24gYW5kIGhhcyBub3RoaW5nIHRvCitkbyB3aXRoIHRoZSByZWFsL3BoeXNpY2FsIGdlb21ldHJ5IG9mIHRoZSBkaXNrICh3aGljaCBpcyB1c3VhbGx5CitpcnJlbGV2YW50IGFueXdheSkuCisKK0Jhc2ljYWxseSB0aGlzIGhhcyBubyBpbXBhY3QgYXQgYWxsIG9uIExpbnV4LCBiZWNhdXNlIGl0IGFsc28gdXNlcyBibG9jaworaW5zdGVhZCBvZiBDL0gvUyBhZGRyZXNzaW5nLiAgVW5mb3J0dW5hdGVseSBDL0gvUyBhZGRyZXNzaW5nIGlzIGFsc28gdXNlZAoraW4gdGhlIHBhcnRpdGlvbiB0YWJsZSBhbmQgdGhlcmVmb3JlIGV2ZXJ5IG9wZXJhdGluZyBzeXN0ZW0gaGFzIHRvIGtub3cKK3RoZSByaWdodCBnZW9tZXRyeSB0byBiZSBhYmxlIHRvIGludGVycHJldCBpdC4KKworTW9yZW92ZXIgdGhlcmUgYXJlIGNlcnRhaW4gbGltaXRhdGlvbnMgdG8gdGhlIEMvSC9TIGFkZHJlc3Npbmcgc2NoZW1lLAorbmFtZWx5IHRoZSBhZGRyZXNzIHNwYWNlIGlzIGxpbWl0ZWQgdG8gdXB0byAyNTUgaGVhZHMsIHVwdG8gNjMgc2VjdG9ycworYW5kIGEgbWF4aW11bSBvZiAxMDIzIGN5bGluZGVycy4KKworVGhlIEFIQS0xNTIyIEJJT1MgY2FsY3VsYXRlcyB0aGUgZ2VvbWV0cnkgYnkgZml4aW5nIHRoZSBudW1iZXIgb2YgaGVhZHMKK3RvIDY0LCB0aGUgbnVtYmVyIG9mIHNlY3RvcnMgdG8gMzIgYW5kIGJ5IGNhbGN1bGF0aW5nIHRoZSBudW1iZXIgb2YKK2N5bGluZGVycyBieSBkaXZpZGluZyB0aGUgY2FwYWNpdHkgcmVwb3J0ZWQgYnkgdGhlIGRpc2sgYnkgNjQqMzIgKDEgTUIpLgorVGhpcyBpcyBjb25zaWRlcmVkIHRvIGJlIHRoZSBkZWZhdWx0IHRyYW5zbGF0aW9uLgorCitXaXRoIHJlc3BlY3QgdG8gdGhlIGxpbWl0IG9mIDEwMjMgY3lsaW5kZXJzIHVzaW5nIEMvSC9TIHlvdSBjYW4gb25seQorYWRkcmVzcyB0aGUgZmlyc3QgR0Igb2YgeW91ciBkaXNrIGluIHRoZSBwYXJ0aXRpb24gdGFibGUuICBUaGVyZWZvcmUKK0JJT1NlcyBvZiBzb21lIG5ld2VyIGNvbnRyb2xsZXJzIGJhc2VkIG9uIHRoZSBBSUMtNjI2MC82MzYwIHN1cHBvcnQKK2V4dGVuZGVkIHRyYW5zbGF0aW9uLiAgVGhpcyBtZWFucyB0aGF0IHRoZSBCSU9TIHVzZXMgMjU1IGZvciBoZWFkcywKKzYzIGZvciBzZWN0b3JzIGFuZCB0aGVuIGRpdmlkZXMgdGhlIGNhcGFjaXR5IG9mIHRoZSBkaXNrIGJ5IDI1NSo2MworKGFib3V0IDggTUIpLCBhcyBzb29uIGl0IHNlZXMgYSBkaXNrIGdyZWF0ZXIgdGhhbiAxIEdCLiAgVGhhdCByZXN1bHRzCitpbiBhIG1heGltdW0gb2YgYWJvdXQgOCBHQiBhZGRyZXNzYWJsZSBkaXNrc3BhY2UgaW4gdGhlIHBhcnRpdGlvbiB0YWJsZQorKGJ1dCB0aGVyZSBhcmUgYWxyZWFkeSBiaWdnZXIgZGlza3Mgb3V0IHRoZXJlIHRvZGF5KS4KKworVG8gbWFrZSBpdCBldmVuIG1vcmUgY29tcGxpY2F0ZWQgdGhlIHRyYW5zbGF0aW9uIG1vZGUgbWlnaHQvbWlnaHQKK25vdCBiZSBjb25maWd1cmFibGUgaW4gY2VydGFpbiBCSU9TIHNldHVwcy4KKworVGhpcyBkcml2ZXIgZG9lcyBzb21lIG1vcmUgb3IgbGVzcyBmYWlsc2FmZSBndWVzc2luZyB0byBnZXQgdGhlCitnZW9tZXRyeSByaWdodCBpbiBtb3N0IGNhc2VzOgorCistIGZvciBkaXNrczwxR0I6IHVzZSBkZWZhdWx0IHRyYW5zbGF0aW9uIChDLzMyLzY0KQorCistIGZvciBkaXNrcz4xR0I6CisgIC0gdGFrZSBjdXJyZW50IGdlb21ldHJ5IGZyb20gdGhlIHBhcnRpdGlvbiB0YWJsZQorICAgICh1c2luZyBzY3NpY2FtX2Jpb3NfcGFyYW0gYW5kIGFjY2VwdCBvbmx5IGB2YWxpZCcgZ2VvbWV0cmllcywKKyAgICBpZS4gZWl0aGVyIChDLzMyLzY0KSBvciAoQy82My8yNTUpKS4gIFRoaXMgY2FuIGJlIGV4dGVuZGVkIHRyYW5zbGF0aW9uCisgICAgZXZlbiBpZiBpdCdzIG5vdCBlbmFibGVkIGluIHRoZSBkcml2ZXIuCisKKyAgLSBpZiB0aGF0IGZhaWxzLCB0YWtlIGV4dGVuZGVkIHRyYW5zbGF0aW9uIGlmIGVuYWJsZWQgYnkgb3ZlcnJpZGUsCisgICAga2VybmVsIG9yIG1vZHVsZSBwYXJhbWV0ZXIsIG90aGVyd2lzZSB0YWtlIGRlZmF1bHQgdHJhbnNsYXRpb24gYW5kCisgICAgYXNrIHRoZSB1c2VyIGZvciB2ZXJpZmljYXRpb24uICBUaGlzIG1pZ2h0IG9uIG5vdCB5ZXQgcGFydGl0aW9uZWQKKyAgICBkaXNrcy4KKworCitSRUZFUkVOQ0VTIFVTRUQ6CisKKyAiQUlDLTYyNjAgU0NTSSBDaGlwIFNwZWNpZmljYXRpb24iLCBBZGFwdGVjIENvcnBvcmF0aW9uLgorCisgIlNDU0kgQ09NUFVURVIgU1lTVEVNIElOVEVSRkFDRSAtIDIgKFNDU0ktMikiLCBYM1Q5LjIvODYtMTA5IHJldi4gMTBoCisKKyAiV3JpdGluZyBhIFNDU0kgZGV2aWNlIGRyaXZlciBmb3IgTGludXgiLCBSaWsgRmFpdGggKGZhaXRoQGNzLnVuYy5lZHUpCisKKyAiS2VybmVsIEhhY2tlcidzIEd1aWRlIiwgTWljaGFlbCBLLiBKb2huc29uIChqb2huc29ubUBzdW5zaXRlLnVuYy5lZHUpCisKKyAiQWRhcHRlYyAxNTIwLzE1MjIgVXNlcidzIEd1aWRlIiwgQWRhcHRlYyBDb3Jwb3JhdGlvbi4KKworIE1pY2hhZWwgSy4gSm9obnNvbiAoam9obnNvbm1Ac3Vuc2l0ZS51bmMuZWR1KQorCisgRHJldyBFY2toYXJkdCAoZHJld0Bjcy5jb2xvcmFkby5lZHUpCisKKyBFcmljIFlvdW5nZGFsZSAoZXJpY0BhbmRhbnRlLm9yZykgCisKKyBzcGVjaWFsIHRoYW5rcyB0byBFcmljIFlvdW5nZGFsZSBmb3IgdGhlIGZyZWUoISkgc3VwcGx5aW5nIHRoZQorIGRvY3VtZW50YXRpb24gb24gdGhlIGNoaXAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvYWljNzl4eC50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvYWljNzl4eC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFlZWY3NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9haWM3OXh4LnR4dApAQCAtMCwwICsxLDUxNiBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKz0gICAgICAgICAgICAgQWRhcHRlYyBVbHRyYTMyMCBGYW1pbHkgTWFuYWdlciBTZXQgdjEuMy4xMSAgICAgICAgICA9Cis9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPQorPSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFETUUgZm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgID0KKz0gICAgICAgICAgICAgICAgICAgIFRoZSBMaW51eCBPcGVyYXRpbmcgU3lzdGVtICAgICAgICAgICAgICAgICAgICA9Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBpbiB0aGlzIGZpbGU6CisKKyAgMS4gU3VwcG9ydGVkIEhhcmR3YXJlCisgIDIuIFZlcnNpb24gSGlzdG9yeQorICAzLiBDb21tYW5kIExpbmUgT3B0aW9ucworICA0LiBBZGRpdGlvbmFsIE5vdGVzCisgIDUuIENvbnRhY3RpbmcgQWRhcHRlYworCisKKzEuIFN1cHBvcnRlZCBIYXJkd2FyZQorCisgICBUaGUgZm9sbG93aW5nIEFkYXB0ZWMgU0NTSSBIb3N0IEFkYXB0ZXJzIGFyZSBzdXBwb3J0ZWQgYnkgdGhpcyAKKyAgIGRyaXZlciBzZXQuIAorCisgICBVbHRyYTMyMCBBU0lDICAgICAgICAgICAgICBEZXNjcmlwdGlvbgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQUlDLTc5MDFBICAgICAgICAgICAgICAgICAgU2luZ2xlIENoYW5uZWwgNjQtYml0IFBDSS1YIDEzM01IeiB0byAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVsdHJhMzIwIFNDU0kgQVNJQworICAgQUlDLTc5MDFCICAgICAgICAgICAgICAgICAgU2luZ2xlIENoYW5uZWwgNjQtYml0IFBDSS1YIDEzM01IeiB0byAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVsdHJhMzIwIFNDU0kgQVNJQyB3aXRoIFJldGFpbmVkIFRyYWluaW5nCisgICBBSUMtNzkwMkE0ICAgICAgICAgICAgICAgICBEdWFsIENoYW5uZWwgNjQtYml0IFBDSS1YIDEzM01IeiB0byAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVsdHJhMzIwIFNDU0kgQVNJQworICAgQUlDLTc5MDJCICAgICAgICAgICAgICAgICAgRHVhbCBDaGFubmVsIDY0LWJpdCBQQ0ktWCAxMzNNSHogdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVsdHJhMzIwIFNDU0kgQVNJQyB3aXRoIFJldGFpbmVkIFRyYWluaW5nCisKKyAgIFVsdHJhMzIwIEFkYXB0ZXJzICAgICAgICAgIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNJQworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIEFkYXB0ZWMgU0NTSSBDYXJkIDM5MzIwICAgIER1YWwgQ2hhbm5lbCA2NC1iaXQgUENJLVggMTMzTUh6IHRvICAgNzkwMkE0Lzc5MDJCCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbHRyYTMyMCBTQ1NJIENhcmQgKG9uZSBleHRlcm5hbCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY4LXBpbiwgdHdvIGludGVybmFsIDY4LXBpbikKKyAgIEFkYXB0ZWMgU0NTSSBDYXJkIDM5MzIwQSAgIER1YWwgQ2hhbm5lbCA2NC1iaXQgUENJLVggMTMzTUh6IHRvICAgICAgNzkwMkIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVsdHJhMzIwIFNDU0kgQ2FyZCAob25lIGV4dGVybmFsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjgtcGluLCB0d28gaW50ZXJuYWwgNjgtcGluKQorICAgQWRhcHRlYyBTQ1NJIENhcmQgMzkzMjBEICAgRHVhbCBDaGFubmVsIDY0LWJpdCBQQ0ktWCAxMzNNSHogdG8gICAgICA3OTAyQTQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVsdHJhMzIwIFNDU0kgQ2FyZCAodHdvIGV4dGVybmFsIFZIREMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBvbmUgaW50ZXJuYWwgNjgtcGluKQorICAgQWRhcHRlYyBTQ1NJIENhcmQgMzkzMjBEICAgRHVhbCBDaGFubmVsIDY0LWJpdCBQQ0ktWCAxMzNNSHogdG8gICAgICA3OTAyQTQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVsdHJhMzIwIFNDU0kgQ2FyZCAodHdvIGV4dGVybmFsIFZIREMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBvbmUgaW50ZXJuYWwgNjgtcGluKSBiYXNlZCBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFJQy03OTAyQiBBU0lDCisgICBBZGFwdGVjIFNDU0kgQ2FyZCAyOTMyMCAgICBTaW5nbGUgQ2hhbm5lbCA2NC1iaXQgUENJLVggMTMzTUh6IHRvICAgIDc5MDFBCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbHRyYTMyMCBTQ1NJIENhcmQgKG9uZSBleHRlcm5hbCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY4LXBpbiwgdHdvIGludGVybmFsIDY4LXBpbiwgb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbCA1MC1waW4pCisgICBBZGFwdGVjIFNDU0kgQ2FyZCAyOTMyMEEgICBTaW5nbGUgQ2hhbm5lbCA2NC1iaXQgUENJLVggMTMzTUh6IHRvICAgIDc5MDFCCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbHRyYTMyMCBTQ1NJIENhcmQgKG9uZSBleHRlcm5hbCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY4LXBpbiwgdHdvIGludGVybmFsIDY4LXBpbiwgb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbCA1MC1waW4pCisgICBBZGFwdGVjIFNDU0kgQ2FyZCAyOTMyMExQICBTaW5nbGUgQ2hhbm5lbCA2NC1iaXQgTG93IFByb2ZpbGUgICAgICAgIDc5MDFBCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0ktWCAxMzNNSHogdG8gVWx0cmEzMjAgU0NTSSBDYXJkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoT25lIGV4dGVybmFsIFZIREMsIG9uZSBpbnRlcm5hbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjgtcGluKQorICAgQWRhcHRlYyBTQ1NJIENhcmQgMjkzMjBBTFAgU2luZ2xlIENoYW5uZWwgNjQtYml0IExvdyBQcm9maWxlICAgICAgICA3OTAxQgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJLVggMTMzTUh6IHRvIFVsdHJhMzIwIFNDU0kgQ2FyZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE9uZSBleHRlcm5hbCBWSERDLCBvbmUgaW50ZXJuYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY4LXBpbikKKzIuIFZlcnNpb24gSGlzdG9yeQorCisgICAxLjMuMTEgKEp1bHkgMTEsIDIwMDMpCisgICAgICAgIC0gRml4IHNldmVyYWwgZGVhZGxvY2sgaXNzdWVzLgorICAgICAgICAtIEFkZCAyOTMyMEFMUCBhbmQgMzkzMjBCIElkJ3MuCisKKyAgIDEuMy4xMCAoSnVuZSAzcmQsIDIwMDMpCisgICAgICAgIC0gQWxpZ24gdGhlIFNDQl9UQUcgZmllbGQgb24gYSAxNmJ5dGUgYm91bmRhcnkuICBUaGlzIGF2b2lkcworICAgICAgICAgIFNDQiBjb3JydXB0aW9uIG9uIHNvbWUgUENJLTMzIGJ1c3Nlcy4KKyAgICAgICAgLSBDb3JyZWN0IG5vbi16ZXJvIGx1bnMgb24gUmV2IEIuIGhhcmR3YXJlLgorICAgICAgICAtIFVwZGF0ZSBmb3IgY2hhbmdlIGluIDIuNS5YIFNDU0kgcHJvYyBGUyBpbnRlcmZhY2UuCisgICAgICAgIC0gV2hlbiBuZWdvdGlhdGlvbiBhc3luYyB2aWEgYW4gOGJpdCBXRFRSIG1lc3NhZ2UsIHNlbmQKKyAgICAgICAgICBhbiBTRFRSIHdpdGggYW4gb2Zmc2V0IG9mIDAgdG8gYmUgc3VyZSB0aGUgdGFyZ2V0CisgICAgICAgICAga25vd3Mgd2UgYXJlIGFzeW5jLiAgVGhpcyB3b3JrcyBhcm91bmQgYSBmaXJtd2FyZSBkZWZlY3QKKyAgICAgICAgICBpbiB0aGUgUXVhbnR1bSBBdGxhcyAxMEsuCisgICAgICAgIC0gSW1wbGVtZW50IGNvbnRyb2xsZXIgc3VzdXBlbmQgYW5kIHJlc3VtZS4KKyAgICAgICAgLSBDbGVhciBQQ0kgZXJyb3Igc3RhdGUgZHVyaW5nIGRyaXZlciBhdHRhY2ggc28gdGhhdCB3ZQorICAgICAgICAgIGRvbid0IGRpc2FibGUgbWVtb3J5IG1hcHBlZCBJL08gZHVlIHRvIGEgc3RyYXkgd3JpdGUKKyAgICAgICAgICBieSBzb21lIG90aGVyIGRyaXZlciBwcm9iZSB0aGF0IG9jY3VycmVkIGJlZm9yZSB3ZQorICAgICAgICAgIGNsYWltZWQgdGhlIGNvbnRyb2xsZXIuCisKKyAgIDEuMy45IChNYXkgMjJuZCwgMjAwMykKKyAgICAgICAgLSBGaXggY29tcGlsZXIgZXJyb3JzLgorICAgICAgICAtIFJlbW92ZSBTL0cgc3BsaXR0aW5nIGZvciBzZWdtZW50cyB0aGF0IGNyb3NzIGEgNEdCIGJvdW5kYXJ5LgorICAgICAgICAgIFRoaXMgaXMgZ3VhcmFudGVlZCBub3QgdG8gaGFwcGVuIGluIExpbnV4LgorICAgICAgICAtIEFkZCBzdXBwb3J0IGZvciBzY3NpX3JlcG9ydF9kZXZpY2VfcmVzZXQoKSBmb3VuZCBpbgorICAgICAgICAgIDIuNS5YIGtlcm5lbHMuCisgICAgICAgIC0gQWRkIDc5MDFCIHN1cHBvcnQuCisgICAgICAgIC0gU2ltcGxpZnkgaGFuZGxpbmcgb2YgdGhlIHBhY2t0aXplZCBsdW4gUmV2IEEgd29ya2Fyb3VuZC4KKyAgICAgICAgLSBDb3JyZWN0IGFuZCBzaW1wbGlmeSBoYW5kbGluZyBvZiB0aGUgaWdub3JlIHdpZGUgcmVzaWR1ZQorICAgICAgICAgIG1lc3NhZ2UuICBUaGUgcHJldmlvdXMgY29kZSB3b3VsZCBmYWlsIHRvIHJlcG9ydCBhIHJlc2lkdWFsCisgICAgICAgICAgaWYgdGhlIHRyYW5zYWN0aW9uIGRhdGEgbGVuZ3RoIHdhcyBldmVuIGFuZCB3ZSByZWNlaXZlZAorICAgICAgICAgIGFuIElXUiBtZXNzYWdlLgorCisgICAxLjMuOCAoQXByaWwgMjl0aCwgMjAwMykKKyAgICAgICAgLSBGaXggdHlwZXMgYWNjZXNzZWQgdmlhIHRoZSBjb21tYW5kIGxpbmUgaW50ZXJmYWNlIGNvZGUuCisgICAgICAgIC0gUGVyZm9ybSBhIGZldyBmaXJtd2FyZSBvcHRpbWl6YXRpb25zLgorICAgICAgICAtIEZpeCAiVW5leHBlY3RlZCBQS1QgYnVzZnJlZSIgZXJyb3JzLgorICAgICAgICAtIFVzZSBhIHNlcXVlbmNlciBpbnRlcnJ1cHQgdG8gbm90aWZ5IHRoZSBob3N0IG9mCisgICAgICAgICAgY29tbWFuZHMgd2l0aCBiYWQgc3RhdHVzLiAgV2UgZGVmZXIgdGhlIG5vdGlmaWNhdGlvbgorICAgICAgICAgIHVudGlsIHRoZXJlIGFyZSBubyBvdXRzdGFuZGluZyBzZWxlY3Rpb25zIHRvIGVuc3VyZQorICAgICAgICAgIHRoYXQgdGhlIGhvc3QgaXMgaW50ZXJydXB0ZWQgZm9yIGFzIHNob3J0IGEgdGltZSBhcworICAgICAgICAgIHBvc3NpYmxlLgorICAgICAgICAtIFJlbW92ZSBwcmUtMi4yLlggc3VwcG9ydC4KKyAgICAgICAgLSBBZGQgc3VwcG9ydCBmb3IgbmV3IDIuNS5YIGludGVycnVwdCBBUEkuCisgICAgICAgIC0gQ29ycmVjdCBiaWctZW5kaWFuIGFyY2hpdGVjdHVyZSBzdXBwb3J0LgorCisgICAxLjMuNyAoQXByaWwgMTZ0aCwgMjAwMykKKyAgICAgICAgLSBVc2UgZGVsX3RpbWVyX3N5bmMoKSB0byBlbnN1cmUgdGhhdCBubyB0aW1lb3V0cworICAgICAgICAgIGFyZSBwZW5kaW5nIGR1cmluZyBjb250cm9sbGVyIHNodXRkb3duLgorICAgICAgICAtIEZvciBwcmUtMi41Llgga2VybmVscywgY2FyZWZ1bGx5IGFkanVzdCBvdXIgc2VnbWVudAorICAgICAgICAgIGxpc3Qgc2l6ZSB0byBhdm9pZCBTQ1NJIG1hbGxvYyBwb29sIGZyYWdtZW50YXRpb24uCisgICAgICAgIC0gQ2xlYW51cCBjaGFubmVsIGRpc3BsYXkgaW4gb3VyIC9wcm9jIG91dHB1dC4KKyAgICAgICAgLSBXb3JrYXJvdW5kIGR1cGxpY2F0ZSBkZXZpY2UgZW50cmllcyBpbiB0aGUgbWlkLWxheWVyCisgICAgICAgICAgZGV2bGljZSBsaXN0IGR1cmluZyBhZGQtc2luZ2xlLWRldmljZS4KKworICAgMS4zLjYgKE1hcmNoIDI4dGgsIDIwMDMpCisgICAgICAgIC0gQ29ycmVjdCBhIGRvdWJsZSBmcmVlIGluIHRoZSBEb21haW4gVmFsaWRhdGlvbiBjb2RlLgorICAgICAgICAtIENvcnJlY3QgYSByZWZlcmVuY2UgdG8gZnJlZSdlZCBtZW1vcnkgZHVyaW5nIGNvbnRyb2xsZXIKKyAgICAgICAgICBzaHV0ZG93bi4KKyAgICAgICAgLSBSZXNldCB0aGUgYnVzIG9uIGFuIFNFLT5MVkQgY2hhbmdlLiAgVGhpcyBpcyByZXF1aXJlZAorICAgICAgICAgIHRvIHJlc2V0IG91ciB0cmFuc2NpZXZlcnMuCisKKyAgIDEuMy41IChNYXJjaCAyNHRoLCAyMDAzKQorICAgICAgICAtIEZpeCBhIGZldyByZWdpc3RlciB3aW5kb3cgbW9kZSBidWdzLgorICAgICAgICAtIEluY2x1ZGUgcmVhZCBzdHJlYW1pbmcgaW4gdGhlIFBQUiBmbGFncyB3ZSBkaXNwbGF5IGluCisgICAgICAgICAgZGlhZ25vc3RpY3MgYXMgd2VsbCBhcyAvcHJvYy4KKyAgICAgICAgLSBBZGQgUENJIGhvdCBwbHVnIHN1cHBvcnQgZm9yIDIuNS5YIGtlcm5lbHMuCisgICAgICAgIC0gQ29ycmVjdCBkZWZhdWx0IHByZWNvbXBlbnNhdGlvbiB2YWx1ZSBmb3IgUmV2QSBoYXJkd2FyZS4KKyAgICAgICAgLSBGaXggRG9tYWluIFZhbGlkYXRpb24gdGhyZWFkIHNodXRkb3duLgorICAgICAgICAtIEFkZCBhIGZpcm13YXJlIHdvcmthcm91bmQgdG8gbWFrZSB0aGUgTEVEIGJsaW5rCisgICAgICAgICAgYnJpZ2h0ZXIgZHVyaW5nIHBhY2tldGl6ZWQgb3BlcmF0aW9ucyBvbiB0aGUgSDJBNC4KKyAgICAgICAgLSBDb3JyZWN0IC9wcm9jIGRpc3BsYXkgb2YgdXNlciByZWFkIHN0cmVhbWluZyBzZXR0aW5ncy4KKyAgICAgICAgLSBTaW1wbGlmeSBkcml2ZXIgbG9ja2luZyBieSByZWxlYXNpbmcgdGhlIGlvX3JlcXVlc3RfbG9jaworICAgICAgICAgIHVwb24gZHJpdmVyIGVudHJ5IGZyb20gdGhlIG1pZC1sYXllci4KKyAgICAgICAgLSBDbGVhbnVwIGNvbW1hbmQgbGluZSBwYXJzaW5nIGFuZCBtb3ZlIG11Y2ggb2YgdGhpcyBjb2RlCisgICAgICAgICAgdG8gYWljbGliLgorCisgICAxLjMuNCAoRmVicnVhcnkgMjh0aCwgMjAwMykKKyAgICAgICAgLSBDb3JyZWN0IGEgcmFjZSBjb25kaXRpb24gaW4gb3VyIGVycm9yIHJlY292ZXJ5IGhhbmRsZXIuCisgICAgICAgIC0gQWxsb3cgVGVzdCBVbml0IFJlYWR5IGNvbW1hbmRzIHRvIHRha2UgYSBmdWxsIDUgc2Vjb25kcworICAgICAgICAgIGR1cmluZyBEb21haW4gVmFsaWRhdGlvbi4KKworICAgMS4zLjIgKEZlYnJ1YXJ5IDE5dGgsIDIwMDMpCisgICAgICAgIC0gQ29ycmVjdCBhIFJldiBCLiByZWdyZXNzaW9uIGR1ZSB0byB0aGUgR0VNMzE4CisgICAgICAgICAgY29tcGF0aWJpbGl0eSBmaXggaW5jbHVkZWQgaW4gMS4zLjEuCisgICAgICAgICAgCisgICAxLjMuMSAoRmVicnVhcnkgMTF0aCwgMjAwMykKKyAgICAgICAgLSBBZGQgc3VwcG9ydCBmb3IgdGhlIDM5MzIwQS4KKyAgICAgICAgLSBJbXByb3ZlIHJlY292ZXJ5IGZvciBjZXJ0YWluIFBDSS1YIGVycm9ycy4KKyAgICAgICAgLSBGaXggaGFuZGxpbmcgb2YgTFEvREFUQS9MUS9EQVRBIGZvciB0aGUKKyAgICAgICAgICBzYW1lIHdyaXRlIHRyYW5zYWN0aW9uIHRoYXQgY2FuIG9jY3VyIHdpdGhvdXQKKyAgICAgICAgICBpbnRlcnZlaW5pbmcgdHJhaW5pbmcuCisgICAgICAgIC0gQ29ycmVjdCBjb21wYXRpYmlsaXR5IGlzc3VlcyB3aXRoIHRoZSBHRU0zMTgKKyAgICAgICAgICBlbmNsb3N1cmUgc2VydmljZXMgZGV2aWNlLgorICAgICAgICAtIENvcnJlY3QgZGF0YSBjb3JydXB0aW9uIGlzc3VlIHRoYXQgb2NjdXJyZWQgdW5kZXIKKyAgICAgICAgICBoaWdoIHRhZyBkZXB0aCB3cml0ZSBsb2Fkcy4KKyAgICAgICAgLSBBZGFwdCB0byBhIGNoYW5nZSBpbiB0aGUgMi41LlggZGFlbW9uaXplKCkgQVBJLgorICAgICAgICAtIENvcnJlY3QgYSAiTWlzc2luZyBjYXNlIGluIGFoZF9oYW5kbGVfc2NzaWludCIgcGFuaWMuCisKKyAgIDEuMy4wIChKYW51YXJ5IDIxc3QsIDIwMDMpCisgICAgICAgIC0gRnVsbCByZWdyZXNzaW9uIHRlc3RpbmcgZm9yIGFsbCBVMzIwIHByb2R1Y3RzIGNvbXBsZXRlZC4KKyAgICAgICAgLSBBZGRlZCBhYm9ydCBhbmQgdGFyZ2V0L2x1biByZXNldCBlcnJvciByZWNvdmVyeSBoYW5kbGVyIGFuZAorICAgICAgICAgIGludGVycnVwdCBjb2FsZXNzaW5nLgorCisgICAxLjIuMCAoTm92ZW1iZXIgMTR0aCwgMjAwMikKKyAgICAgICAgLSBBZGRlZCBzdXBwb3J0IGZvciBEb21haW4gVmFsaWRhdGlvbgorICAgICAgICAtIEFkZCBzdXBwb3J0IGZvciB0aGUgSGV3bGV0dC1QYWNrYXJkIHZlcnNpb24gb2YgdGhlIDM5MzIwRAorICAgICAgICAgIGFuZCBBSUMtNzkwMiBhZGFwdGVycy4KKyAgICAgICAgU3VwcG9ydCBmb3IgcHJldmlvdXMgYWRhcHRlcnMgaGFzIG5vdCBiZWVuIGZ1bGx5IHRlc3RlZCBhbmQgc2hvdWxkCisgICAgICAgIG9ubHkgYmUgdXNlZCBhdCB0aGUgY3VzdG9tZXIncyBvd24gcmlzay4KKworICAgMS4xLjEgKFNlcHRlbWJlciAyNHRoLCAyMDAyKQorICAgICAgICAtIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBMaW51eCAyLjUuWCBrZXJuZWwgc2VyaWVzCisKKyAgIDEuMS4wIChTZXB0ZW1iZXIgMTd0aCwgMjAwMikKKyAgICAgICAgLSBBZGRlZCBzdXBwb3J0IGZvciBmb3VyIGFkZGl0aW9uYWwgU0NTSSBwcm9kdWN0czoKKyAgICAgICAgICBBU0MtMzkzMjAsIEFTQy0yOTMyMCwgQVNDLTI5MzIwTFAsIEFJQy03OTAxLgorCisgICAxLjAuMCAoTWF5IDMwdGgsIDIwMDIpCisgICAgICAgIC0gSW5pdGlhbCBkcml2ZXIgcmVsZWFzZS4KKworICAgMi4xLiBTb2Z0d2FyZS9IYXJkd2FyZSBGZWF0dXJlcworICAgICAgICAtIFN1cHBvcnQgZm9yIHRoZSBTUEktNCAiVWx0cmEzMjAiIHN0YW5kYXJkOgorICAgICAgICAgIC0gMzIwTUIvcyB0cmFuc2ZlciByYXRlcworICAgICAgICAgIC0gUGFja2V0aXplZCBTQ1NJIFByb3RvY29sIGF0IDE2ME1CL3MgYW5kIDMyME1CL3MKKyAgICAgICAgICAtIFF1aWNrIEFyYml0cmF0aW9uIFNlbGVjdGlvbiAoUUFTKQorICAgICAgICAgIC0gUmV0YWluZWQgVHJhaW5pbmcgSW5mb3JtYXRpb24gKFJldiBCLiBBU0lDIG9ubHkpCisgICAgICAgIC0gSW50ZXJydXB0IENvYWxlc3NpbmcKKyAgICAgICAgLSBJbml0aWF0b3IgTW9kZSAodGFyZ2V0IG1vZGUgbm90IGN1cnJlbnRseSAKKyAgICAgICAgICBzdXBwb3J0ZWQpCisgICAgICAgIC0gU3VwcG9ydCBmb3IgdGhlIFBDSS1YIHN0YW5kYXJkIHVwIHRvIDEzM01IegorICAgICAgICAtIFN1cHBvcnQgZm9yIHRoZSBQQ0kgdjIuMiBzdGFuZGFyZAorCS0gRG9tYWluIFZhbGlkYXRpb24KKworICAgMi4yLiBPcGVyYXRpbmcgU3lzdGVtIFN1cHBvcnQ6CisgICAgICAgIC0gUmVkaGF0IExpbnV4IDcuMiwgNy4zLCA4LjAsIEFkdmFuY2VkIFNlcnZlciAyLjEKKyAgICAgICAgLSBTdVNFIExpbnV4IDcuMywgOC4wLCA4LjEsIEVudGVycHJpc2UgU2VydmVyIDcKKyAgICAgICAgLSBvbmx5IEludGVsIGFuZCBBTUQgeDg2IHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUKKyAgICAgICAgLSA+NEdCIG1lbW9yeSBjb25maWd1cmF0aW9ucyBzdXBwb3J0ZWQuCisKKyAgICAgUmVmZXIgdG8gdGhlIFVzZXIncyBHdWlkZSBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoaXMuCisKKzMuIENvbW1hbmQgTGluZSBPcHRpb25zCisKKyAgICAgICAgV0FSTklORzogQUxURVJJTkcgT1IgQURESU5HIFRIRVNFIERSSVZFUiBQQVJBTUVURVJTCisgICAgICAgICAgICAgICAgIElOQ09SUkVDVExZIENBTiBSRU5ERVIgWU9VUiBTWVNURU0gSU5PUEVSQUJMRS4KKyAgICAgICAgICAgICAgICAgVVNFIFRIRU0gV0lUSCBDQVVUSU9OLiAKKworICAgRWRpdCB0aGUgZmlsZSAibW9kcHJvYmUuY29uZiIgaW4gdGhlIGRpcmVjdG9yeSAvZXRjIGFuZCBhZGQvZWRpdCBhCisgICBsaW5lIGNvbnRhaW5pbmcgJ29wdGlvbnMgYWljNzl4eCBhaWM3OXh4PVtjb21tYW5kWyxjb21tYW5kLi4uXV0nIHdoZXJlCisgICAnY29tbWFuZCcgaXMgb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogdmVyYm9zZQorICAgICAgICAgIERlZmluaXRpb246IGVuYWJsZSBhZGRpdGlvbmFsIGluZm9ybWF0aXZlIG1lc3NhZ2VzIGR1cmluZworICAgICAgICAgICAgICAgICAgICAgIGRyaXZlciBvcGVyYXRpb24uCisgICAgIFBvc3NpYmxlIFZhbHVlczogVGhpcyBvcHRpb24gaXMgYSBmbGFnCisgICAgICAgRGVmYXVsdCBWYWx1ZTogZGlzYWJsZWQKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogZGVidWc6W3ZhbHVlXQorICAgICAgICAgIERlZmluaXRpb246IEVuYWJsZXMgdmFyaW91cyBsZXZlbHMgb2YgZGVidWdnaW5nIGluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgVGhlIGJpdCBkZWZpbml0aW9ucyBmb3IgdGhlIGRlYnVnZ2luZyBtYXNrIGNhbgorICAgICAgICAgICAgICAgICAgICAgIGJlIGZvdW5kIGluIGRyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHguaCB1bmRlcgorICAgICAgICAgICAgICAgICAgICAgIHRoZSAiRGVidWciIGhlYWRpbmcuCisgICAgIFBvc3NpYmxlIFZhbHVlczogMHgwMDAwID0gbm8gZGVidWdnaW5nLCAweGZmZmYgPSBmdWxsIGRlYnVnZ2luZworICAgICAgIERlZmF1bHQgVmFsdWU6IDB4MDAwMAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgT3B0aW9uOiBub19yZXNldAorICAgICAgICAgIERlZmluaXRpb246IERvIG5vdCByZXNldCB0aGUgYnVzIGR1cmluZyB0aGUgaW5pdGlhbCBwcm9iZQorICAgICAgICAgICAgICAgICAgICAgIHBoYXNlCisgICAgIFBvc3NpYmxlIFZhbHVlczogVGhpcyBvcHRpb24gaXMgYSBmbGFnCisgICAgICAgRGVmYXVsdCBWYWx1ZTogZGlzYWJsZWQKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogZXh0ZW5kZWQKKyAgICAgICAgICBEZWZpbml0aW9uOiBGb3JjZSBleHRlbmRlZCB0cmFuc2xhdGlvbiBvbiB0aGUgY29udHJvbGxlcgorICAgICBQb3NzaWJsZSBWYWx1ZXM6IFRoaXMgb3B0aW9uIGlzIGEgZmxhZworICAgICAgIERlZmF1bHQgVmFsdWU6IGRpc2FibGVkCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IHBlcmlvZGljX290YWcKKyAgICAgICAgICBEZWZpbml0aW9uOiBTZW5kIGFuIG9yZGVyZWQgdGFnIHBlcmlvZGljYWxseSB0byBwcmV2ZW50CisgICAgICAgICAgICAgICAgICAgICAgdGFnIHN0YXJ2YXRpb24uICBOZWVkZWQgZm9yIHNvbWUgb2xkZXIgZGV2aWNlcworICAgICBQb3NzaWJsZSBWYWx1ZXM6IFRoaXMgb3B0aW9uIGlzIGEgZmxhZworICAgICAgIERlZmF1bHQgVmFsdWU6IGRpc2FibGVkCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IHJldmVyc2Vfc2NhbgorICAgICAgICAgIERlZmluaXRpb246IFByb2JlIHRoZSBzY3NpIGJ1cyBpbiByZXZlcnNlIG9yZGVyLCBzdGFydGluZworICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGFyZ2V0IDE1CisgICAgIFBvc3NpYmxlIFZhbHVlczogVGhpcyBvcHRpb24gaXMgYSBmbGFnCisgICAgICAgRGVmYXVsdCBWYWx1ZTogZGlzYWJsZWQKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogZ2xvYmFsX3RhZ19kZXB0aAorICAgICAgICAgIERlZmluaXRpb246IEdsb2JhbCB0YWcgZGVwdGggZm9yIGFsbCB0YXJnZXRzIG9uIGFsbCBidXNzZXMuCisgICAgICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gc2V0cyB0aGUgZGVmYXVsdCB0YWcgZGVwdGggd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgICBtYXkgYmUgc2VsZWN0aXZlbHkgb3ZlcnJpZGRlbiB2aSB0aGUgdGFnX2luZm8KKyAgICAgICAgICAgICAgICAgICAgICBvcHRpb24uCisgICAgIFBvc3NpYmxlIFZhbHVlczogMSAtIDI1MworICAgICAgIERlZmF1bHQgVmFsdWU6IDMyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IHRhZ19pbmZvOnt7dmFsdWVbLHZhbHVlLi4uXX1bLHt2YWx1ZVssdmFsdWUuLi5dfS4uLl19CisgICAgICAgICAgRGVmaW5pdGlvbjogU2V0IHRoZSBwZXItdGFyZ2V0IHRhZ2dlZCBxdWV1ZSBkZXB0aCBvbiBhCisgICAgICAgICAgICAgICAgICAgICAgcGVyIGNvbnRyb2xsZXIgYmFzaXMuICBCb3RoIGNvbnRyb2xsZXJzIGFuZCB0YXJnZXRzCisgICAgICAgICAgICAgICAgICAgICAgbWF5IGJlIG9tbWl0dGVkIGluZGljYXRpbmcgdGhhdCB0aGV5IHNob3VsZCByZXRhaW4KKyAgICAgICAgICAgICAgICAgICAgICB0aGUgZGVmYXVsdCB0YWcgZGVwdGguCisgICAgICAgICAgICBFeGFtcGxlczogdGFnX2luZm86e3sxNiwzMiwzMiw2NCw4LDgsLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyfQorICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciAwCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyBhIHRhZyBkZXB0aCBvZiAxNiBmb3IgdGFyZ2V0IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVzIGEgdGFnIGRlcHRoIG9mIDY0IGZvciB0YXJnZXQgMworICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgYSB0YWcgZGVwdGggb2YgOCBmb3IgdGFyZ2V0cyA0IGFuZCA1CisgICAgICAgICAgICAgICAgICAgICAgICAgIGxlYXZlcyB0YXJnZXQgNiBhdCB0aGUgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgYSB0YWcgZGVwdGggb2YgMzIgZm9yIHRhcmdldHMgMSwyLDctMTUKKyAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBvdGhlciB0YXJnZXRzIHJldGFpbiB0aGUgZGVmYXVsdCBkZXB0aC4KKworICAgICAgICAgICAgICAgICAgICAgIHRhZ19pbmZvOnt7fSx7MzIsLDMyfX0KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgYSB0YWcgZGVwdGggb2YgMzIgZm9yIHRhcmdldHMgMCBhbmQgMgorICAgICAgICAgICAgICAgICAgICAgICAgQWxsIG90aGVyIHRhcmdldHMgcmV0YWluIHRoZSBkZWZhdWx0IGRlcHRoLgorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgIFBvc3NpYmxlIFZhbHVlczogMSAtIDI1MworICAgICAgIERlZmF1bHQgVmFsdWU6IDMyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IHJkX3N0cm06IHtyZF9zdHJtX2JpdG1hc2tbLHJkX3N0cm1fYml0bWFzay4uLl19CisgICAgICAgICAgRGVmaW5pdGlvbjogRW5hYmxlIHJlYWQgc3RyZWFtaW5nIG9uIGEgcGVyIHRhcmdldCBiYXNpcy4KKyAgICAgICAgICAgICAgICAgICAgICBUaGUgcmRfc3RybV9iaXRtYXNrIGlzIGEgMTYgYml0IGhleCB2YWx1ZSBpbiB3aGljaAorICAgICAgICAgICAgICAgICAgICAgIGVhY2ggYml0IHJlcHJlc2VudHMgYSB0YXJnZXQuICBTZXR0aW5nIHRoZSB0YXJnZXQncworICAgICAgICAgICAgICAgICAgICAgIGJpdCB0byAnMScgZW5hYmxlcyByZWFkIHN0cmVhbWluZyBmb3IgdGhhdAorICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC4gIENvbnRyb2xsZXJzIG1heSBiZSBvbW1pdHRlZCBpbmRpY2F0aW5nIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICB0aGV5IHNob3VsZCByZXRhaW4gdGhlIGRlZmF1bHQgcmVhZCBzdHJlYW1pbmcgc2V0dGluZy4KKyAgICAgICAgICAgICBFeGFtcGxlOiByZF9zdHJtOnsweDAwNDF9CisgICAgICAgICAgICAgICAgICAgICAgICBPbiBDb250cm9sbGVyIDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlcyByZWFkIHN0cmVhbWluZyBmb3IgdGFyZ2V0cyAwIGFuZCA2LgorICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlcyByZWFkIHN0cmVhbWluZyBmb3IgdGFyZ2V0cyAxLTUsNy0xNS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBvdGhlciB0YXJnZXRzIHJldGFpbiB0aGUgZGVmYXVsdCByZWFkCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1pbmcgc2V0dGluZy4KKyAgICAgICAgICAgICBFeGFtcGxlOiByZF9zdHJtOnsweDAwMjMsLDB4RkZGRn0KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVzIHJlYWQgc3RyZWFtaW5nIGZvciB0YXJnZXRzIDEsMiwgYW5kIDUuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVzIHJlYWQgc3RyZWFtaW5nIGZvciB0YXJnZXRzIDMsNCw2LTE1LgorICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciAyCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZXMgcmVhZCBzdHJlYW1pbmcgZm9yIGFsbCB0YXJnZXRzLgorICAgICAgICAgICAgICAgICAgICAgICAgQWxsIG90aGVyIHRhcmdldHMgcmV0YWluIHRoZSBkZWZhdWx0IHJlYWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbWluZyBzZXR0aW5nLgorICAgICAgICAgICAgICAgICAgICAgIAorICAgICBQb3NzaWJsZSBWYWx1ZXM6IDB4MDAwMCAtIDB4ZmZmZgorICAgICAgIERlZmF1bHQgVmFsdWU6IDB4MDAwMAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgT3B0aW9uOiBkdjoge3ZhbHVlWyx2YWx1ZS4uLl19CisgICAgICAgICAgRGVmaW5pdGlvbjogU2V0IERvbWFpbiBWYWxpZGF0aW9uIFBvbGljeSBvbiBhIHBlci1jb250cm9sbGVyIGJhc2lzLgorICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJzIG1heSBiZSBvbW1pdHRlZCBpbmRpY2F0aW5nIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICB0aGV5IHNob3VsZCByZXRhaW4gdGhlIGRlZmF1bHQgcmVhZCBzdHJlYW1pbmcgc2V0dGluZy4KKyAgICAgICAgICAgICBFeGFtcGxlOiBkdjp7LTEsMCwsMSwxLDB9CisgICAgICAgICAgICAgICAgICAgICAgICBPbiBDb250cm9sbGVyIDAgbGVhdmUgRFYgYXQgaXRzIGRlZmF1bHQgc2V0dGluZy4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMSBkaXNhYmxlIERWLgorICAgICAgICAgICAgICAgICAgICAgICAgU2tpcCBjb25maWd1cmF0aW9uIG9uIENvbnRyb2xsZXIgMi4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXJzIDMgYW5kIDQgZW5hYmxlIERWLgorICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciA1IGRpc2FibGUgRFYuCisKKyAgICAgUG9zc2libGUgVmFsdWVzOiA8IDAgVXNlIHNldHRpbmcgZnJvbSBzZXJpYWwgRUVQUk9NLgorICAgICAgICAgICAgICAgICAgICAgIDAgRGlzYWJsZSBEVgorICAgICAgICAgICAgICAgICAgICAgID4gMCBFbmFibGUgRFYKKyAgICAgICBEZWZhdWx0IFZhbHVlOiBEViBTZXJpYWwgRUVQUk9NIGNvbmZpZ3VyYXRpb24gc2V0dGluZy4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogc2VsdGltZTpbdmFsdWVdCisgICAgICAgICAgRGVmaW5pdGlvbjogU3BlY2lmaWVzIHRoZSBzZWxlY3Rpb24gdGltZW91dCB2YWx1ZQorICAgICBQb3NzaWJsZSBWYWx1ZXM6IDAgPSAyNTZtcywgMSA9IDEyOG1zLCAyID0gNjRtcywgMyA9IDMybXMKKyAgICAgICBEZWZhdWx0IFZhbHVlOiAwCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAqKiogVGhlIGZvbGxvd2luZyB0aHJlZSBvcHRpb25zIHNob3VsZCBvbmx5IGJlIGNoYW5nZWQgYXQgKioqCisgICAqKiogdGhlIGRpcmVjdGlvbiBvZiBhIHRlY2huaWNhbCBzdXBwb3J0IHJlcHJlc2VudGF0aXZlLiAgKioqCisKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogcHJlY29tcDoge3ZhbHVlWyx2YWx1ZS4uLl19CisgICAgICAgICAgRGVmaW5pdGlvbjogU2V0IElPIENlbGwgcHJlY29tcGVuc2F0aW9uIHZhbHVlIG9uIGEgcGVyLWNvbnRyb2xsZXIKKyAgICAgICAgICAgICAgICAgICAgICBiYXNpcy4KKyAgICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVycyBtYXkgYmUgb21taXR0ZWQgaW5kaWNhdGluZyB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgdGhleSBzaG91bGQgcmV0YWluIHRoZSBkZWZhdWx0IHByZWNvbXBlbnNhdGlvbiBzZXR0aW5nLgorICAgICAgICAgICAgIEV4YW1wbGU6IHByZWNvbXA6ezB4MX0KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMCBzZXQgcHJlY29tcGVuc2F0aW9uIHRvIDEuCisgICAgICAgICAgICAgRXhhbXBsZTogcHJlY29tcDp7MSwsN30KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMCBzZXQgcHJlY29tcGVuc2F0aW9uIHRvIDEuCisgICAgICAgICAgICAgICAgICAgICAgICBPbiBDb250cm9sbGVyIDIgc2V0IHByZWNvbXBlbnNhdGlvbiB0byA4LgorICAgICAgICAgICAgICAgICAgICAgIAorICAgICBQb3NzaWJsZSBWYWx1ZXM6IDAgLSA3CisgICAgICAgRGVmYXVsdCBWYWx1ZTogVmFyaWVzIGJhc2VkIG9uIGNoaXAgcmV2aXNpb24KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogc2xld3JhdGU6IHt2YWx1ZVssdmFsdWUuLi5dfQorICAgICAgICAgIERlZmluaXRpb246IFNldCBJTyBDZWxsIHNsZXcgcmF0ZSBvbiBhIHBlci1jb250cm9sbGVyIGJhc2lzLgorICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJzIG1heSBiZSBvbW1pdHRlZCBpbmRpY2F0aW5nIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICB0aGV5IHNob3VsZCByZXRhaW4gdGhlIGRlZmF1bHQgc2xldyByYXRlIHNldHRpbmcuCisgICAgICAgICAgICAgRXhhbXBsZTogc2xld3JhdGU6ezB4MX0KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMCBzZXQgc2xldyByYXRlIHRvIDEuCisgICAgICAgICAgICAgRXhhbXBsZTogc2xld3JhdGUgOnsxLCw4fQorICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciAwIHNldCBzbGV3IHJhdGUgdG8gMS4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMiBzZXQgc2xldyByYXRlIHRvIDguCisgICAgICAgICAgICAgICAgICAgICAgCisgICAgIFBvc3NpYmxlIFZhbHVlczogMCAtIDE1CisgICAgICAgRGVmYXVsdCBWYWx1ZTogVmFyaWVzIGJhc2VkIG9uIGNoaXAgcmV2aXNpb24KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogYW1wbGl0dWRlOiB7dmFsdWVbLHZhbHVlLi4uXX0KKyAgICAgICAgICBEZWZpbml0aW9uOiBTZXQgSU8gQ2VsbCBzaWduYWwgYW1wbGl0dWRlIG9uIGEgcGVyLWNvbnRyb2xsZXIgYmFzaXMuCisgICAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlcnMgbWF5IGJlIG9tbWl0dGVkIGluZGljYXRpbmcgdGhhdAorICAgICAgICAgICAgICAgICAgICAgIHRoZXkgc2hvdWxkIHJldGFpbiB0aGUgZGVmYXVsdCByZWFkIHN0cmVhbWluZyBzZXR0aW5nLgorICAgICAgICAgICAgIEV4YW1wbGU6IGFtcGxpdHVkZTp7MHgxfQorICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciAwIHNldCBhbXBsaXR1ZGUgdG8gMS4KKyAgICAgICAgICAgICBFeGFtcGxlOiBhbXBsaXR1ZGUgOnsxLCw3fQorICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciAwIHNldCBhbXBsaXR1ZGUgdG8gMS4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMiBzZXQgYW1wbGl0dWRlIHRvIDcuCisgICAgICAgICAgICAgICAgICAgICAgCisgICAgIFBvc3NpYmxlIFZhbHVlczogMSAtIDcKKyAgICAgICBEZWZhdWx0IFZhbHVlOiBWYXJpZXMgYmFzZWQgb24gY2hpcCByZXZpc2lvbgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgRXhhbXBsZTogJ29wdGlvbnMgYWljNzl4eCBhaWM3OXh4PXZlcmJvc2UscmRfc3RybTp7ezB4MDA0MX19JworICAgICAgICBlbmFibGVzIHZlcmJvc2Ugb3V0cHV0IGluIHRoZSBkcml2ZXIgYW5kIHR1cm5zIHJlYWQgc3RyZWFtaW5nIG9uCisgICAgICAgIGZvciB0YXJnZXRzIDAgYW5kIDYgb2YgQ29udHJvbGxlciAwLgorCis0LiBBZGRpdGlvbmFsIE5vdGVzCisKKyAgIDQuMS4gS25vd24vVW5yZXNvbHZlZCBvciBGWUkgSXNzdWVzCisKKyAgICAgICAgKiBVbmRlciBTdVNFIExpbnV4IEVudGVycHJpc2UgNywgdGhlIGRyaXZlciBtYXkgZmFpbCB0byBvcGVyYXRlCisgICAgICAgICAgY29ycmVjdGx5IGR1ZSB0byBhIHByb2JsZW0gd2l0aCBQQ0kgaW50ZXJydXB0IHJvdXRpbmcgaW4gdGhlCisgICAgICAgICAgTGludXgga2VybmVsLiAgUGxlYXNlIGNvbnRhY3QgU3VTRSBmb3IgYW4gdXBkYXRlZCBMaW51eAorICAgICAgICAgIGtlcm5lbC4KKworICAgNC4yLiBUaGlyZC1QYXJ0eSBDb21wYXRpYmlsaXR5IElzc3VlcworCisgICAgICAgICogQWRhcHRlYyBvbmx5IHN1cHBvcnRzIFVsdHJhMzIwIGhhcmQgZHJpdmVzIHJ1bm5pbmcKKyAgICAgICAgICB0aGUgbGF0ZXN0IGZpcm13YXJlIGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHdpdGgKKyAgICAgICAgICB5b3VyIGhhcmQgZHJpdmUgbWFudWZhY3R1cmVyIHRvIGVuc3VyZSB5b3UgaGF2ZSB0aGUKKyAgICAgICAgICBsYXRlc3QgdmVyc2lvbi4KKworICAgNC4zLiBPcGVyYXRpbmcgU3lzdGVtIG9yIFRlY2hub2xvZ3kgTGltaXRhdGlvbnMKKyAgICAgICAgCisgICAgICAgICogUENJIEhvdCBQbHVnIGlzIHVudGVzdGVkIGFuZCBtYXkgY2F1c2UgdGhlIG9wZXJhdGluZyBzeXN0ZW0gCisgICAgICAgICAgdG8gc3RvcCByZXNwb25kaW5nLgorICAgICAgICAqIEx1bnMgdGhhdCBhcmUgbm90IG51bWJlcmVkIGNvbnRpZ3VvdXNseSBzdGFydGluZyB3aXRoIDAgbWlnaHQgbm90CisgICAgICAgICAgYmUgYXV0b21hdGljYWxseSBwcm9iZWQgZHVyaW5nIHN5c3RlbSBzdGFydHVwLiAgVGhpcyBpcyBhIGxpbWl0YXRpb24KKyAgICAgICAgICBvZiB0aGUgT1MuICBQbGVhc2UgY29udGFjdCB5b3VyIExpbnV4IHZlbmRvciBmb3IgaW5zdHJ1Y3Rpb25zIG9uCisgICAgICAgICAgbWFudWFsbHkgcHJvYmluZyBub24tY29udGlndW91cyBsdW5zLgorICAgICAgICAqIFVzaW5nIHRoZSBEcml2ZXIgVXBkYXRlIERpc2sgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UgZHVyaW5nIE9TCisgICAgICAgICAgaW5zdGFsbGF0aW9uIHVuZGVyIFJlZEhhdCBtaWdodCByZXN1bHQgaW4gdHdvIHZlcnNpb25zIG9mIHRoaXMKKyAgICAgICAgICBkcml2ZXIgYmVpbmcgaW5zdGFsbGVkIGludG8gdGhlIHN5c3RlbSBtb2R1bGUgZGlyZWN0b3J5LiAgVGhpcworICAgICAgICAgIG1pZ2h0IGNhdXNlIHByb2JsZW1zIHdpdGggdGhlIC9zYmluL21raW5pdHJkIHByb2dyYW0gYW5kL29yCisgICAgICAgICAgb3RoZXIgUlBNIHBhY2thZ2VzIHRoYXQgdHJ5IHRvIGluc3RhbGwgc3lzdGVtIG1vZHVsZXMuICBUaGUgYmVzdAorICAgICAgICAgIHdheSB0byBjb3JyZWN0IHRoaXMgb25jZSB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcgaXMgdG8gaW5zdGFsbAorICAgICAgICAgIHRoZSBsYXRlc3QgUlBNIHBhY2thZ2UgdmVyc2lvbiBvZiB0aGlzIGRyaXZlciwgYXZhaWxhYmxlIGZyb20KKyAgICAgICAgICBodHRwOi8vd3d3LmFkYXB0ZWMuY29tLgorCisKKzUuIENvbnRhY3RpbmcgQWRhcHRlYworCisgICBBIFRlY2huaWNhbCBTdXBwb3J0IElkZW50aWZpY2F0aW9uIChUU0lEKSBOdW1iZXIgaXMgcmVxdWlyZWQgZm9yIAorICAgQWRhcHRlYyB0ZWNobmljYWwgc3VwcG9ydC4KKyAgICAtIFRoZSAxMi1kaWdpdCBUU0lEIGNhbiBiZSBmb3VuZCBvbiB0aGUgd2hpdGUgYmFyY29kZS10eXBlIGxhYmVsCisgICAgICBpbmNsdWRlZCBpbnNpZGUgdGhlIGJveCB3aXRoIHlvdXIgcHJvZHVjdC4gVGhlIFRTSUQgaGVscHMgdXMgCisgICAgICBwcm92aWRlIG1vcmUgZWZmaWNpZW50IHNlcnZpY2UgYnkgYWNjdXJhdGVseSBpZGVudGlmeWluZyB5b3VyIAorICAgICAgcHJvZHVjdCBhbmQgc3VwcG9ydCBzdGF0dXMuCisgICBTdXBwb3J0IE9wdGlvbnMKKyAgICAtIFNlYXJjaCB0aGUgQWRhcHRlYyBTdXBwb3J0IEtub3dsZWRnZWJhc2UgKEFTSykgYXQKKyAgICAgIGh0dHA6Ly9hc2suYWRhcHRlYy5jb20gZm9yIGFydGljbGVzLCB0cm91Ymxlc2hvb3RpbmcgdGlwcywgYW5kCisgICAgICBmcmVxdWVudGx5IGFza2VkIHF1ZXN0aW9ucyBmb3IgeW91ciBwcm9kdWN0LgorICAgIC0gRm9yIHN1cHBvcnQgdmlhIEVtYWlsLCBzdWJtaXQgeW91ciBxdWVzdGlvbiB0byBBZGFwdGVjJ3MgCisgICAgICBUZWNobmljYWwgU3VwcG9ydCBTcGVjaWFsaXN0cyBhdCBodHRwOi8vYXNrLmFkYXB0ZWMuY29tLgorICAgICAKKyAgIE5vcnRoIEFtZXJpY2EKKyAgICAtIFZpc2l0IG91ciBXZWIgc2l0ZSBhdCBodHRwOi8vd3d3LmFkYXB0ZWMuY29tLgorICAgIC0gVG8gc3BlYWsgd2l0aCBhIEZpYnJlIENoYW5uZWwvUkFJRC9FeHRlcm5hbCBTdG9yYWdlIFRlY2huaWNhbAorICAgICAgU3VwcG9ydCBTcGVjaWFsaXN0LCBjYWxsIDEtMzIxLTIwNy0yMDAwLAorICAgICAgSG91cnM6IE1vbmRheS1GcmlkYXksIDM6MDAgQS5NLiB0byA1OjAwIFAuTS4sIFBTVC4KKyAgICAgIChOb3Qgb3BlbiBvbiBob2xpZGF5cykKKyAgICAtIEZvciBUZWNobmljYWwgU3VwcG9ydCBpbiBhbGwgb3RoZXIgdGVjaG5vbG9naWVzIGluY2x1ZGluZyAKKyAgICAgIFNDU0ksIGNhbGwgMS00MDgtOTM0LTcyNzQsCisgICAgICBIb3VyczogTW9uZGF5LUZyaWRheSwgNjowMCBBLk0uIHRvIDU6MDAgUC5NLiwgUFNULgorICAgICAgKE5vdCBvcGVuIG9uIGhvbGlkYXlzKQorICAgIC0gRm9yIGFmdGVyIGhvdXJzIHN1cHBvcnQsIGNhbGwgMS04MDAtNDE2LTgwNjYgKCQ5OS9jYWxsLCAKKyAgICAgICQxNDkvY2FsbCBvbiBob2xpZGF5cykKKyAgICAtIFRvIG9yZGVyIEFkYXB0ZWMgcHJvZHVjdHMgaW5jbHVkaW5nIHNvZnR3YXJlIGFuZCBjYWJsZXMsIGNhbGwKKyAgICAgIDEtODAwLTQ0Mi03Mjc0IG9yIDEtNDA4LTk1Ny03Mjc0LiBZb3UgY2FuIGFsc28gdmlzaXQgb3VyIAorICAgICAgb25saW5lIHN0b3JlIGF0IGh0dHA6Ly93d3cuYWRhcHRlY3N0b3JlLmNvbQorCisgICBFdXJvcGUKKyAgICAtIFZpc2l0IG91ciBXZWIgc2l0ZSBhdCBodHRwOi8vd3d3LmFkYXB0ZWMtZXVyb3BlLmNvbS4KKyAgICAtIEVuZ2xpc2ggYW5kIEZyZW5jaDogVG8gc3BlYWsgd2l0aCBhIFRlY2huaWNhbCBTdXBwb3J0IAorICAgICAgU3BlY2lhbGlzdCwgY2FsbCBvbmUgb2YgdGhlIGZvbGxvd2luZyBudW1iZXJzOgorICAgICAgICAtIEVuZ2xpc2g6ICszMi0yLTM1Mi0zNDcwCisgICAgICAgIC0gRnJlbmNoOiAgKzMyLTItMzUyLTM0NjAKKyAgICAgIEhvdXJzOiBNb25kYXktVGh1cnNkYXksIDEwOjAwIHRvIDEyOjMwLCAxMzozMCB0byAxNzozMCBDRVQgCisgICAgICAgICAgICAgRnJpZGF5LCAxMDowMCB0byAxMjozMCwgMTM6MzAgdG8gMTY6MzAgQ0VUCisgICAgLSBHZXJtYW46IFRvIHNwZWFrIHdpdGggYSBUZWNobmljYWwgU3VwcG9ydCBTcGVjaWFsaXN0LAorICAgICAgY2FsbCArNDktODktNDU2LTQwNjYwCisgICAgICBIb3VyczogTW9uZGF5LVRodXJzZGF5LCAwOTozMCB0byAxMjozMCwgMTM6MzAgdG8gMTY6MzAgQ0VUCisgICAgICAgICAgICAgRnJpZGF5LCAwOTozMCB0byAxMjozMCwgMTM6MzAgdG8gMTU6MDAgQ0VUCisgICAgLSBUbyBvcmRlciBBZGFwdGVjIHByb2R1Y3RzLCBpbmNsdWRpbmcgYWNjZXNzb3JpZXMgYW5kIGNhYmxlczoKKyAgICAgICAgLSBVSzogKzA4MDAtOTYtNjUtMjYgb3IgZmF4ICswODAwLTczMS0wMi05NQorICAgICAgICAtIE90aGVyIEV1cm9wZWFuIGNvdW50cmllczogKzMyLTExLTMwMC0zNzkKKworICAgQXVzdHJhbGlhIGFuZCBOZXcgWmVhbGFuZAorICAgIC0gVmlzaXQgb3VyIFdlYiBzaXRlIGF0IGh0dHA6Ly93d3cuYWRhcHRlYy5jb20uYXUuCisgICAgLSBUbyBzcGVhayB3aXRoIGEgVGVjaG5pY2FsIFN1cHBvcnQgU3BlY2lhbGlzdCwgY2FsbCAKKyAgICAgICs2MTItOTQxNi0wNjk4CisgICAgICBIb3VyczogTW9uZGF5LUZyaWRheSwgMTA6MDAgQS5NLiB0byA0OjMwIFAuTS4sIEVBVAorICAgICAgKE5vdCBvcGVuIG9uIGhvbGlkYXlzKQorCisgICBKYXBhbgorICAgIC0gVG8gc3BlYWsgd2l0aCBhIFRlY2huaWNhbCBTdXBwb3J0IFNwZWNpYWxpc3QsIGNhbGwgCisgICAgICArODEtMy01MzA4LTYxMjAgCisgICAgICBIb3VyczogTW9uZGF5LUZyaWRheSwgOTowMCBhLm0uIHRvIDEyOjAwIHAubS4sIDE6MDAgcC5tLiB0bworICAgICAgNjowMCBwLm0uIFRTQworCisgICBIb25nIEtvbmcgYW5kIENoaW5hCisgICAgLSBUbyBzcGVhayB3aXRoIGEgVGVjaG5pY2FsIFN1cHBvcnQgU3BlY2lhbGlzdCwgY2FsbCAKKyAgICAgICs4NTItMjg2OS03MjAwCisgICAgICBIb3VyczogTW9uZGF5LUZyaWRheSwgMTA6MDAgdG8gMTc6MDAuCisgICAgLSBGYXggVGVjaG5pY2FsIFN1cHBvcnQgYXQgKzg1Mi0yODY5LTcxMDAuCisKKyAgIFNpbmdhcG9yZQorICAgIC0gVG8gc3BlYWsgd2l0aCBhIFRlY2huaWNhbCBTdXBwb3J0IFNwZWNpYWxpc3QsIGNhbGwgCisgICAgICArNjUtMjQ1LTc0NzAKKyAgICAgIEhvdXJzOiBNb25kYXktRnJpZGF5LCAxMDowMCB0byAxNzowMC4KKyAgICAtIEZheCBUZWNobmljYWwgU3VwcG9ydCBhdCArODUyLTI4NjktNzEwMAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvKgorICogQ29weXJpZ2h0IChjKSAyMDAzIEFkYXB0ZWMgSW5jLiA2OTEgUy4gTWlscGl0YXMgQmx2ZC4sIE1pbHBpdGFzIENBIDk1MDM1IFVTQS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogWW91IGFyZSBwZXJtaXR0ZWQgdG8gcmVkaXN0cmlidXRlLCB1c2UgYW5kIG1vZGlmeSB0aGlzIFJFQURNRSBmaWxlIGluIHdob2xlCisgKiBvciBpbiBwYXJ0IGluIGNvbmp1bmN0aW9uIHdpdGggcmVkaXN0cmlidXRpb24gb2Ygc29mdHdhcmUgZ292ZXJuZWQgYnkgdGhlCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIFJFQURNRSBmaWxlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAqIDIuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAzLiBNb2RpZmljYXRpb25zIG9yIG5ldyBjb250cmlidXRpb25zIG11c3QgYmUgYXR0cmlidXRlZCBpbiBhIGNvcHlyaWdodAorICogICAgbm90aWNlIGlkZW50aWZ5aW5nIHRoZSBhdXRob3IgKCJDb250cmlidXRvciIpIGFuZCBhZGRlZCBiZWxvdyB0aGUKKyAqICAgIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UuIFRoZSBjb3B5cmlnaHQgbm90aWNlIGlzIGZvciBwdXJwb3NlcyBvZgorICogICAgaWRlbnRpZnlpbmcgY29udHJpYnV0b3JzIGFuZCBzaG91bGQgbm90IGJlIGRlZW1lZCBhcyBwZXJtaXNzaW9uIHRvIGFsdGVyCisgKiAgICB0aGUgcGVybWlzc2lvbnMgZ2l2ZW4gYnkgQWRhcHRlYy4KKyAqCisgKiBUSElTIFJFQURNRSBGSUxFIElTIFBST1ZJREVEIEJZIEFEQVBURUMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBBTlkKKyAqIFdBUlJBTlRJRVMgT0YgTk9OLUlORlJJTkdFTUVOVCBPUiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQorICogQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTAorICogQURBUFRFQyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBSRUFETUUKKyAqIEZJTEUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9haWM3eHh4LnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9haWM3eHh4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjBlNzM1NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9haWM3eHh4LnR4dApAQCAtMCwwICsxLDQxNCBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKz0gICAgQWRhcHRlYyBBaWM3eHh4IEZhc3QgLT4gVWx0cmExNjAgRmFtaWx5IE1hbmFnZXIgU2V0IHY2LjIuMjggICA9Cis9ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFQURNRSBmb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgPQorPSAgICAgICAgICAgICAgICAgICAgIFRoZSBMaW51eCBPcGVyYXRpbmcgU3lzdGVtICAgICAgICAgICAgICAgICAgID0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGluIHRoaXMgZmlsZToKKworICAxLiBTdXBwb3J0ZWQgSGFyZHdhcmUKKyAgMi4gVmVyc2lvbiBIaXN0b3J5CisgIDMuIENvbW1hbmQgTGluZSBPcHRpb25zCisgIDQuIENvbnRhY3RpbmcgQWRhcHRlYworCisxLiBTdXBwb3J0ZWQgSGFyZHdhcmUKKworICAgVGhlIGZvbGxvd2luZyBBZGFwdGVjIFNDU0kgQ2hpcHMgYW5kIEhvc3QgQWRhcHRlcnMgYXJlIHN1cHBvcnRlZCBieQorICAgdGhlIGFpYzd4eHggZHJpdmVyLiAKKworICAgQ2hpcCAgICBNSVBTICBIb3N0IEJ1cyAgTWF4U3luYyAgTWF4V2lkdGggIFNDQnMgIE5vdGVzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGFpYzc3NzAgIDEwICAgIEVJU0EvVkwgICAxME1IeiAgICAxNkJpdCAgICAgIDQgICAxCisgICBhaWM3ODUwICAxMCAgICBQQ0kvMzIgICAgMTBNSHogICAgOEJpdCAgICAgICAzCisgICBhaWM3ODU1ICAxMCAgICBQQ0kvMzIgICAgMTBNSHogICAgOEJpdCAgICAgICAzCisgICBhaWM3ODU2ICAxMCAgICBQQ0kvMzIgICAgMTBNSHogICAgOEJpdCAgICAgICAzCisgICBhaWM3ODU5ICAxMCAgICBQQ0kvMzIgICAgMjBNSHogICAgOEJpdCAgICAgICAzCisgICBhaWM3ODYwICAxMCAgICBQQ0kvMzIgICAgMjBNSHogICAgOEJpdCAgICAgICAzCisgICBhaWM3ODcwICAxMCAgICBQQ0kvMzIgICAgMTBNSHogICAgMTZCaXQgICAgICAxNgorICAgYWljNzg4MCAgMTAgICAgUENJLzMyICAgIDIwTUh6ICAgIDE2Qml0ICAgICAgMTYKKyAgIGFpYzc4OTAgIDIwICAgIFBDSS8zMiAgICA0ME1IeiAgICAxNkJpdCAgICAgIDE2ICAgICAgMyA0IDUgNiA3IDgKKyAgIGFpYzc4OTEgIDIwICAgIFBDSS82NCAgICA0ME1IeiAgICAxNkJpdCAgICAgIDE2ICAgICAgMyA0IDUgNiA3IDgKKyAgIGFpYzc4OTIgIDIwICAgUENJLzY0LTY2ICA4ME1IeiAgICAxNkJpdCAgICAgIDE2ICAgICAgMyA0IDUgNiA3IDgKKyAgIGFpYzc4OTUgIDE1ICAgIFBDSS8zMiAgICAyME1IeiAgICAxNkJpdCAgICAgIDE2ICAgIDIgMyA0IDUKKyAgIGFpYzc4OTVDIDE1ICAgIFBDSS8zMiAgICAyME1IeiAgICAxNkJpdCAgICAgIDE2ICAgIDIgMyA0IDUgICAgIDgKKyAgIGFpYzc4OTYgIDIwICAgIFBDSS8zMiAgICA0ME1IeiAgICAxNkJpdCAgICAgIDE2ICAgIDIgMyA0IDUgNiA3IDgKKyAgIGFpYzc4OTcgIDIwICAgIFBDSS82NCAgICA0ME1IeiAgICAxNkJpdCAgICAgIDE2ICAgIDIgMyA0IDUgNiA3IDgKKyAgIGFpYzc4OTkgIDIwICAgUENJLzY0LTY2ICA4ME1IeiAgICAxNkJpdCAgICAgIDE2ICAgIDIgMyA0IDUgNiA3IDgKKworICAgMS4gICBNdWx0aXBsZXhlZCBUd2luIENoYW5uZWwgRGV2aWNlIC0gT25lIGNvbnRyb2xsZXIgc2VydmljaW5nIHR3bworICAgICAgICBidXNzZXMuCisgICAyLiAgIE11bHRpLWZ1bmN0aW9uIFR3aW4gQ2hhbm5lbCBEZXZpY2UgLSBUd28gY29udHJvbGxlcnMgb24gb25lIGNoaXAuCisgICAzLiAgIENvbW1hbmQgQ2hhbm5lbCBTZWNvbmRhcnkgRE1BIEVuZ2luZSAtIEFsbG93cyBzY2F0dGVyIGdhdGhlciBsaXN0CisgICAgICAgIGFuZCBTQ0IgcHJlZmV0Y2guCisgICA0LiAgIDY0IEJ5dGUgU0NCIFN1cHBvcnQgLSBBbGxvd3MgZGlzY29ubmVjdGVkLCB1bnR0YWdnZWQgcmVxdWVzdCB0YWJsZQorICAgICAgICBmb3IgYWxsIHBvc3NpYmxlIHRhcmdldC9sdW4gY29tYmluYXRpb25zLgorICAgNS4gICBCbG9jayBNb3ZlIEluc3RydWN0aW9uIFN1cHBvcnQgLSBEb3VibGVzIHRoZSBzcGVlZCBvZiBjZXJ0YWluCisgICAgICAgIHNlcXVlbmNlciBvcGVyYXRpb25zLgorICAgNi4gICBgQmF5b25ldCcgc3R5bGUgU2NhdHRlciBHYXRoZXIgRW5naW5lIC0gSW1wcm92ZXMgUy9HIHByZWZldGNoCisgICAgICAgIHBlcmZvcm1hbmNlLgorICAgNy4gICBRdWV1aW5nIFJlZ2lzdGVycyAtIEFsbG93cyBxdWV1aW5nIG9mIG5ldyB0cmFuc2FjdGlvbnMgd2l0aG91dAorICAgICAgICBwYXVzaW5nIHRoZSBzZXF1ZW5jZXIuCisgICA4LiAgIE11bHRpcGxlIFRhcmdldCBJRHMgLSBBbGxvd3MgdGhlIGNvbnRyb2xsZXIgdG8gcmVzcG9uZCB0byBzZWxlY3Rpb24KKyAgICAgICAgYXMgYSB0YXJnZXQgb24gbXVsdGlwbGUgU0NTSSBJRHMuCisKKyAgIENvbnRyb2xsZXIgICAgICBDaGlwICAgSG9zdC1CdXMgICAgSW50LUNvbm5lY3RvcnMgIEV4dC1Db25uZWN0b3JzICBOb3RlcworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIEFIQS0yNzRYW0FdICAgIGFpYzc3NzAgICBFSVNBICAgICAgICAgU0UtNTBNICAgICAgICAgU0UtSEQ1MEYKKyAgIEFIQS0yNzRYW0FdVyAgIGFpYzc3NzAgICBFSVNBICAgICAgICAgU0UtSEQ2OEYgICAgICAgU0UtSEQ2OEYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0UtNTBNCisgICBBSEEtMjc0WFtBXVQgICBhaWM3NzcwICAgRUlTQSAgICAgICAyIFggU0UtNTBNICAgICAgIFNFLUhENTBGCisgICBBSEEtMjg0MiAgICAgICBhaWM3NzcwICAgIFZMICAgICAgICAgIFNFLTUwTSAgICAgICAgIFNFLUhENTBGCisgICBBSEEtMjk0MEFVICAgICBhaWM3ODYwICAgUENJLzMyICAgICAgIFNFLTUwTSAgICAgICAgIFNFLUhENTBGCisgICBBVkEtMjkwMkkgICAgICBhaWM3ODYwICAgUENJLzMyICAgICAgIFNFLTUwTQorICAgQVZBLTI5MDJFICAgICAgYWljNzg2MCAgIFBDSS8zMiAgICAgICBTRS01ME0KKyAgIEFWQS0yOTA2ICAgICAgIGFpYzc4NTYgICBQQ0kvMzIgICAgICAgU0UtNTBNICAgICAgICAgU0UtREIyNUYKKyAgIEFQQy03ODUwICAgICAgIGFpYzc4NTAgICBQQ0kvMzIgICAgICAgU0UtNTBNICAgICAgICAgICAgICAgICAgICAgICAxCisgICBBVkEtMjk0MCAgICAgICBhaWM3ODYwICAgUENJLzMyICAgICAgIFNFLTUwTQorICAgQUhBLTI5MjBCICAgICAgYWljNzg2MCAgIFBDSS8zMiAgICAgICBTRS01ME0KKyAgIEFIQS0yOTMwQiAgICAgIGFpYzc4NjAgICBQQ0kvMzIgICAgICAgU0UtNTBNCisgICBBSEEtMjkyMEMgICAgICBhaWM3ODU2ICAgUENJLzMyICAgICAgIFNFLTUwTSAgICAgICAgIFNFLUhENTBGCisgICBBSEEtMjkzMEMgICAgICBhaWM3ODYwICAgUENJLzMyICAgICAgIFNFLTUwTQorICAgQUhBLTI5MzBDICAgICAgYWljNzg2MCAgIFBDSS8zMiAgICAgICBTRS01ME0KKyAgIEFIQS0yOTEwQyAgICAgIGFpYzc4NjAgICBQQ0kvMzIgICAgICAgU0UtNTBNCisgICBBSEEtMjkxNUMgICAgICBhaWM3ODYwICAgUENJLzMyICAgICAgIFNFLTUwTQorICAgQUhBLTI5NDBBVS9DTiAgYWljNzg2MCAgIFBDSS8zMiAgICAgICBTRS01ME0gICAgICAgICBTRS1IRDUwRgorICAgQUhBLTI5NDRXICAgICAgYWljNzg3MCAgIFBDSS8zMiAgICAgSFZELUhENjhGICAgICAgICBIVkQtSEQ2OEYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVkQtNTBNCisgICBBSEEtMzk0MFcgICAgICBhaWM3ODcwICAgUENJLzMyICAgICAyIFggU0UtSEQ2OEYgICAgIFNFLUhENjhGICAgICAgICAyCisgICBBSEEtMjk0MFVXICAgICBhaWM3ODgwICAgUENJLzMyICAgICAgIFNFLUhENjhGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFLTUwTSAgICAgICAgIFNFLUhENjhGCisgICBBSEEtMjk0MFUgICAgICBhaWM3ODgwICAgUENJLzMyICAgICAgIFNFLTUwTSAgICAgICAgIFNFLUhENTBGCisgICBBSEEtMjk0MEQgICAgICBhaWM3ODgwICAgUENJLzMyCisgICBhSEEtMjk0MCBBL1QgICBhaWM3ODgwICAgUENJLzMyCisgICBBSEEtMjk0MEQgQS9UICBhaWM3ODgwICAgUENJLzMyCisgICBBSEEtMzk0MFVXICAgICBhaWM3ODgwICAgUENJLzMyICAgICAyIFggU0UtSEQ2OEYgICAgIFNFLUhENjhGICAgICAgICAgIDMKKyAgIEFIQS0zOTQwVVdEICAgIGFpYzc4ODAgICBQQ0kvMzIgICAgIDIgWCBTRS1IRDY4RiAgIDIgWCBTRS1WSEQ2OEYgICAgICAgMworICAgQUhBLTM5NDBVICAgICAgYWljNzg4MCAgIFBDSS8zMiAgICAgMiBYIFNFLTUwTSAgICAgICBTRS1IRDUwRiAgICAgICAgICAzCisgICBBSEEtMjk0NFVXICAgICBhaWM3ODgwICAgUENJLzMyICAgICAgSFZELUhENjhGICAgICAgIEhWRC1IRDY4RgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVkQtNTBNCisgICBBSEEtMzk0NFVXRCAgICBhaWM3ODgwICAgUENJLzMyICAgICAyIFggSFZELUhENjhGICAyIFggSFZELVZIRDY4RiAgICAgIDMKKyAgIEFIQS00OTQ0VVcgICAgIGFpYzc4ODAgICBQQ0kvMzIKKyAgIEFIQS0yOTMwVVcgICAgIGFpYzc4ODAgICBQQ0kvMzIKKyAgIEFIQS0yOTQwVVcgUHJvIGFpYzc4ODAgICBQQ0kvMzIgICAgICBTRS1IRDY4RiAgICAgICAgU0UtSEQ2OEYgICAgICAgICAgICA0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFLTUwTQorICAgQUhBLTI5NDBVVy9DTiAgYWljNzg4MCAgIFBDSS8zMgorICAgQUhBLTI5NDBVRHVhbCAgYWljNzg5NSAgIFBDSS8zMgorICAgQUhBLTI5NDBVV0R1YWwgYWljNzg5NSAgIFBDSS8zMgorICAgQUhBLTM5NDBVV0QgICAgYWljNzg5NSAgIFBDSS8zMgorICAgQUhBLTM5NDBBVVcgICAgYWljNzg5NSAgIFBDSS8zMgorICAgQUhBLTM5NDBBVVdEICAgYWljNzg5NSAgIFBDSS8zMgorICAgQUhBLTM5NDBBVSAgICAgYWljNzg5NSAgIFBDSS8zMgorICAgQUhBLTM5NDRBVVdEICAgYWljNzg5NSAgIFBDSS8zMiAgICAgMiBYIEhWRC1IRDY4RiAgMiBYIEhWRC1WSEQ2OEYKKyAgIEFIQS0yOTQwVTJCICAgIGFpYzc4OTAgICBQQ0kvMzIgICAgICBMVkQtSEQ2OEYgICAgICAgTFZELUhENjhGCisgICBBSEEtMjk0MFUyIE9FTSBhaWM3ODkxICAgUENJLzY0CisgICBBSEEtMjk0MFUyVyAgICBhaWM3ODkwICAgUENJLzMyICAgICAgTFZELUhENjhGICAgICAgIExWRC1IRDY4RgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFLUhENjhGIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRS01ME0KKyAgIEFIQS0yOTUwVTJCICAgIGFpYzc4OTEgICBQQ0kvNjQgICAgICBMVkQtSEQ2OEYgICAgICAgTFZELUhENjhGCisgICBBSEEtMjkzMFUyICAgICBhaWM3ODkwICAgUENJLzMyICAgICAgTFZELUhENjhGICAgICAgIFNFLUhENTBGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFLTUwTSAKKyAgIEFIQS0zOTUwVTJCICAgIGFpYzc4OTcgICBQQ0kvNjQKKyAgIEFIQS0zOTUwVTJEICAgIGFpYzc4OTcgICBQQ0kvNjQKKyAgIEFIQS0yOTE2MCAgICAgIGFpYzc4OTIgICBQQ0kvNjQtNjYKKyAgIEFIQS0yOTE2MCBDUFEgIGFpYzc4OTIgICBQQ0kvNjQtNjYKKyAgIEFIQS0yOTE2ME4gICAgIGFpYzc4OTIgICBQQ0kvMzIgICAgICBMVkQtSEQ2OEYgICAgICAgU0UtSEQ1MEYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0UtNTBNCisgICBBSEEtMjkxNjBMUCAgICBhaWM3ODkyICAgUENJLzY0LTY2CisgICBBSEEtMTkxNjAgICAgICBhaWM3ODkyICAgUENJLzY0LTY2CisgICBBSEEtMjkxNTBMUCAgICBhaWM3ODkyICAgUENJLzY0LTY2CisgICBBSEEtMjkxMzBMUCAgICBhaWM3ODkyICAgUENJLzY0LTY2CisgICBBSEEtMzk2MEQgICAgICBhaWM3ODk5ICAgUENJLzY0LTY2ICAyIFggTFZELUhENjhGICAyIFggTFZELVZIRDY4RgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVkQtNTBNCisgICBBSEEtMzk2MEQgQ1BRICBhaWM3ODk5ICAgUENJLzY0LTY2ICAyIFggTFZELUhENjhGICAyIFggTFZELVZIRDY4RgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVkQtNTBNCisgICBBSEEtMzkxNjAgICAgICBhaWM3ODk5ICAgUENJLzY0LTY2ICAyIFggTFZELUhENjhGICAyIFggTFZELVZIRDY4RgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVkQtNTBNCisKKyAgIDEuIE5vIEJJT1Mgc3VwcG9ydAorICAgMi4gREVDMjEwNTAgUENJLVBDSSBicmlkZ2Ugd2l0aCBtdWx0aXBsZSBjb250cm9sbGVyIGNoaXBzIG9uIHNlY29uZGFyeSBidXMKKyAgIDMuIERFQzIxMTVYIFBDSS1QQ0kgYnJpZGdlIHdpdGggbXVsdGlwbGUgY29udHJvbGxlciBjaGlwcyBvbiBzZWNvbmRhcnkgYnVzCisgICA0LiBBbGwgdGhyZWUgU0NTSSBjb25uZWN0b3JzIG1heSBiZSB1c2VkIHNpbXVsdGFuZW91c2x5IHdpdGhvdXQKKyAgICAgIFNDU0kgInN0dWIiIGVmZmVjdHMuCisKKzIuIFZlcnNpb24gSGlzdG9yeQorICAgNi4yLjM2IChKdW5lIDNyZCwgMjAwMykKKyAgICAgICAgLSBDb3JyZWN0IGNvZGUgdGhhdCBkaXNhYmxlcyBQQ0kgcGFyaXR5IGVycm9yIGNoZWNraW5nLgorICAgICAgICAtIENvcnJlY3QgYW5kIHNpbXBsaWZ5IGhhbmRsaW5nIG9mIHRoZSBpZ25vcmUgd2lkZSByZXNpZHVlCisgICAgICAgICAgbWVzc2FnZS4gIFRoZSBwcmV2aW91cyBjb2RlIHdvdWxkIGZhaWwgdG8gcmVwb3J0IGEgcmVzaWR1YWwKKyAgICAgICAgICBpZiB0aGUgdHJhbnNhY3Rpb24gZGF0YSBsZW5ndGggd2FzIGV2ZW4gYW5kIHdlIHJlY2VpdmVkCisgICAgICAgICAgYW4gSVdSIG1lc3NhZ2UuCisgICAgICAgIC0gQWRkIHN1cHBvcnQgZm9yIHRoZSAyLjUuWCBFSVNBIGZyYW1ld29yay4KKyAgICAgICAgLSBVcGRhdGUgZm9yIGNoYW5nZSBpbiAyLjUuWCBTQ1NJIHByb2MgRlMgaW50ZXJmYWNlLgorICAgICAgICAtIENvcnJlY3QgRG9tYWluIFZhbGlkYXRpb24gY29tbWFuZC1saW5lIG9wdGlvbiBwYXJzaW5nLgorICAgICAgICAtIFdoZW4gbmVnb3RpYXRpb24gYXN5bmMgdmlhIGFuIDhiaXQgV0RUUiBtZXNzYWdlLCBzZW5kCisgICAgICAgICAgYW4gU0RUUiB3aXRoIGFuIG9mZnNldCBvZiAwIHRvIGJlIHN1cmUgdGhlIHRhcmdldAorICAgICAgICAgIGtub3dzIHdlIGFyZSBhc3luYy4gIFRoaXMgd29ya3MgYXJvdW5kIGEgZmlybXdhcmUgZGVmZWN0CisgICAgICAgICAgaW4gdGhlIFF1YW50dW0gQXRsYXMgMTBLLgorICAgICAgICAtIENsZWFyIFBDSSBlcnJvciBzdGF0ZSBkdXJpbmcgZHJpdmVyIGF0dGFjaCBzbyB0aGF0IHdlCisgICAgICAgICAgZG9uJ3QgZGlzYWJsZSBtZW1vcnkgbWFwcGVkIEkvTyBkdWUgdG8gYSBzdHJheSB3cml0ZQorICAgICAgICAgIGJ5IHNvbWUgb3RoZXIgZHJpdmVyIHByb2JlIHRoYXQgb2NjdXJyZWQgYmVmb3JlIHdlCisgICAgICAgICAgY2xhaW1lZCB0aGUgY29udHJvbGxlci4KKworICAgNi4yLjM1IChNYXkgMTR0aCwgMjAwMykKKyAgICAgICAgLSBGaXggYSBmZXcgR0NDIDMuMyBjb21waWxlciB3YXJuaW5ncy4KKyAgICAgICAgLSBDb3JyZWN0IG9wZXJhdGlvbiBvbiBFSVNBIFR3aW4gQ2hhbm5lbCBjb250cm9sbGVyLgorICAgICAgICAtIEFkZCBzdXBwb3J0IGZvciAyLjUuWCdzIHNjc2lfcmVwb3J0X2RldmljZV9yZXNldCgpLgorCisgICA2LjIuMzQgKE1heSA1dGgsIDIwMDMpCisgICAgICAgIC0gRml4IGxvY2tpbmcgcmVncmVzc2lvbiBpbnN0cm9kdWNlZCBpbiA2LjIuMjkgdGhhdAorICAgICAgICAgIGNvdWxkIGN1YXNlIGEgbG9jayBvcmRlciByZXZlcnNhbCBiZXR3ZWVuIHRoZSBpb19yZXF1ZXN0X2xvY2sKKyAgICAgICAgICBhbmQgb3VyIHBlci1zb2Z0YyBsb2NrLiAgVGhpcyB3YXMgb25seSBwb3NzaWJsZSBvbiBSSDksCisgICAgICAgICAgU3VTRSwgYW5kIGtlcm5lbC5vcmcgMi40Llgga2VybmVscy4KKworICAgNi4yLjMzIChBcHJpbCAzMHRoLCAyMDAzKQorICAgICAgICAtIER5bmFtaWNhbGx5IGRpc2FibGUgUENJIHBhcml0eSBlcnJvciByZXBvcnRpbmcgYWZ0ZXIKKyAgICAgICAgICAxMCBlcnJvcnMgYXJlIHJlcG9ydGVkIHRvIHRoZSB1c2VyLiAgVGhlc2UgZXJyb3JzIGFyZQorICAgICAgICAgIHRoZSByZXN1bHQgb2Ygc29tZSBvdGhlciBkZXZpY2UgaXNzdWluZyBQQ0kgdHJhbnNhY3Rpb25zCisgICAgICAgICAgd2l0aCBiYWQgcGFyaXR5LiAgT25jZSB0aGUgdXNlciBoYXMgYmVlbiBpbmZvcm1lZCBvZiB0aGUKKyAgICAgICAgICBwcm9ibGVtLCBjb250aW51aW5nIHRvIHJlcG9ydCB0aGUgZXJyb3JzIGp1c3QgZGVncmFkZXMKKyAgICAgICAgICBvdXIgcGVyZm9ybWFuY2UuCisKKyAgIDYuMi4zMiAoTWFyY2ggMjh0aCwgMjAwMykKKyAgICAgICAgLSBEeW5hbWljYWxseSBzaXplZCBTL0cgbGlzdHMgdG8gYXZvaWQgU0NTSSBtYWxsb2MKKyAgICAgICAgICBwb29sIGZyYWdtZW50YXRpb24gYW5kIFNDU0kgbWlkLWxheWVyIGRlYWRsb2NrLgorCisgICA2LjIuMjggKEphbnVhcnkgMjB0aCwgMjAwMykKKyAgICAgICAgLSBEb21haW4gVmFsaWRhdGlvbiBGaXhlcworICAgICAgICAtIEFkZCBhYmlsaXR5IHRvIGRpc2FibGUgUENJIHBhcml0eSBlcnJvciBjaGVja2luZy4KKyAgICAgICAgLSBFbmhhbmNlZCBNZW1vcnkgTWFwcGVkIEkvTyBwcm9iZQorCisgICA2LjIuMjAgKE5vdmVtYmVyIDd0aCwgMjAwMikKKyAgICAgICAgLSBBZGRlZCBEb21haW4gVmFsaWRhdGlvbi4KKworMy4gQ29tbWFuZCBMaW5lIE9wdGlvbnMKKworICAgICAgICBXQVJOSU5HOiBBTFRFUklORyBPUiBBRERJTkcgVEhFU0UgRFJJVkVSIFBBUkFNRVRFUlMKKyAgICAgICAgICAgICAgICAgSU5DT1JSRUNUTFkgQ0FOIFJFTkRFUiBZT1VSIFNZU1RFTSBJTk9QRVJBQkxFLgorICAgICAgICAgICAgICAgICBVU0UgVEhFTSBXSVRIIENBVVRJT04uIAorCisgICBFZGl0IHRoZSBmaWxlICJtb2Rwcm9iZS5jb25mIiBpbiB0aGUgZGlyZWN0b3J5IC9ldGMgYW5kIGFkZC9lZGl0IGEKKyAgIGxpbmUgY29udGFpbmluZyAnb3B0aW9ucyBhaWM3eHh4IGFpYzd4eHg9W2NvbW1hbmRbLGNvbW1hbmQuLi5dXScgd2hlcmUKKyAgICdjb21tYW5kJyBpcyBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nOgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgT3B0aW9uOiB2ZXJib3NlCisgICAgICAgICAgRGVmaW5pdGlvbjogZW5hYmxlIGFkZGl0aW9uYWwgaW5mb3JtYXRpdmUgbWVzc2FnZXMgZHVyaW5nCisgICAgICAgICAgICAgICAgICAgICAgZHJpdmVyIG9wZXJhdGlvbi4KKyAgICAgUG9zc2libGUgVmFsdWVzOiBUaGlzIG9wdGlvbiBpcyBhIGZsYWcKKyAgICAgICBEZWZhdWx0IFZhbHVlOiBkaXNhYmxlZAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgT3B0aW9uOiBkZWJ1ZzpbdmFsdWVdCisgICAgICAgICAgRGVmaW5pdGlvbjogRW5hYmxlcyB2YXJpb3VzIGxldmVscyBvZiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24KKyAgICAgUG9zc2libGUgVmFsdWVzOiAweDAwMDAgPSBubyBkZWJ1Z2dpbmcsIDB4ZmZmZiA9IGZ1bGwgZGVidWdnaW5nCisgICAgICAgRGVmYXVsdCBWYWx1ZTogMHgwMDAwCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IG5vX3Byb2JlCisgICAgICAgICAgICAgIE9wdGlvbjogcHJvYmVfZWlzYV92bAorICAgICAgICAgIERlZmluaXRpb246IERvIG5vdCBwcm9iZSBmb3IgRUlTQS9WTEIgY29udHJvbGxlcnMuCisgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBhIHRvZ2dsZS4gIElmIHRoZSBkcml2ZXIgaXMgY29tcGlsZWQKKyAgICAgICAgICAgICAgICAgICAgICB0byBub3QgcHJvYmUgRUlTQS9WTEIgY29udHJvbGxlcnMgYnkgZGVmYXVsdCwKKyAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5aW5nICJub19wcm9iZSIgd2lsbCBlbmFibGUgdGhpcyBwcm9iaW5nLgorICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBkcml2ZXIgaXMgY29tcGlsZWQgdG8gcHJvYmUgRUlTQS9WTEIKKyAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVycyBieSBkZWZhdWx0LCBzcGVjaWZ5aW5nICJub19wcm9iZSIKKyAgICAgICAgICAgICAgICAgICAgICB3aWxsIGRpc2FibGUgdGhpcyBwcm9iaW5nLgorICAgICBQb3NzaWJsZSBWYWx1ZXM6IFRoaXMgb3B0aW9uIGlzIGEgdG9nZ2xlCisgICAgICAgRGVmYXVsdCBWYWx1ZTogRUlTQS9WTEIgcHJvYmluZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgT3B0aW9uOiBwY2lfcGFyaXR5CisgICAgICAgICAgRGVmaW5pdGlvbjogVG9nZ2xlcyB0aGUgZGV0ZWN0aW9uIG9mIFBDSSBwYXJpdHkgZXJyb3JzLgorICAgICAgICAgICAgICAgICAgICAgIE9uIG1hbnkgbW90aGVyYm9hcmRzIHdpdGggVklBIGNoaXBzZXRzLAorICAgICAgICAgICAgICAgICAgICAgIFBDSSBwYXJpdHkgaXMgbm90IGdlbmVyYXRlZCBjb3JyZWN0bHkgb24gdGhlCisgICAgICAgICAgICAgICAgICAgICAgUENJIGJ1cy4gIEl0IGlzIGltcG9zc2libGUgZm9yIHRoZSBoYXJkd2FyZSB0bworICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVudGlhdGUgYmV0d2VlbiB0aGVzZSAic3B1cmlvdXMiIHBhcml0eQorICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyBhbmQgcmVhbCBwYXJpdHkgZXJyb3JzLiAgVGhlIHN5bXB0b20gb2YKKyAgICAgICAgICAgICAgICAgICAgICB0aGlzIHByb2JsZW0gaXMgYSBzdHJlYW0gb2YgdGhlIG1lc3NhZ2U6CisgICAgInNjc2kwOiBEYXRhIFBhcml0eSBFcnJvciBEZXRlY3RlZCBkdXJpbmcgYWRkcmVzcyBvciB3cml0ZSBkYXRhIHBoYXNlIgorICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBieSB0aGUgZHJpdmVyLgorICAgICBQb3NzaWJsZSBWYWx1ZXM6IFRoaXMgb3B0aW9uIGlzIGEgdG9nZ2xlCisgICAgICAgRGVmYXVsdCBWYWx1ZTogUENJIFBhcml0eSBFcnJvciByZXBvcnRpbmcgaXMgZGlzYWJsZWQKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIE9wdGlvbjogbm9fcmVzZXQKKyAgICAgICAgICBEZWZpbml0aW9uOiBEbyBub3QgcmVzZXQgdGhlIGJ1cyBkdXJpbmcgdGhlIGluaXRpYWwgcHJvYmUKKyAgICAgICAgICAgICAgICAgICAgICBwaGFzZQorICAgICBQb3NzaWJsZSBWYWx1ZXM6IFRoaXMgb3B0aW9uIGlzIGEgZmxhZworICAgICAgIERlZmF1bHQgVmFsdWU6IGRpc2FibGVkCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IGV4dGVuZGVkCisgICAgICAgICAgRGVmaW5pdGlvbjogRm9yY2UgZXh0ZW5kZWQgdHJhbnNsYXRpb24gb24gdGhlIGNvbnRyb2xsZXIKKyAgICAgUG9zc2libGUgVmFsdWVzOiBUaGlzIG9wdGlvbiBpcyBhIGZsYWcKKyAgICAgICBEZWZhdWx0IFZhbHVlOiBkaXNhYmxlZAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgT3B0aW9uOiBwZXJpb2RpY19vdGFnCisgICAgICAgICAgRGVmaW5pdGlvbjogU2VuZCBhbiBvcmRlcmVkIHRhZyBwZXJpb2RpY2FsbHkgdG8gcHJldmVudAorICAgICAgICAgICAgICAgICAgICAgIHRhZyBzdGFydmF0aW9uLiAgTmVlZGVkIGZvciBzb21lIG9sZGVyIGRldmljZXMKKyAgICAgUG9zc2libGUgVmFsdWVzOiBUaGlzIG9wdGlvbiBpcyBhIGZsYWcKKyAgICAgICBEZWZhdWx0IFZhbHVlOiBkaXNhYmxlZAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgT3B0aW9uOiByZXZlcnNlX3NjYW4KKyAgICAgICAgICBEZWZpbml0aW9uOiBQcm9iZSB0aGUgc2NzaSBidXMgaW4gcmV2ZXJzZSBvcmRlciwgc3RhcnRpbmcKKyAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRhcmdldCAxNQorICAgICBQb3NzaWJsZSBWYWx1ZXM6IFRoaXMgb3B0aW9uIGlzIGEgZmxhZworICAgICAgIERlZmF1bHQgVmFsdWU6IGRpc2FibGVkCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IGdsb2JhbF90YWdfZGVwdGg6W3ZhbHVlXQorICAgICAgICAgIERlZmluaXRpb246IEdsb2JhbCB0YWcgZGVwdGggZm9yIGFsbCB0YXJnZXRzIG9uIGFsbCBidXNzZXMuCisgICAgICAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gc2V0cyB0aGUgZGVmYXVsdCB0YWcgZGVwdGggd2hpY2gKKyAgICAgICAgICAgICAgICAgICAgICBtYXkgYmUgc2VsZWN0aXZlbHkgb3ZlcnJpZGRlbiB2aSB0aGUgdGFnX2luZm8KKyAgICAgICAgICAgICAgICAgICAgICBvcHRpb24uCisgICAgIFBvc3NpYmxlIFZhbHVlczogMSAtIDI1MworICAgICAgIERlZmF1bHQgVmFsdWU6IDMyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IHRhZ19pbmZvOnt7dmFsdWVbLHZhbHVlLi4uXX1bLHt2YWx1ZVssdmFsdWUuLi5dfS4uLl19CisgICAgICAgICAgRGVmaW5pdGlvbjogU2V0IHRoZSBwZXItdGFyZ2V0IHRhZ2dlZCBxdWV1ZSBkZXB0aCBvbiBhCisgICAgICAgICAgICAgICAgICAgICAgcGVyIGNvbnRyb2xsZXIgYmFzaXMuICBCb3RoIGNvbnRyb2xsZXJzIGFuZCB0YXJnZXRzCisgICAgICAgICAgICAgICAgICAgICAgbWF5IGJlIG9tbWl0dGVkIGluZGljYXRpbmcgdGhhdCB0aGV5IHNob3VsZCByZXRhaW4KKyAgICAgICAgICAgICAgICAgICAgICB0aGUgZGVmYXVsdCB0YWcgZGVwdGguCisgICAgICAgICAgICBFeGFtcGxlczogdGFnX2luZm86e3sxNiwzMiwzMiw2NCw4LDgsLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyfQorICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciAwCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllcyBhIHRhZyBkZXB0aCBvZiAxNiBmb3IgdGFyZ2V0IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVzIGEgdGFnIGRlcHRoIG9mIDY0IGZvciB0YXJnZXQgMworICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgYSB0YWcgZGVwdGggb2YgOCBmb3IgdGFyZ2V0cyA0IGFuZCA1CisgICAgICAgICAgICAgICAgICAgICAgICAgIGxlYXZlcyB0YXJnZXQgNiBhdCB0aGUgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgYSB0YWcgZGVwdGggb2YgMzIgZm9yIHRhcmdldHMgMSwyLDctMTUKKyAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBvdGhlciB0YXJnZXRzIHJldGFpbiB0aGUgZGVmYXVsdCBkZXB0aC4KKworICAgICAgICAgICAgICAgICAgICAgIHRhZ19pbmZvOnt7fSx7MzIsLDMyfX0KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXMgYSB0YWcgZGVwdGggb2YgMzIgZm9yIHRhcmdldHMgMCBhbmQgMgorICAgICAgICAgICAgICAgICAgICAgICAgQWxsIG90aGVyIHRhcmdldHMgcmV0YWluIHRoZSBkZWZhdWx0IGRlcHRoLgorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgIFBvc3NpYmxlIFZhbHVlczogMSAtIDI1MworICAgICAgIERlZmF1bHQgVmFsdWU6IDMyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBPcHRpb246IHNlbHRpbWU6W3ZhbHVlXQorICAgICAgICAgIERlZmluaXRpb246IFNwZWNpZmllcyB0aGUgc2VsZWN0aW9uIHRpbWVvdXQgdmFsdWUKKyAgICAgUG9zc2libGUgVmFsdWVzOiAwID0gMjU2bXMsIDEgPSAxMjhtcywgMiA9IDY0bXMsIDMgPSAzMm1zCisgICAgICAgRGVmYXVsdCBWYWx1ZTogMAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgT3B0aW9uOiBkdjoge3ZhbHVlWyx2YWx1ZS4uLl19IAorICAgICAgICAgIERlZmluaXRpb246IFNldCBEb21haW4gVmFsaWRhdGlvbiBQb2xpY3kgb24gYSBwZXItY29udHJvbGxlciBiYXNpcy4KKyAgICAgICAgICAgICAgICAgICAgICBDb250cm9sbGVycyBtYXkgYmUgb21taXR0ZWQgaW5kaWNhdGluZyB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgdGhleSBzaG91bGQgcmV0YWluIHRoZSBkZWZhdWx0IHJlYWQgc3RyZWFtaW5nIHNldHRpbmcuCisgICAgICAgICAgICAgRXhhbXBsZTogZHY6ey0xLDAsLDEsMSwwfQorICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciAwIGxlYXZlIERWIGF0IGl0cyBkZWZhdWx0IHNldHRpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICBPbiBDb250cm9sbGVyIDEgZGlzYWJsZSBEVi4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNraXAgY29uZmlndXJhdGlvbiBvbiBDb250cm9sbGVyIDIuCisgICAgICAgICAgICAgICAgICAgICAgICBPbiBDb250cm9sbGVycyAzIGFuZCA0IGVuYWJsZSBEVi4KKyAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgNSBkaXNhYmxlIERWLgorCisgICAgIFBvc3NpYmxlIFZhbHVlczogPCAwIFVzZSBzZXR0aW5nIGZyb20gc2VyaWFsIEVFUFJPTS4KKyAgICAgICAgICAgICAgICAgICAgICAwIERpc2FibGUgRFYKKyAgICAgICAgICAgICAgICAgICAgICA+IDAgRW5hYmxlIERWCisKKyAgICAgICBEZWZhdWx0IFZhbHVlOiBTQ1NJLVNlbGVjdCBzZXR0aW5nIG9uIGNvbnRyb2xsZXJzIHdpdGggYSBTQ1NJIFNlbGVjdAorICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiBmb3IgRFYuICBPdGhlcndpc2UsIG9uIGZvciBjb250cm9sbGVycyBzdXBwb3J0aW5nCisgICAgICAgICAgICAgICAgICAgICAgVTE2MCBzcGVlZHMgYW5kIG9mZiBmb3IgYWxsIG90aGVyIGNvbnRyb2xsZXIgdHlwZXMuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBFeGFtcGxlOgorICAgJ29wdGlvbnMgYWljN3h4eCBhaWM3eHh4PXZlcmJvc2Usbm9fcHJvYmUsdGFnX2luZm86e3t9LHssLDEwfX0sc2VsdGltZToxIgorICAgICAgICBlbmFibGVzIHZlcmJvc2UgbG9nZ2luZywgRGlzYWJsZSBFSVNBL1ZMQiBwcm9iaW5nLAorICAgICAgICBhbmQgc2V0IHRhZyBkZXB0aCBvbiBDb250cm9sbGVyIDEvVGFyZ2V0IDIgdG8gMTAgdGFncy4KKworMy4gQ29udGFjdGluZyBBZGFwdGVjCisKKyAgIEEgVGVjaG5pY2FsIFN1cHBvcnQgSWRlbnRpZmljYXRpb24gKFRTSUQpIE51bWJlciBpcyByZXF1aXJlZCBmb3IgCisgICBBZGFwdGVjIHRlY2huaWNhbCBzdXBwb3J0LgorICAgIC0gVGhlIDEyLWRpZ2l0IFRTSUQgY2FuIGJlIGZvdW5kIG9uIHRoZSB3aGl0ZSBiYXJjb2RlLXR5cGUgbGFiZWwKKyAgICAgIGluY2x1ZGVkIGluc2lkZSB0aGUgYm94IHdpdGggeW91ciBwcm9kdWN0LiBUaGUgVFNJRCBoZWxwcyB1cyAKKyAgICAgIHByb3ZpZGUgbW9yZSBlZmZpY2llbnQgc2VydmljZSBieSBhY2N1cmF0ZWx5IGlkZW50aWZ5aW5nIHlvdXIgCisgICAgICBwcm9kdWN0IGFuZCBzdXBwb3J0IHN0YXR1cy4KKyAgIFN1cHBvcnQgT3B0aW9ucworICAgIC0gU2VhcmNoIHRoZSBBZGFwdGVjIFN1cHBvcnQgS25vd2xlZGdlYmFzZSAoQVNLKSBhdAorICAgICAgaHR0cDovL2Fzay5hZGFwdGVjLmNvbSBmb3IgYXJ0aWNsZXMsIHRyb3VibGVzaG9vdGluZyB0aXBzLCBhbmQKKyAgICAgIGZyZXF1ZW50bHkgYXNrZWQgcXVlc3Rpb25zIGZvciB5b3VyIHByb2R1Y3QuCisgICAgLSBGb3Igc3VwcG9ydCB2aWEgRW1haWwsIHN1Ym1pdCB5b3VyIHF1ZXN0aW9uIHRvIEFkYXB0ZWMncyAKKyAgICAgIFRlY2huaWNhbCBTdXBwb3J0IFNwZWNpYWxpc3RzIGF0IGh0dHA6Ly9hc2suYWRhcHRlYy5jb20uCisgICAgIAorICAgTm9ydGggQW1lcmljYQorICAgIC0gVmlzaXQgb3VyIFdlYiBzaXRlIGF0IGh0dHA6Ly93d3cuYWRhcHRlYy5jb20uCisgICAgLSBUbyBzcGVhayB3aXRoIGEgRmlicmUgQ2hhbm5lbC9SQUlEL0V4dGVybmFsIFN0b3JhZ2UgVGVjaG5pY2FsCisgICAgICBTdXBwb3J0IFNwZWNpYWxpc3QsIGNhbGwgMS0zMjEtMjA3LTIwMDAsCisgICAgICBIb3VyczogTW9uZGF5LUZyaWRheSwgMzowMCBBLk0uIHRvIDU6MDAgUC5NLiwgUFNULgorICAgICAgKE5vdCBvcGVuIG9uIGhvbGlkYXlzKQorICAgIC0gRm9yIFRlY2huaWNhbCBTdXBwb3J0IGluIGFsbCBvdGhlciB0ZWNobm9sb2dpZXMgaW5jbHVkaW5nIAorICAgICAgU0NTSSwgY2FsbCAxLTQwOC05MzQtNzI3NCwKKyAgICAgIEhvdXJzOiBNb25kYXktRnJpZGF5LCA2OjAwIEEuTS4gdG8gNTowMCBQLk0uLCBQU1QuCisgICAgICAoTm90IG9wZW4gb24gaG9saWRheXMpCisgICAgLSBGb3IgYWZ0ZXIgaG91cnMgc3VwcG9ydCwgY2FsbCAxLTgwMC00MTYtODA2NiAoJDk5L2NhbGwsIAorICAgICAgJDE0OS9jYWxsIG9uIGhvbGlkYXlzKQorICAgIC0gVG8gb3JkZXIgQWRhcHRlYyBwcm9kdWN0cyBpbmNsdWRpbmcgc29mdHdhcmUgYW5kIGNhYmxlcywgY2FsbAorICAgICAgMS04MDAtNDQyLTcyNzQgb3IgMS00MDgtOTU3LTcyNzQuIFlvdSBjYW4gYWxzbyB2aXNpdCBvdXIgCisgICAgICBvbmxpbmUgc3RvcmUgYXQgaHR0cDovL3d3dy5hZGFwdGVjc3RvcmUuY29tCisKKyAgIEV1cm9wZQorICAgIC0gVmlzaXQgb3VyIFdlYiBzaXRlIGF0IGh0dHA6Ly93d3cuYWRhcHRlYy1ldXJvcGUuY29tLgorICAgIC0gRW5nbGlzaCBhbmQgRnJlbmNoOiBUbyBzcGVhayB3aXRoIGEgVGVjaG5pY2FsIFN1cHBvcnQgCisgICAgICBTcGVjaWFsaXN0LCBjYWxsIG9uZSBvZiB0aGUgZm9sbG93aW5nIG51bWJlcnM6CisgICAgICAgIC0gRW5nbGlzaDogKzMyLTItMzUyLTM0NzAKKyAgICAgICAgLSBGcmVuY2g6ICArMzItMi0zNTItMzQ2MAorICAgICAgSG91cnM6IE1vbmRheS1UaHVyc2RheSwgMTA6MDAgdG8gMTI6MzAsIDEzOjMwIHRvIDE3OjMwIENFVCAKKyAgICAgICAgICAgICBGcmlkYXksIDEwOjAwIHRvIDEyOjMwLCAxMzozMCB0byAxNjozMCBDRVQKKyAgICAtIEdlcm1hbjogVG8gc3BlYWsgd2l0aCBhIFRlY2huaWNhbCBTdXBwb3J0IFNwZWNpYWxpc3QsCisgICAgICBjYWxsICs0OS04OS00NTYtNDA2NjAKKyAgICAgIEhvdXJzOiBNb25kYXktVGh1cnNkYXksIDA5OjMwIHRvIDEyOjMwLCAxMzozMCB0byAxNjozMCBDRVQKKyAgICAgICAgICAgICBGcmlkYXksIDA5OjMwIHRvIDEyOjMwLCAxMzozMCB0byAxNTowMCBDRVQKKyAgICAtIFRvIG9yZGVyIEFkYXB0ZWMgcHJvZHVjdHMsIGluY2x1ZGluZyBhY2Nlc3NvcmllcyBhbmQgY2FibGVzOgorICAgICAgICAtIFVLOiArMDgwMC05Ni02NS0yNiBvciBmYXggKzA4MDAtNzMxLTAyLTk1CisgICAgICAgIC0gT3RoZXIgRXVyb3BlYW4gY291bnRyaWVzOiArMzItMTEtMzAwLTM3OQorCisgICBBdXN0cmFsaWEgYW5kIE5ldyBaZWFsYW5kCisgICAgLSBWaXNpdCBvdXIgV2ViIHNpdGUgYXQgaHR0cDovL3d3dy5hZGFwdGVjLmNvbS5hdS4KKyAgICAtIFRvIHNwZWFrIHdpdGggYSBUZWNobmljYWwgU3VwcG9ydCBTcGVjaWFsaXN0LCBjYWxsIAorICAgICAgKzYxMi05NDE2LTA2OTgKKyAgICAgIEhvdXJzOiBNb25kYXktRnJpZGF5LCAxMDowMCBBLk0uIHRvIDQ6MzAgUC5NLiwgRUFUCisgICAgICAoTm90IG9wZW4gb24gaG9saWRheXMpCisKKyAgIEphcGFuCisgICAgLSBUbyBzcGVhayB3aXRoIGEgVGVjaG5pY2FsIFN1cHBvcnQgU3BlY2lhbGlzdCwgY2FsbCAKKyAgICAgICs4MS0zLTUzMDgtNjEyMCAKKyAgICAgIEhvdXJzOiBNb25kYXktRnJpZGF5LCA5OjAwIGEubS4gdG8gMTI6MDAgcC5tLiwgMTowMCBwLm0uIHRvCisgICAgICA2OjAwIHAubS4gVFNDCisKKyAgIEhvbmcgS29uZyBhbmQgQ2hpbmEKKyAgICAtIFRvIHNwZWFrIHdpdGggYSBUZWNobmljYWwgU3VwcG9ydCBTcGVjaWFsaXN0LCBjYWxsIAorICAgICAgKzg1Mi0yODY5LTcyMDAKKyAgICAgIEhvdXJzOiBNb25kYXktRnJpZGF5LCAxMDowMCB0byAxNzowMC4KKyAgICAtIEZheCBUZWNobmljYWwgU3VwcG9ydCBhdCArODUyLTI4NjktNzEwMC4KKworICAgU2luZ2Fwb3JlCisgICAgLSBUbyBzcGVhayB3aXRoIGEgVGVjaG5pY2FsIFN1cHBvcnQgU3BlY2lhbGlzdCwgY2FsbCAKKyAgICAgICs2NS0yNDUtNzQ3MAorICAgICAgSG91cnM6IE1vbmRheS1GcmlkYXksIDEwOjAwIHRvIDE3OjAwLgorICAgIC0gRmF4IFRlY2huaWNhbCBTdXBwb3J0IGF0ICs4NTItMjg2OS03MTAwCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgQWRhcHRlYyBJbmMuIDY5MSBTLiBNaWxwaXRhcyBCbHZkLiwgTWlscGl0YXMgQ0EgOTUwMzUgVVNBLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBZb3UgYXJlIHBlcm1pdHRlZCB0byByZWRpc3RyaWJ1dGUsIHVzZSBhbmQgbW9kaWZ5IHRoaXMgUkVBRE1FIGZpbGUgaW4gd2hvbGUKKyAqIG9yIGluIHBhcnQgaW4gY29uanVuY3Rpb24gd2l0aCByZWRpc3RyaWJ1dGlvbiBvZiBzb2Z0d2FyZSBnb3Zlcm5lZCBieSB0aGUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2YgUkVBRE1FIGZpbGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKyAqICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgorICogMi4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIDMuIE1vZGlmaWNhdGlvbnMgb3IgbmV3IGNvbnRyaWJ1dGlvbnMgbXVzdCBiZSBhdHRyaWJ1dGVkIGluIGEgY29weXJpZ2h0CisgKiAgICBub3RpY2UgaWRlbnRpZnlpbmcgdGhlIGF1dGhvciAoIkNvbnRyaWJ1dG9yIikgYW5kIGFkZGVkIGJlbG93IHRoZQorICogICAgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZS4gVGhlIGNvcHlyaWdodCBub3RpY2UgaXMgZm9yIHB1cnBvc2VzIG9mCisgKiAgICBpZGVudGlmeWluZyBjb250cmlidXRvcnMgYW5kIHNob3VsZCBub3QgYmUgZGVlbWVkIGFzIHBlcm1pc3Npb24gdG8gYWx0ZXIKKyAqICAgIHRoZSBwZXJtaXNzaW9ucyBnaXZlbiBieSBBZGFwdGVjLgorICoKKyAqIFRISVMgUkVBRE1FIEZJTEUgSVMgUFJPVklERUQgQlkgQURBUFRFQyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIEFOWQorICogV0FSUkFOVElFUyBPRiBOT04tSU5GUklOR0VNRU5UIE9SIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCisgKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBBREFQVEVDIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFJFQURNRQorICogRklMRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL2FpYzd4eHhfb2xkLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9haWM3eHh4X29sZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzllNWFjNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9haWM3eHh4X29sZC50eHQKQEAgLTAsMCArMSw1MTEgQEAKKwkJCSAgICBBSUM3eHh4IERyaXZlciBmb3IgTGludXgKKworSW50cm9kdWN0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgQUlDN3h4eCBTQ1NJIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIEFkYXB0ZWMgKGh0dHA6Ly93d3cuYWRhcHRlYy5jb20pCitTQ1NJIGNvbnRyb2xsZXJzIGFuZCBjaGlwc2V0cy4gTWFqb3IgcG9ydGlvbnMgb2YgdGhlIGRyaXZlciBhbmQgZHJpdmVyCitkZXZlbG9wbWVudCBhcmUgc2hhcmVkIGJldHdlZW4gYm90aCBMaW51eCBhbmQgRnJlZUJTRC4gU3VwcG9ydCBmb3IgdGhlCitBSUMtN3h4eCBjaGlwc2V0cyBoYXZlIGJlZW4gaW4gdGhlIGRlZmF1bHQgTGludXgga2VybmVsIHNpbmNlIGFwcHJveGltYXRlbHkKK2xpbnV4LTEuMS54IGFuZCBmYWlybHkgc3RhYmxlIHNpbmNlIGxpbnV4LTEuMi54LCBhbmQgYXJlIGFsc28gaW4gRnJlZUJTRAorMi4xLjAgb3IgbGF0ZXIuCisKKyAgU3VwcG9ydGVkIGNhcmRzL2NoaXBzZXRzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBBZGFwdGVjIENhcmRzCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIEFIQS0yNzR4CisgICAgQUhBLTI3NHhUICAgICAgICAgICAgICAgCisgICAgQUhBLTI4NDIKKyAgICBBSEEtMjkxMEIgICAgICAgICAgICAgICAKKyAgICBBSEEtMjkyMEMKKyAgICBBSEEtMjkzMAorICAgIEFIQS0yOTMwVQorICAgIEFIQS0yOTMwQ1UKKyAgICBBSEEtMjkzMFUyCisgICAgQUhBLTI5NDAgICAgICAgICAgICAgICAKKyAgICBBSEEtMjk0MFcgICAgICAgICAgICAgIAorICAgIEFIQS0yOTQwVSAgICAgICAgICAgICAgCisgICAgQUhBLTI5NDBVVworICAgIEFIQS0yOTQwVVctUFJPCisgICAgQUhBLTI5NDBBVSAKKyAgICBBSEEtMjk0MFUyVworICAgIEFIQS0yOTQwVTIKKyAgICBBSEEtMjk0MFUyQgorICAgIEFIQS0yOTQwVTJCT0VNCisgICAgQUhBLTI5NDREICAgICAgICAgICAgICAKKyAgICBBSEEtMjk0NFdECisgICAgQUhBLTI5NDRVRAorICAgIEFIQS0yOTQ0VVdECisgICAgQUhBLTI5NTBVMgorICAgIEFIQS0yOTUwVTJXCisgICAgQUhBLTI5NTBVMkIKKyAgICBBSEEtMjkxNjBNCisgICAgQUhBLTM5NDAKKyAgICBBSEEtMzk0MFUKKyAgICBBSEEtMzk0MFcKKyAgICBBSEEtMzk0MFVXCisgICAgQUhBLTM5NDBBVVcKKyAgICBBSEEtMzk0MFUyVworICAgIEFIQS0zOTUwVTJCCisgICAgQUhBLTM5NTBVMkQKKyAgICBBSEEtMzk2MEQKKyAgICBBSEEtMzkxNjBNCisgICAgQUhBLTM5ODUKKyAgICBBSEEtMzk4NVUKKyAgICBBSEEtMzk4NVcKKyAgICBBSEEtMzk4NVVXCisKKyAgICBNb3RoZXJib2FyZCBDaGlwc2V0cworICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBBSUMtNzc3eCAgIAorICAgIEFJQy03ODV4CisgICAgQUlDLTc4NngKKyAgICBBSUMtNzg3eAorICAgIEFJQy03ODh4CisgICAgQUlDLTc4OXgKKyAgICBBSUMtMzg2MAorCisgICAgQnVzIFR5cGVzCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFcgLSBXaWRlIFNDU0ksIFNDU0ktMywgMTZiaXQgYnVzLCA2OHBpbiBjb25uZWN0b3IsIHdpbGwgYWxzbyBzdXBwb3J0CisgICAgICAgIFNDU0ktMS9TQ1NJLTIgNTBwaW4gZGV2aWNlcywgdHJhbnNmZXIgcmF0ZXMgdXAgdG8gMjBNQi9zLgorICAgIFUgLSBVbHRyYSBTQ1NJLCB0cmFuc2ZlciByYXRlcyB1cCB0byA0ME1CL3MuCisgICAgVTItIFVsdHJhIDIgU0NTSSwgdHJhbnNmZXIgcmF0ZXMgdXAgdG8gODBNQi9zLgorICAgIEQgLSBEaWZmZXJlbnRpYWwgU0NTSS4KKyAgICBUIC0gVHdpbiBDaGFubmVsIFNDU0kuIFVwIHRvIDE0IFNDU0kgZGV2aWNlcy4KKworICAgIEFIQS0yNzR4IC0gRUlTQSBTQ1NJIGNvbnRyb2xsZXIKKyAgICBBSEEtMjg0eCAtIFZMQiBTQ1NJIGNvbnRyb2xsZXIKKyAgICBBSEEtMjl4eCAtIFBDSSBTQ1NJIGNvbnRyb2xsZXIKKyAgICBBSEEtMzk0eCAtIFBDSSBjb250cm9sbGVycyB3aXRoIHR3byBzZXBhcmF0ZSBTQ1NJIGNvbnRyb2xsZXJzIG9uLWJvYXJkLgorICAgIEFIQS0zOTh4IC0gUENJIFJBSUQgY29udHJvbGxlcnMgd2l0aCB0aHJlZSBzZXBhcmF0ZSBTQ1NJIGNvbnRyb2xsZXJzCisgICAgICAgICAgICAgICBvbi1ib2FyZC4KKworICBOb3QgU3VwcG9ydGVkIERldmljZXMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgQWRhcHRlYyBDYXJkcworICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBBSEEtMjkyMCAoT25seSB0aGUgY2FyZHMgdGhhdCB1c2UgdGhlIEZ1dHVyZSBEb21haW4gY2hpcHNldCBhcmUgbm90CisgICAgICAgICAgICAgIHN1cHBvcnRlZCwgYW55IDI5MjAgY2FyZHMgYmFzZWQgb24gQWRhcHRlYyBBSUMgY2hpcHNldHMsCisJICAgICAgc3VjaCBhcyB0aGUgMjkyMEMsIGFyZSBzdXBwb3J0ZWQpCisgICAgQUFBLTEzeCBSYWlkIEFkYXB0ZXJzCisgICAgQUFBLTExM3ggUmFpZCBQb3J0IENhcmQKKworICAgIE1vdGhlcmJvYXJkIENoaXBzZXRzCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIEFJQy03ODEwCisKKyAgICBCdXMgVHlwZXMKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgUiAtIFJhaWQgUG9ydCBidXNzZXMgYXJlIG5vdCBzdXBwb3J0ZWQuCisKKyAgICBUaGUgaGFyZHdhcmUgUkFJRCBkZXZpY2VzIHNvbGQgYnkgQWRhcHRlYyBhcmUgKk5PVCogc3VwcG9ydGVkIGJ5IHRoaXMKKyAgICBkcml2ZXIgKGFuZCB3aWxsIHBlb3BsZSBwbGVhc2Ugc3RvcCBlbWFpbGluZyBtZSBhYm91dCB0aGVtLCB0aGV5IGFyZQorICAgIGEgdG90YWxseSBzZXBhcmF0ZSBiZWFzdCBmcm9tIHRoZSBiYXJlIFNDU0kgY29udHJvbGxlcnMgYW5kIHRoaXMgZHJpdmVyCisgICAgY2FuIG5vdCBiZSByZXRyb2ZpdHRlZCBpbiBhbnkgc2FuZSBtYW5uZXIgdG8gc3VwcG9ydCB0aGUgaGFyZHdhcmUgUkFJRAorICAgIGZlYXR1cmVzIG9uIHRob3NlIGNhcmRzIC0gRG91ZyBMZWRmb3JkKS4KKyAgICAKKworICBQZW9wbGUKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgSnVzdGluIFQgR2liYnMgIGdpYmJzQHBsdXRvdGVjaC5jb20KKyAgICAgIChCU0QgRHJpdmVyIEF1dGhvcikKKyAgICBEYW4gRWlzY2hlbiAgICAgZGVpc2NoZW5AaXdvcmtzLkludGVyV29ya3Mub3JnCisgICAgICAoT3JpZ2luYWwgTGludXggRHJpdmVyIENvLW1haW50YWluZXIpCisgICAgRGVhbiBHZWhuZXJ0ICAgIGRlYW5nQHRlbGVwb3J0LmNvbQorICAgICAgKE9yaWdpbmFsIExpbnV4IEZUUC9wYXRjaCBtYWludGFpbmVyKQorICAgIEplc3MgSm9obnNvbiAgICBqZXN0ZXJAZnJlbnp5LmNvbQorICAgICAgKEFJQzd4eHggRkFRIGF1dGhvcikKKyAgICBEb3VnIExlZGZvcmQgICAgZGxlZGZvcmRAcmVkaGF0LmNvbQorICAgICAgKEN1cnJlbnQgTGludXggYWljN3h4eC01LngueCBEcml2ZXIvUGF0Y2gvRlRQIG1haW50YWluZXIpCisgICAgCisgICAgU3BlY2lhbCB0aGFua3MgZ28gdG8gSm9obiBBeWNvY2sgKGF5Y29ja0BjcHNjLnVjYWxnYXJ5LmNhKSwgdGhlIG9yaWdpbmFsCisgICAgYXV0aG9yIG9mIHRoZSBkcml2ZXIuIEpvaG4gaGFzIHNpbmNlIHJldGlyZWQgZnJvbSB0aGUgcHJvamVjdC4gVGhhbmtzCisgICAgYWdhaW4gZm9yIGFsbCBoaXMgd29yayEKKyAgICAKKyAgTWFpbGluZyBsaXN0CisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFRoZXJlIGlzIGEgbWFpbGluZyBsaXN0IGF2YWlsYWJsZSBmb3IgdXNlcnMgd2hvIHdhbnQgdG8gdHJhY2sgZGV2ZWxvcG1lbnQKKyAgICBhbmQgY29udmVyc2Ugd2l0aCBvdGhlciB1c2VycyBhbmQgZGV2ZWxvcGVycy4gVGhpcyBsaXN0IGlzIGZvciBib3RoCisgICAgRnJlZUJTRCBhbmQgTGludXggc3VwcG9ydCBvZiB0aGUgQUlDN3h4eCBjaGlwc2V0cy4KKworICAgIFRvIHN1YnNjcmliZSB0byB0aGUgQUlDN3h4eCBtYWlsaW5nIGxpc3Qgc2VuZCBtYWlsIHRvIHRoZSBsaXN0IHNlcnZlciwKKyAgICB3aXRoICJzdWJzY3JpYmUgQUlDN3h4eCIgaW4gdGhlIGJvZHkgKG5vIFN1YmplY3Q6IHJlcXVpcmVkKToKKyAgICAgICAgVG86IG1ham9yZG9tb0BGcmVlQlNELk9SRworICAgICAgICAtLS0KKyAgICAgICAgc3Vic2NyaWJlIEFJQzd4eHgKKworICAgIFRvIHVuc3Vic2NyaWJlIGZyb20gdGhlIGxpc3QsIHNlbmQgbWFpbCB0byB0aGUgbGlzdCBzZXJ2ZXIgd2l0aDoKKyAgICAgICAgVG86IG1ham9yZG9tb0BGcmVlQlNELk9SRworICAgICAgICAtLS0KKyAgICAgICAgdW5zdWJzY3JpYmUgQUlDN3h4eAorCisgICAgU2VuZCByZWd1bGFyIG1lc3NhZ2VzIGFuZCByZXBsaWVzIHRvOiBBSUM3eHh4QEZyZWVCU0QuT1JHCisgICAgCisgIEJvb3QgQ29tbWFuZCBsaW5lIG9wdGlvbnMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgImFpYzd4eHg9bm9fcmVzZXQiIC0gIEVsaW1pbmF0ZSB0aGUgU0NTSSBidXMgcmVzZXQgZHVyaW5nIHN0YXJ0dXAuCisgICAgICAgIFNvbWUgU0NTSSBkZXZpY2VzIG5lZWQgdGhlIGluaXRpYWwgcmVzZXQgdGhhdCB0aGlzIG9wdGlvbiBkaXNhYmxlcworCWluIG9yZGVyIHRvIHdvcmsuICBJZiB5b3UgaGF2ZSBwcm9ibGVtcyBhdCBib290dXAsIHBsZWFzZSBtYWtlIHN1cmUKKwl5b3UgYXJlbid0IHVzaW5nIHRoaXMgb3B0aW9uLgorCQorICAgICJhaWM3eHh4PXJldmVyc2Vfc2NhbiIgLSBDZXJ0YWluIFBDSSBtb3RoZXJib2FyZHMgc2NhbiBmb3IgZGV2aWNlcyBhdAorICAgICAgICBib290dXAgYnkgc2Nhbm5pbmcgZnJvbSB0aGUgaGlnaGVzdCBudW1iZXJlZCBQQ0kgZGV2aWNlIHRvIHRoZQorCWxvd2VzdCBudW1iZXJlZCBQQ0kgZGV2aWNlLCBvdGhlcnMgZG8ganVzdCB0aGUgb3Bwb3NpdGUgYW5kIHNjYW4KKwlmcm9tIGxvd2VzdCB0byBoaWdoZXN0IG51bWJlcmVkIFBDSSBkZXZpY2UuICBUaGVyZSBpcyBubyByZWxpYWJsZQorCXdheSB0byBhdXRvZGV0ZWN0IHRoaXMgb3JkZXJpbmcuICBTbywgd2UgZGVmYXVsdCB0byB0aGUgbW9zdCBjb21tb24KKwlvcmRlciwgd2hpY2ggaXMgbG93ZXN0IHRvIGhpZ2hlc3QuICBUaGVuLCBpbiBjYXNlIHlvdXIgbW90aGVyYm9hcmQKKwlzY2FucyBmcm9tIGhpZ2hlc3QgdG8gbG93ZXN0LCB3ZSBoYXZlIHRoaXMgb3B0aW9uLiAgSWYgeW91ciBCSU9TCisJZmluZHMgdGhlIGRyaXZlcyBvbiBjb250cm9sbGVyIEEgYmVmb3JlIGNvbnRyb2xsZXIgQiBidXQgdGhlIGxpbnV4CisJa2VybmVsIGZpbmRzIHlvdXIgZHJpdmVzIG9uIGNvbnRyb2xsZXIgQiBiZWZvcmUgQSwgdGhlbiB5b3Ugc2hvdWxkCisJdXNlIHRoaXMgb3B0aW9uLgorCQorICAgICJhaWM3eHh4PWV4dGVuZGVkIiAtIEZvcmNlIHRoZSBkcml2ZXIgdG8gZGV0ZWN0IGV4dGVuZGVkIGRyaXZlIHRyYW5zbGF0aW9uCisgICAgICAgIG9uIHlvdXIgY29udHJvbGxlci4gIFRoaXMgaGVscHMgdGhvc2UgcGVvcGxlIHdobyBoYXZlIGNhcmRzIHdpdGhvdXQKKyAgICAgICAgYSBTRUVQUk9NIG1ha2Ugc3VyZSB0aGF0IGxpbnV4IGFuZCBhbGwgb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMgdGhpbmsKKyAgICAgICAgdGhlIHNhbWUgd2F5IGFib3V0IHlvdXIgaGFyZCBkcml2ZXMuCisKKyAgICAiYWljN3h4eD1zY2JyYW0iIC0gU29tZSBjYXJkcyBoYXZlIGV4dGVybmFsIFNDQiBSQU0gdGhhdCBjYW4gYmUgdXNlZCB0bworICAgICAgICBnaXZlIHRoZSBjYXJkIG1vcmUgaGFyZHdhcmUgU0NCIHNsb3RzLiAgVGhpcyBhbGxvd3MgdGhlIGRyaXZlciB0byB1c2UKKwl0aGF0IFNDQiBSQU0uICBXaXRob3V0IHRoaXMgb3B0aW9uLCB0aGUgZHJpdmVyIHdvbid0IHRvdWNoIHRoZSBTQ0IKKwlSQU0gYmVjYXVzZSBpdCBpcyBrbm93biB0byBjYXVzZSBwcm9ibGVtcyBvbiBhIGZldyBjYXJkcyBvdXQgdGhlcmUKKwkoc3VjaCBhcyAzOTg1IGNsYXNzIGNhcmRzKS4KKwkKKyAgICAiYWljN3h4eD1pcnFfdHJpZ2dlcjp4IiAtIFJlcGxhY2UgeCB3aXRoIGVpdGhlciAwIG9yIDEgdG8gZm9yY2UgdGhlIGtlcm5lbAorICAgICAgICB0byB1c2UgdGhlIGNvcnJlY3QgSVJRIHR5cGUgZm9yIHlvdXIgY2FyZC4gIFRoaXMgb25seSBhcHBsaWVzIHRvIEVJU0EKKyAgICAgICAgYmFzZWQgY29udHJvbGxlcnMuICBPbiB0aGVzZSBjb250cm9sbGVycywgMCBpcyBmb3IgRWRnZSB0cmlnZ2VyZWQKKyAgICAgICAgaW50ZXJydXB0cywgYW5kIDEgaXMgZm9yIExldmVsIHRyaWdnZXJlZCBpbnRlcnJ1cHRzLiAgSWYgeW91IGFyZW4ndAorICAgICAgICBzdXJlIG9yIGRvbid0IGtub3cgd2hpY2ggSVJRIHRyaWdnZXIgdHlwZSB5b3VyIEVJU0EgY2FyZCB1c2VzLCB0aGVuCisgICAgICAgIGxldCB0aGUga2VybmVsIGF1dG9kZXRlY3QgdGhlIHRyaWdnZXIgdHlwZS4KKwkKKyAgICAiYWljN3h4eD12ZXJib3NlIiAtIFRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIGluIG9uZSBvZiB0d28gd2F5cy4gIElmIHlvdQorICAgICAgICBzaW1wbHkgc3BlY2lmeSBhaWM3eHh4PXZlcmJvc2UsIHRoZW4gdGhlIGtlcm5lbCB3aWxsIGF1dG9tYXRpY2FsbHkKKwlwaWNrIHRoZSBkZWZhdWx0IHNldCBvZiB2ZXJib3NlIG1lc3NhZ2VzIGZvciB5b3UgdG8gc2VlLgorCUFsdGVybmF0aXZlbHksIHlvdSBjYW4gc3BlY2lmeSB0aGUgY29tbWFuZCBhcyAKKwkiYWljN3h4eD12ZXJib3NlOjB4WFhYWCIgd2hlcmUgdGhlIFggZW50cmllcyBhcmUgcmVwbGFjZWQgd2l0aAorCWhleGFkZWNpbWFsIGRpZ2l0cy4gIFRoaXMgb3B0aW9uIGlzIGEgYml0IGZpZWxkIHR5cGUgb3B0aW9uLiAgRm9yCisJYSBmdWxsIGxpc3Rpbmcgb2YgdGhlIGF2YWlsYWJsZSBvcHRpb25zLCBzZWFyY2ggZm9yIHRoZSAKKwkjZGVmaW5lIFZFUkJPU0VfeHh4eHh4IGxpbmVzIGluIHRoZSBhaWM3eHh4LmMgZmlsZS4gIElmIHlvdSB3YW50CisJdmVyYm9zZSBtZXNzYWdlcywgdGhlbiBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBzaW1wbHkgdXNlIHRoZQorCWFpYzd4eHg9dmVyYm9zZSB2YXJpYW50IG9mIHRoaXMgY29tbWFuZC4KKwkKKyAgICAiYWljN3h4eD1wY2lfcGFyaXR5OngiIC0gVGhpcyBvcHRpb24gY29udHJvbHMgd2hldGhlciBvciBub3QgdGhlIGRyaXZlcgorICAgICAgICBlbmFibGVzIFBDSSBwYXJpdHkgZXJyb3IgY2hlY2tpbmcgb24gdGhlIFBDSSBidXMuICBCeSBkZWZhdWx0LCB0aGlzCisgICAgICAgIGNoZWNraW5nIGlzIGRpc2FibGVkLiAgVG8gZW5hYmxlIHRoZSBjaGVja3MsIHNpbXBseSBzcGVjaWZ5IHBjaV9wYXJpdHkKKyAgICAgICAgd2l0aCBubyB2YWx1ZSBhZnRlcndvcmRzLiAgVG8gcmV2ZXJzZSB0aGUgcGFyaXR5IGZyb20gZXZlbiB0byBvZGQsCisgICAgICAgIHN1cHBseSBhbnkgbnVtYmVyIG90aGVyIHRoYW4gMCBvciAyNTUuICBJbiBzaG9ydDoKKyAgICAgICAgICBwY2lfcGFyaXR5ICAgICAtIEV2ZW4gcGFyaXR5IGNoZWNraW5nIChldmVuIGlzIHRoZSBub3JtYWwgUENJIHBhcml0eSkKKyAgICAgICAgICBwY2lfcGFyaXR5OnggICAtIFdoZXJlIHggPiAwLCBPZGQgcGFyaXR5IGNoZWNraW5nCisgICAgICAgICAgcGNpX3Bhcml0eTowICAgLSBObyBjaGVjayAoZGVmYXVsdCkKKyAgICAgICAgTk9URTogSW4gb3JkZXIgdG8gZ2V0IEV2ZW4gUENJIHBhcml0eSBjaGVja2luZywgeW91IG11c3QgdXNlIHRoZQorICAgICAgICB2ZXJzaW9uIG9mIHRoZSBvcHRpb24gdGhhdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSA6IGFuZCBhIG51bWJlciBhdAorICAgICAgICB0aGUgZW5kICh1bmxlc3MgeW91IHdhbnQgdG8gZW50ZXIgZXhhY3RseSAyXjMyIC0gMSBhcyB0aGUgbnVtYmVyKS4KKwkKKyAgICAiYWljN3h4eD1ub19wcm9iZSIgLSBUaGlzIG9wdGlvbiB3aWxsIGRpc2FibGUgdGhlIHByb2JpbmcgZm9yIGFueSBWTEIKKyAgICAgICAgYmFzZWQgMjg0MiBjb250cm9sbGVycyBhbmQgYW55IEVJU0EgYmFzZWQgY29udHJvbGxlcnMuICBUaGlzIGlzCisJbmVlZGVkIG9uIGNlcnRhaW4gbmV3ZXIgbW90aGVyYm9hcmRzIHdoZXJlIHRoZSBub3JtYWwgRUlTQSBJL08gcmFuZ2VzCisJaGF2ZSBiZWVuIGNsYWltZWQgYnkgb3RoZXIgUENJIGRldmljZXMuICBQcm9iaW5nIG9uIHRob3NlIG1hY2hpbmVzCisJd2lsbCBvZnRlbiByZXN1bHQgaW4gdGhlIG1hY2hpbmUgY3Jhc2hpbmcgb3Igc3BvbnRhbmVvdXNseSByZWJvb3RpbmcKKwlkdXJpbmcgc3RhcnR1cC4gIEV4YW1wbGVzIG9mIG1hY2hpbmVzIHRoYXQgbmVlZCB0aGlzIGFyZSB0aGUKKwlEZWxsIFBvd2VyRWRnZSA2MzAwIG1hY2hpbmVzLgorCisgICAgImFpYzd4eHg9c2VsdGltZToyIiAtIFRoaXMgb3B0aW9uIGNvbnRyb2xzIGhvdyBsb25nIHRoZSBjYXJkIHdhaXRzCisgICAgICAgIGR1cmluZyBhIGRldmljZSBzZWxlY3Rpb24gc2VxdWVuY2UgZm9yIHRoZSBkZXZpY2UgdG8gcmVzcG9uZC4KKwlUaGUgb3JpZ2luYWwgU0NTSSBzcGVjIHNheXMgdGhhdCB0aGlzICJzaG91bGQgYmUiIDI1Nm1zLiAgVGhpcworCWlzIGdlbmVyYWxseSBub3QgcmVxdWlyZWQgd2l0aCBtb2Rlcm4gZGV2aWNlcy4gIEhvd2V2ZXIsIHNvbWUKKwl2ZXJ5IG9sZCBTQ1NJIEkgZGV2aWNlcyBuZWVkIHRoZSBmdWxsIDI1Nm1zLiAgTW9zdCBtb2Rlcm4gZGV2aWNlcworCWNhbiBydW4gZmluZSB3aXRoIG9ubHkgNjRtcy4gIFRoZSBkZWZhdWx0IGZvciB0aGlzIG9wdGlvbiBpcworCTY0bXMuICBJZiB5b3UgbmVlZCB0byBjaGFuZ2UgdGhpcyBvcHRpb24sIHRoZW4gdXNlIHRoZSBmb2xsb3dpbmcKKwl0YWJsZSB0byBzZXQgdGhlIHByb3BlciB2YWx1ZSBpbiB0aGUgZXhhbXBsZSBhYm92ZToKKwkgIDAgIC0gIDI1Nm1zCisJICAxICAtICAxMjhtcworCSAgMiAgLSAgIDY0bXMKKwkgIDMgIC0gICAzMm1zCisJCisgICAgImFpYzd4eHg9cGFuaWNfb25fYWJvcnQiIC0gVGhpcyBvcHRpb24gaXMgZm9yIGRlYnVnZ2luZyBhbmQgd2lsbCBjYXVzZQorICAgICAgICB0aGUgZHJpdmVyIHRvIHBhbmljIHRoZSBsaW51eCBrZXJuZWwgYW5kIGZyZWV6ZSB0aGUgc3lzdGVtIHRoZSBmaXJzdAorCXRpbWUgdGhlIGRyaXZlcnMgYWJvcnQgb3IgcmVzZXQgcm91dGluZXMgYXJlIGNhbGxlZC4gIFRoaXMgaXMgbW9zdAorCWhlbHBmdWwgd2hlbiBzb21lIHByb2JsZW0gY2F1c2VzIGluZmluaXRlIHJlc2V0IGxvb3BzIHRoYXQgc2Nyb2xsIHRvbworCWZhc3QgdG8gc2VlLiAgQnkgdXNpbmcgdGhpcyBvcHRpb24sIHlvdSBjYW4gd3JpdGUgZG93biB3aGF0IHRoZSBlcnJvcnMKKwlhY3R1YWxseSBhcmUgYW5kIHNlbmQgdGhhdCBpbmZvcm1hdGlvbiB0byBtZSBzbyBpdCBjYW4gYmUgZml4ZWQuCisJCisgICAgImFpYzd4eHg9ZHVtcF9jYXJkIiAtIFRoaXMgb3B0aW9uIHdpbGwgcHJpbnQgb3V0IHRoZSAqZW50aXJlKiBzZXQgb2YKKyAgICAgICAgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgb24gdGhlIGNhcmQgZHVyaW5nIHRoZSBpbml0IHNlcXVlbmNlLiAgVGhpcworCWlzIGEgZGVidWdnaW5nIGFpZCB1c2VkIHRvIHNlZSBleGFjdGx5IHdoYXQgc3RhdGUgdGhlIGNhcmQgaXMgaW4KKwl3aGVuIHdlIGZpbmFsbHkgZmluaXNoIG91ciBpbml0aWFsaXphdGlvbiByb3V0aW5lcy4gIElmIHlvdSBkb24ndAorCWhhdmUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgY2hpcHNldHMsIHRoaXMgd2lsbCBkbyB5b3UgYWJzb2x1dGVseQorCW5vIGdvb2QgdW5sZXNzIHlvdSBhcmUgc2ltcGx5IHRyeWluZyB0byB3cml0ZSBhbGwgdGhlIGluZm9ybWF0aW9uCisJZG93biBpbiBvcmRlciB0byBzZW5kIGl0IHRvIG1lLgorCQorICAgICJhaWM3eHh4PWR1bXBfc2VxdWVuY2VyIiAtIFRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIGFib3ZlIG9wdGlvbnMgZXhjZXB0CisgICAgICAgIHRoYXQgaW5zdGVhZCBvZiBkdW1waW5nIHRoZSByZWdpc3RlciBjb250ZW50cyBvbiB0aGUgY2FyZCwgdGhpcworCW9wdGlvbiBkdW1wcyB0aGUgY29udGVudHMgb2YgdGhlIHNlcXVlbmNlciBwcm9ncmFtIFJBTS4gIFRoaXMgZ2l2ZXMKKwl0aGUgYWJpbGl0eSB0byB2ZXJpZnkgdGhhdCB0aGUgaW5zdHJ1Y3Rpb25zIGRvd25sb2FkZWQgdG8gdGhlCisJY2FyZCdzIHNlcXVlbmNlciBhcmUgaW5kZWVkIHdoYXQgdGhleSBhcmUgc3VwcG9zc2VkIHRvIGJlLiAgQWdhaW4sCisJdW5sZXNzIHlvdSBoYXZlIGRvY3VtZW50YXRpb24gdG8gdGVsbCB5b3UgaG93IHRvIGludGVycHJldCB0aGVzZQorCW51bWJlcnMsIHRoZW4gaXQgaXMgdG90YWxseSB1c2VsZXNzLgorCQorICAgICJhaWM3eHh4PW92ZXJyaWRlX3Rlcm06MHhmZmZmZmZmZiIgLSBUaGlzIG9wdGlvbiBpcyB1c2VkIHRvIGZvcmNlIHRoZQorICAgIAl0ZXJtaW5hdGlvbiBvbiB5b3VyIFNDU0kgY29udHJvbGxlcnMgdG8gYSBwYXJ0aWN1bGFyIHNldHRpbmcuICBUaGlzCisJaXMgYSBiaXQgbWFzayB2YXJpYWJsZSB0aGF0IGFwcGxpZXMgZm9yIHVwIHRvIDggYWljN3h4eCBTQ1NJIGNoYW5uZWxzLgorCUVhY2ggY2hhbm5lbCBnZXRzIDQgYml0cywgZGl2aWRlZCBhcyBmb2xsb3dzOgorCWJpdCAgIDMgICAyICAgMSAgIDAKKwkgICAgICB8ICAgfCAgIHwgICBFbmFibGUvRGlzYWJsZSBTaW5nbGUgRW5kZWQgTG93IEJ5dGUgVGVybWluYXRpb24KKwkgICAgICB8ICAgfCAgIEVuL0Rpc2FibGUgU2luZ2xlIEVuZGVkIEhpZ2ggQnl0ZSBUZXJtaW5hdGlvbgorCSAgICAgIHwgICBFbi9EaXNhYmxlIExvdyBCeXRlIExWRCBUZXJtaW5hdGlvbgorCSAgICAgIEVuL0Rpc2FibGUgSGlnaCBCeXRlIExWRCBUZXJtaW5hdGlvbgorCisJVGhlIHVwcGVyIDIgYml0cyB0aGF0IGRlYWwgd2l0aCBMVkQgdGVybWluYXRpb24gb25seSBhcHBseSB0byBVbHRyYTIKKwljb250cm9sbGVycy4gIEZ1dGhlcm1vcmUsIGR1ZSB0byB0aGUgY3VycmVudCBVbHRyYTIgY29udHJvbGxlcgorCWRlc2lnbnMsIHRoZXNlIGJpdHMgYXJlIHRpZWQgdG9nZXRoZXIgc3VjaCB0aGF0IHNldHRpbmcgZWl0aGVyIGJpdAorCWVuYWJsZXMgYm90aCBsb3cgYW5kIGhpZ2ggYnl0ZSBMVkQgdGVybWluYXRpb24uICBJdCBpcyBub3QgcG9zc2libGUKKwl0byBvbmx5IHNldCBoaWdoIG9yIGxvdyBieXRlIExWRCB0ZXJtaW5hdGlvbiBpbiB0aGlzIG1hbm5lci4gIFRoaXMgaXMKKwlhbiBhcnRpZmFjdCBvZiB0aGUgQklPUyBkZWZpbml0aW9uIG9uIFVsdHJhMiBjb250cm9sbGVycy4gIEZvciBvdGhlcgorCWNvbnRyb2xsZXJzLCB0aGUgb25seSBpbXBvcnRhbnQgYml0cyBhcmUgdGhlIHR3byBsb3dlc3QgYml0cy4gIFNldHRpbmcKKwl0aGUgaGlnaGVyIGJpdHMgb24gbm9uLVVsdHJhMiBjb250cm9sbGVycyBoYXMgbm8gZWZmZWN0LiAgQSBmZXcKKwlleGFtcGxlcyBvZiBob3cgdG8gdXNlIHRoaXMgb3B0aW9uOgorCisJRW5hYmxlIGxvdyBhbmQgaGlnaCBieXRlIHRlcm1pbmF0aW9uIG9uIGEgbm9uLXVsdHJhMiBjb250cm9sbGVyIHRoYXQKKwlpcyB0aGUgZmlyc3QgYWljN3h4eCBjb250cm9sbGVyICh0aGUgY29ycmVjdCBiaXRzIGFyZSAwMDExKSwgCisJYWljN3h4eD1vdmVycmlkZV90ZXJtOjB4MworCisJRW5hYmxlIGFsbCB0ZXJtaW5hdGlvbiBvbiB0aGUgdGhpcmQgYWljN3h4eCBjb250cm9sbGVyLCBoaWdoIGJ5dGUKKwl0ZXJtaW5hdGlvbiBvbiB0aGUgc2Vjb25kIGFpYzd4eHggY29udHJvbGxlciwgYW5kIGxvdyBhbmQgaGlnaCBieXRlCisJU0UgdGVybWluYXRpb24gb24gdGhlIGZpcnN0IGFpYzd4eHggY29udHJvbGxlciAKKwkoYml0cyBhcmUgMTExMSAwMDEwIDAwMTEpLCAKKwlhaWM3eHh4PW92ZXJyaWRlX3Rlcm06MHhmMjMKKwkKKwlObyBhdHRlbXB0IGhhcyBiZWVuIG1hZGUgdG8gbWFrZSB0aGlzIG9wdGlvbiBub24tY3J5cHRpYy4gIEl0IHJlYWxseQorCXNob3VsZG4ndCBiZSB1c2VkIGV4Y2VwdCBpbiBkaXJlIGNpcmN1bXN0YW5jZXMsIGFuZCBpZiB0aGF0IGhhcHBlbnMsCisJSSdtIHByb2JhYmx5IGdvaW5nIHRvIGJlIHRlbGxpbmcgeW91IHdoYXQgdG8gc2V0IHRoaXMgdG8gYW55d2F5IDopCisKKyAgICAiYWljN3h4eD1zdHB3bGV2OjB4ZmZmZmZmZmYiIC0gVGhpcyBvcHRpb24gaXMgdXNlZCB0byBjb250cm9sIHRoZSBTVFBXTEVWCisgICAgICAgIGJpdCBpbiB0aGUgREVWQ09ORklHIFBDSSByZWdpc3Rlci4gIEN1cnJlbnRseSwgdGhpcyBpcyBvbmUgb2YgdGhlCisJdmVyeSBmZXcgcmVnaXN0ZXJzIHRoYXQgd2UgaGF2ZSBhYnNvbHV0ZWx5ICpubyogd2F5IG9mIGRldGVjdGluZworCXdoYXQgdGhlIHZhcmlhYmxlIHNob3VsZCBiZS4gIEl0IGRlcGVuZHMgZW50aXJlbHkgb24gaG93IHRoZSBjaGlwc2V0CisJYW5kIGV4dGVybmFsIHRlcm1pbmF0b3JzIHdlcmUgY291cGxlZCBieSB0aGUgY2FyZC9tb3RoZXJib2FyZCBtYWtlci4KKwlGdXJ0aGVyLCBhIGNoaXAgcmVzZXQgKGF0IHBvd2VyIHVwKSBhbHdheXMgc2V0cyB0aGlzIGJpdCB0byAwLiAgSWYKKwl0aGVyZSBpcyBubyBCSU9TIHRvIHJ1biBvbiB0aGUgY2hpcHNldC9jYXJkIChzdWNoIGFzIHdpdGggYSAyOTEwQworCW9yIGEgbW90aGVyYm9hcmQgY29udHJvbGxlciB3aXRoIHRoZSBCSU9TIHRvdGFsbHkgZGlzYWJsZWQpIHRoZW4KKwl0aGUgdmFyaWFibGUgbWF5IG5vdCBnZXQgc2V0IHByb3Blcmx5LiAgT2YgY291cnNlLCBpZiB0aGUgcHJvcGVyCisJc2V0dGluZyB3YXMgMCwgdGhlbiB0aGF0J3Mgd2hhdCBpdCB3b3VsZCBiZSBhZnRlciB0aGUgcmVzZXQsIGJ1dCBpZgorCXRoZSBwcm9wZXIgc2V0dGluZyBpcyBhY3R1YWxseSAxLi4uLi55b3UgZ2V0IHRoZSBwaWN0dXJlLiAgTm93LCBzaW5jZQorCXdlIGNhbid0IGRldGVjdCB0aGlzIGF0IGFsbCwgSSd2ZSBhZGRlZCB0aGlzIG9wdGlvbiB0byBmb3JjZSB0aGUKKwlzZXR0aW5nLiAgSWYgeW91IGhhdmUgYSBCSU9TIG9uIHlvdXIgY29udHJvbGxlciB0aGVuIHlvdSBzaG91bGQgbmV2ZXIKKwluZWVkIHRvIHVzZSB0aGlzIG9wdGlvbi4gIEhvd2V2ZXIsIGlmIHlvdSBhcmUgaGF2aW5nIGxvdHMgb2YgU0NTSQorCXJlc2V0IHByb2JsZW1zIGFuZCBjYW4ndCBzZWVtIHRvIGdldCB0aGVtIGtub2NrZWQgb3V0LCB0aGlzIG1heSBoZWxwLgorCisJSGVyZSdzIGEgdGVzdCB0byBrbm93IGZvciBjZXJ0YWluIGlmIHlvdSBuZWVkIHRoaXMgb3B0aW9uLiAgTWFrZQorCWEgYm9vdCBmbG9wcHkgdGhhdCB5b3UgY2FuIHVzZSB0byBib290IHlvdXIgY29tcHV0ZXIgdXAgYW5kIHRoYXQKKwl3aWxsIGRldGVjdCB0aGUgYWljN3h4eCBjb250cm9sbGVyLiAgTmV4dCwgcG93ZXIgZG93biB5b3VyIGNvbXB1dGVyLgorCVdoaWxlIGl0J3MgZG93biwgdW5wbHVnIGFsbCBTQ1NJIGNhYmxlcyBmcm9tIHlvdXIgQWRhcHRlYyBTQ1NJCisJY29udHJvbGxlci4gIEJvb3QgdGhlIHN5c3RlbSBiYWNrIHVwIHRvIHRoZSBBZGFwdGVjIEVaLVNDU0kgQklPUworCWFuZCB0aGVuIG1ha2Ugc3VyZSB0aGF0IHRlcm1pbmF0aW9uIGlzIGVuYWJsZWQgb24geW91ciBhZGFwdGVyIChpZgorCXlvdSBoYXZlIGFuIEFkYXB0ZWMgQklPUyBvZiBjb3Vyc2UpLiAgTmV4dCwgYm9vdCB1cCB0aGUgZmxvcHB5IHlvdQorCW1hZGUgYW5kIHdhaXQgZm9yIGl0IHRvIGRldGVjdCB0aGUgYWljN3h4eCBjb250cm9sbGVyLiAgSWYgdGhlIGtlcm5lbAorCWZpbmRzIHRoZSBjb250cm9sbGVyIGZpbmUsIHNheXMgc2NzaSA6IHggaG9zdHMgYW5kIHRoZW4gdHJpZXMgdG8KKwlkZXRlY3QgeW91ciBkZXZpY2VzIGxpa2Ugbm9ybWFsLCB1cCB0byB0aGUgcG9pbnQgd2hlcmUgaXQgZmFpbHMgdG8KKwltb3VudCB5b3VyIHJvb3QgZmlsZSBzeXN0ZW0gYW5kIHBhbmljcywgdGhlbiB5b3UncmUgZmluZS4gIElmLCBvbgorCXRoZSBvdGhlciBoYW5kLCB0aGUgc3lzdGVtIGdvZXMgaW50byBhbiBpbmZpbml0ZSByZXNldCBsb29wLCB0aGVuCisJeW91IG5lZWQgdG8gdXNlIHRoaXMgb3B0aW9uIGFuZC9vciB0aGUgcHJldmlvdXMgb3B0aW9uIHRvIGZvcmNlIHRoZQorCXByb3BlciB0ZXJtaW5hdGlvbiBzZXR0aW5ncyBvbiB5b3VyIGNvbnRyb2xsZXIuICAgSWYgdGhpcyBoYXBwZW5zLAorCXRoZW4geW91IG5leHQgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgeW91ciBzZXR0aW5ncyBzaG91bGQgYmUuCisKKwlUbyBmaW5kIHRoZSBjb3JyZWN0IHNldHRpbmdzLCBwb3dlciB5b3VyIG1hY2hpbmUgYmFjayBkb3duLCBjb25uZWN0CisJYmFjayB1cCB0aGUgU0NTSSBjYWJsZXMsIGFuZCBib290IGJhY2sgaW50byB5b3VyIG1hY2hpbmUgbGlrZSBub3JtYWwuCisJSG93ZXZlciwgYm9vdCB3aXRoIHRoZSBhaWM3eHh4PXZlcmJvc2U6MHgzOSBvcHRpb24uICBSZWNvcmQgdGhlCisJaW5pdGlhbCBERVZDT05GSUcgdmFsdWVzIGZvciBlYWNoIG9mIHlvdXIgYWljN3h4eCBjb250cm9sbGVycyBhcworCXRoZXkgYXJlIGxpc3RlZCwgYW5kIGFsc28gcmVjb3JkIHdoYXQgdGhlIG1hY2hpbmUgaXMgZGV0ZWN0aW5nIGFzCisJdGhlIHByb3BlciB0ZXJtaW5hdGlvbiBvbiB5b3VyIGNvbnRyb2xsZXJzLiAgTk9URTogdGhlIG9yZGVyIGluCisJd2hpY2ggdGhlIGluaXRpYWwgREVWQ09ORklHIHZhbHVlcyBhcmUgcHJpbnRlZCBvdXQgaXMgbm90IGdhdXJhbnRlZWQKKwl0byBiZSB0aGUgc2FtZSBvcmRlciBhcyB0aGUgU0NTSSBjb250cm9sbGVycyBhcmUgcmVnaXN0ZXJlZC4gIFRoZQorCWFib3ZlIG9wdGlvbiBhbmQgdGhpcyBvcHRpb24gYm90aCB3b3JrIG9uIHRoZSBvcmRlciBvZiB0aGUgU0NTSQorCWNvbnRyb2xsZXJzIGFzIHRoZXkgYXJlIHJlZ2lzdGVyZWQsIHNvIG1ha2Ugc3VyZSB5b3UgbWF0Y2ggdGhlIHJpZ2h0CisJREVWQ09ORklHIHZhbHVlcyB3aXRoIHRoZSByaWdodCBjb250cm9sbGVycyBpZiB5b3UgaGF2ZSBtb3JlIHRoYW4KKwlvbmUgYWljN3h4eCBjb250cm9sbGVyLgorCisJT25jZSB5b3UgaGF2ZSB0aGUgZGV0ZWN0ZWQgdGVybWluYXRpb24gc2V0dGluZ3MgYW5kIHRoZSBpbml0aWFsCisJREVWQ09ORklHIHZhbHVlcyBmb3IgZWFjaCBjb250cm9sbGVyLCB0aGVuIGZpZ3VyZSBvdXQgd2hhdCB0aGUKKwl0ZXJtaW5hdGlvbiBvbiBlYWNoIG9mIHRoZSBjb250cm9sbGVycyAqc2hvdWxkKiBiZS4gIEhvcGVmdWxseSwgdGhhdAorCXBhcnQgaXMgY29ycmVjdCwgYnV0IGl0IGNvdWxkIHBvc3NpYmx5IGJlIHdyb25nIGlmIHRoZXJlIGlzCisJYm9ndXMgY2FibGUgZGV0ZWN0aW9uIGxvZ2ljIG9uIHlvdXIgY29udHJvbGxlciBvciBzb21ldGhpbmcgc2ltaWxhci4KKwlJZiBhbGwgdGhlIGNvbnRyb2xsZXJzIGhhdmUgdGhlIGNvcnJlY3QgdGVybWluYXRpb24gc2V0dGluZ3MsIHRoZW4KKwlkb24ndCBzZXQgdGhlIGFpYzd4eHg9b3ZlcnJpZGVfdGVybSB2YXJpYWJsZSBhdCBhbGwsIGxlYXZlIGl0IGFsb25lLgorCU5leHQsIG9uIGFueSBjb250cm9sbGVycyB0aGF0IGdvIGludG8gYW4gaW5maW5pdGUgcmVzZXQgbG9vcCB3aGVuCisJeW91IHVucGx1ZyBhbGwgdGhlIFNDU0kgY2FibGVzLCBnZXQgdGhlIHN0YXJ0aW5nIERFVkNPTkZJRyB2YWx1ZS4KKwlJZiB0aGUgaW5pdGlhbCBERVZDT05GSUcgdmFsdWUgaXMgZGl2aXNpYmxlIGJ5IDIsIHRoZW4gdGhlIGNvcnJlY3QKKwlzZXR0aW5nIGZvciB0aGF0IGNvbnRyb2xsZXIgaXMgMC4gIElmIGl0J3MgYW4gb2RkIG51bWJlciwgdGhlbgorCXRoZSBjb3JyZWN0IHNldHRpbmcgZm9yIHRoYXQgY29udHJvbGxlciBpcyAxLiAgRm9yIGFueSBvdGhlcgorCWNvbnRyb2xsZXJzIHRoYXQgZGlkbid0IGhhdmUgYW4gaW5maW5pdGUgcmVzZXQgcHJvYmxlbSwgdGhlbiByZXZlcnNlCisJdGhlIGFib3ZlIG9wdGlvbnMuICBJZiBERVZDT05GSUcgd2FzIGV2ZW4sIHRoZW4gdGhlIGNvcnJlY3Qgc2V0dGluZworCWlzIDEsIGlmIG5vdCB0aGVuIHRoZSBjb3JyZWN0IHNldHRpbmcgaXMgMC4KKworCU5vdyB0aGF0IHlvdSBrbm93IHdoYXQgdGhlIGNvcnJlY3Qgc2V0dGluZyB3YXMgZm9yIGVhY2ggY29udHJvbGxlciwKKwl3ZSBuZWVkIHRvIGVuY29kZSB0aGF0IGludG8gdGhlIGFpYzd4eHg9c3Rwd2xldjoweC4uLiB2YXJpYWJsZS4KKwlUaGlzIHZhcmlhYmxlIGlzIGEgYml0IGZpZWxkIGVuY29kZWQgdmFyaWFibGUuICBCaXQgMCBpcyBmb3IgdGhlIGZpcnN0CisJYWljN3h4eCBjb250cm9sbGVyLCBiaXQgMSBmb3IgdGhlIG5leHQsIGV0Yy4gIFB1dCBhbGwgdGhlc2UgYml0cworCXRvZ2V0aGVyIGFuZCB5b3UgZ2V0IGEgbnVtYmVyLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSB0aGlyZCBhaWM3eHh4CisJbmVlZGVkIGEgMSwgYnV0IHRoZSBzZWNvbmQgYW5kIGZpcnN0IGJvdGggbmVlZGVkIGEgMCwgdGhlbiB0aGUgYml0cworCXdvdWxkIGJlIDEwMCBpbiBiaW5hcnkuICBUaGlzIHRoZW4gdHJhbnNsYXRlcyB0byAweDA0LiAgWW91IHdvdWxkCisJdGhlcmVmb3JlIHNldCBhaWM3eHh4PXN0cHdsZXY6MHgwNC4gIFRoaXMgaXMgZmFpcmx5IHN0YW5kYXJkIGJpbmFyeQorCXRvIGhleGFkZWNpbWFsIGNvbnZlcnNpb25zIGhlcmUuICBJZiB5b3UgYXJlbid0IHVwIHRvIHNwZWVkIG9uIHRoZQorCWJpbmFyeS0+aGV4IGNvbnZlcnNpb24gdGhlbiBzZW5kIGFuIGVtYWlsIHRvIHRoZSBhaWM3eHh4IG1haWxpbmcKKwlsaXN0IGFuZCBzb21lb25lIGNhbiBoZWxwIHlvdSBvdXQuCisKKyAgICAiYWljN3h4eD10YWdfaW5mbzp7ezgsOC4ufSx7OCw4Li59LC4ufSIgLSBUaGlzIG9wdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUKKyAgICAgICAgb3IgZW5hYmxlIFRhZ2dlZCBDb21tYW5kIFF1ZXVlaW5nIChUQ1EpIG9uIHNwZWNpZmljIGRldmljZXMuICBBcyBvZgorCWRyaXZlciB2ZXJzaW9uIDUuMS4xMSwgVENRIGlzIG5vdyBlaXRoZXIgb24gb3Igb2ZmIGJ5IGRlZmF1bHQKKwlhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmcgeW91IGNob29zZSBkdXJpbmcgdGhlIG1ha2UgY29uZmlnIHByb2Nlc3MuCisJSW4gb3JkZXIgdG8gZW4vZGlzYWJsZSBUQ1EgZm9yIGNlcnRpYW4gZGV2aWNlcyBhdCBib290IHRpbWUsIGEgdXNlcgorCW1heSB1c2UgdGhpcyBib290IHBhcmFtLiAgVGhlIGRyaXZlciB3aWxsIHRoZW4gcGFyc2UgdGhpcyBtZXNzYWdlIG91dAorICAgICAgICBhbmQgZW4vZGlzYWJsZSB0aGUgc3BlY2lmaWMgZGV2aWNlIGVudHJpZXMgdGhhdCBhcmUgcHJlc2VudCBiYXNlZCB1cG9uCisgICAgICAgIHRoZSB2YWx1ZSBnaXZlbi4gIFRoZSBwYXJhbSBsaW5lIGlzIHBhcnNlZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lcjoKKworICAgICAgICAgIHsgLSBmaXJzdCBpbnN0YW5jZSBpbmRpY2F0ZXMgdGhlIHN0YXJ0IG9mIHRoaXMgcGFyYW1ldGVyIHZhbHVlcworICAgICAgICAgICAgICBzZWNvbmQgaW5zdGFuY2UgaXMgdGhlIHN0YXJ0IG9mIGVudHJpZXMgZm9yIGEgcGFydGljdWxhcgorICAgICAgICAgICAgICBkZXZpY2UgZW50cnkKKyAgICAgICAgICB9IC0gZW5kIHRoZSBlbnRyaWVzIGZvciBhIHBhcnRpY3VsYXIgaG9zdCBhZGFwdGVyLCBvciBlbmQgdGhlIGVudGlyZQorICAgICAgICAgICAgICBzZXQgb2YgcGFyYW1ldGVyIGVudHJpZXMKKyAgICAgICAgICAsIC0gbW92ZSB0byBuZXh0IGVudHJ5LiAgSW5zaWRlIG9mIGEgc2V0IG9mIGRldmljZSBlbnRyaWVzLCB0aGlzCisgICAgICAgICAgICAgIG1vdmVzIHVzIHRvIHRoZSBuZXh0IGRldmljZSBvbiB0aGUgbGlzdC4gIE91dHNpZGUgb2YgZGV2aWNlCisgICAgICAgICAgICAgIGVudHJpZXMsIHRoaXMgbW92ZXMgdXMgdG8gdGhlIG5leHQgaG9zdCBhZGFwdGVyCisgICAgICAgICAgLiAtIFNhbWUgZWZmZWN0IGFzICwgYnV0IGlzIHNhZmUgdG8gdXNlIHdpdGggaW5zbW9kLgorICAgICAgICAgIHggLSB0aGUgbnVtYmVyIHRvIGVudGVyIGludG8gdGhlIGFycmF5IGF0IHRoaXMgcG9zaXRpb24uICAKKyAgICAgICAgICAgICAgMCA9IEVuYWJsZSB0YWdnZWQgcXVldWVpbmcgb24gdGhpcyBkZXZpY2UgYW5kIHVzZSB0aGUgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgcXVldWUgZGVwdGgKKyAgICAgICAgICAgICAgMS0yNTQgPSBFbmFibGUgdGFnZ2VkIHF1ZXVlaW5nIG9uIHRoaXMgZGV2aWNlIGFuZCB1c2UgdGhpcworICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBhcyB0aGUgcXVldWUgZGVwdGgKKyAgICAgICAgICAgICAgMjU1ID0gRGlzYWJsZSB0YWdnZWQgcXVldWVpbmcgb24gdGhpcyBkZXZpY2UuCisgICAgICAgICAgICAgIE5vdGU6IGFueXRoaW5nIGFib3ZlIDMyIGZvciBhbiBhY3R1YWwgcXVldWUgZGVwdGggaXMgd2FzdGVmdWwKKyAgICAgICAgICAgICAgICAgICAgYW5kIG5vdCByZWNvbW1lbmRlZC4KKworICAgICAgICBBIGZldyBleGFtcGxlcyBvZiBob3cgdGhpcyBjYW4gYmUgdXNlZDoKKworICAgICAgICB0YWdfaW5mbzp7ezgsMTIsLDAsLDI1NSw0fX0KKyAgICAgICAgICBUaGlzIGxpbmUgd2lsbCBvbmx5IGVmZmVjdCB0aGUgZmlyc3QgYWljN3h4eCBjYXJkIHJlZ2lzdGVyZWQuICBJdAorICAgICAgICAgIHdpbGwgc2V0IHNjc2kgaWQgMCB0byBhIHF1ZXVlIGRlcHRoIG9mIDgsIGlkIDEgdG8gMTIsIGxlYXZlIGlkIDIKKyAgICAgICAgICBhdCB0aGUgZGVmYXVsdCwgc2V0IGlkIDMgdG8gdGFnZ2VkIHF1ZXVlaW5nIGVuYWJsZWQgYW5kIHVzZSB0aGUKKyAgICAgICAgICBkZWZhdWx0IHF1ZXVlIGRlcHRoLCBpZCA0IGRlZmF1bHQsIGlkIDUgZGlzYWJsZWQsIGFuZCBpZCA2IHRvIDQuCisgICAgICAgICAgQW55IG5vdCBzcGVjaWZpZWQgZW50cmllcyBzdGF5IGF0IHRoZSBkZWZhdWx0IHZhbHVlLCByZXBlYXRlZAorICAgICAgICAgIGNvbW1hcyB3aXRoIG5vIHZhbHVlIHNwZWNpZmllZCB3aWxsIHNpbXBseSBpbmNyZW1lbnQgdG8gdGhlIG5leHQgaWQKKyAgICAgICAgICB3aXRob3V0IGNoYW5naW5nIGFueXRoaW5nIGZvciB0aGUgbWlzc2luZyB2YWx1ZXMuCisKKyAgICAgICAgdGFnX2luZm86eywsLHssLCwyNTV9fQorICAgICAgICAgIEZpcnN0LCBzZWNvbmQsIGFuZCB0aGlyZCBhZGFwdGVycyBhdCBkZWZhdWx0IHZhbHVlcy4gIEZvdXJ0aAorICAgICAgICAgIGFkYXB0ZXIsIGlkIDMgaXMgZGlzYWJsZWQuICBOb3RpY2UgdGhhdCBsZWFkaW5nIGNvbW1hcyBzaW1wbHkKKwkgIGluY3JlbWVudCB3aGF0IHRoZSBmaXJzdCBudW1iZXIgZWZmZWN0cywgYW5kIHRoZXJlIGFyZSBubyBuZWVkCisJICBmb3IgdHJhaWxpbmcgY29tbWFzLiAgV2hlbiB5b3UgY2xvc2Ugb3V0IGFuIGFkYXB0ZXIsIG9yIHRoZQorCSAgZW50aXJlIGVudHJ5LCBhbnl0aGluZyBub3QgZXhwbGljaXRseSBzZXQgc3RheXMgYXQgdGhlIGRlZmF1bHQKKwkgIHZhbHVlLgorCisgICAgICAgIEEgZmluYWwgbm90ZSBvbiB0aGlzIG9wdGlvbi4gIFRoZSBzY2FubmVyIEkgdXNlZCBmb3IgdGhpcyBpc24ndAorICAgICAgICBwZXJmZWN0IG9yIGhpZ2hseSByb2J1c3QuICBJZiB5b3UgbWVzcyB0aGUgbGluZSB1cCwgdGhlIHdvcnN0IHRoYXQKKyAgICAgICAgc2hvdWxkIGhhcHBlbiBpcyB0aGF0IHRoZSBsaW5lIHdpbGwgZ2V0IGlnbm9yZWQuICBJZiB5b3UgZG9uJ3QKKyAgICAgICAgY2xvc2Ugb3V0IHRoZSBlbnRpcmUgZW50cnkgd2l0aCB0aGUgZmluYWwgYnJhY2tldCwgdGhlbiBhbnkgb3RoZXIKKyAgICAgICAgYWljN3h4eCBvcHRpb25zIGFmdGVyIHRoaXMgd2lsbCBnZXQgaWdub3JlZC4gIFNvLCBpbiBnZW5lcmFsLCBiZQorICAgICAgICBzdXJlIG9mIHdoYXQgeW91IGFyZSBlbnRlcmluZywgYW5kIGFmdGVyIHlvdSBoYXZlIGl0IHJpZ2h0LCBqdXN0CisgICAgICAgIGFkZCBpdCB0byB0aGUgbGlsby5jb25mIGZpbGUgc28gdGhlcmUgd29uJ3QgYmUgYW55IG1pc3Rha2VzLiAgQXMKKyAgICAgICAgYSBtZWFucyBvZiBjaGVja2luZyB0aGlzIHBhcnNlciwgdGhlIGVudGlyZSB0YWdfaW5mbyBhcnJheSBmb3IKKyAgICAgICAgZWFjaCBjYXJkIGlzIG5vdyBwcmludGVkIG91dCBpbiB0aGUgL3Byb2Mvc2NzaS9haWM3eHh4L3ggZmlsZS4gIFlvdQorICAgICAgICBjYW4gdXNlIHRoYXQgdG8gdmVyaWZ5IHRoYXQgeW91ciBvcHRpb25zIHdlcmUgcGFyc2VkIGNvcnJlY3RseS4gCisgICAgICAgIAorICAgIEJvb3QgY29tbWFuZCBsaW5lIG9wdGlvbnMgbWF5IGJlIGNvbWJpbmVkIHRvIGZvcm0gdGhlIHByb3BlciBzZXQgb2Ygb3B0aW9ucworICAgIGEgdXNlciBtaWdodCBuZWVkLiAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgaXMgdmFsaWQ6CisgICAgCisgICAgYWljN3h4eD12ZXJib3NlLGV4dGVuZGVkLGlycV90cmlnZ2VyOjEKKyAgICAKKyAgICBUaGUgb25seSByZXF1aXJlbWVudCBpcyB0aGF0IGluZGl2aWR1YWwgb3B0aW9ucyBiZSBzZXBhcmF0ZWQgYnkgYSBjb21tYSBvcgorICAgIGEgcGVyaW9kIG9uIHRoZSBjb21tYW5kIGxpbmUuCisgICAgICAgIAorICBNb2R1bGUgTG9hZGluZyBjb21tYW5kIG9wdGlvbnMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgV2hlbiBsb2FkaW5nIHRoZSBhaWM3eHh4IGRyaXZlciBhcyBhIG1vZHVsZSwgdGhlIGV4YWN0IHNhbWUgb3B0aW9ucyBhcmUKKyAgICBhdmFpbGFibGUgdG8gdGhlIHVzZXIuICBIb3dldmVyLCB0aGUgc3ludGF4IHRvIHNwZWNpZnkgdGhlIG9wdGlvbnMgY2hhbmdlcworICAgIHNsaWdodGx5LiAgRm9yIGluc21vZCwgeW91IG5lZWQgdG8gd3JhcCB0aGUgYWljN3h4eD0gYXJndW1lbnQgaW4gcXVvdGVzCisgICAgYW5kIHJlcGxhY2UgYWxsICcsJyB3aXRoICcuJy4gIFNvLCBmb3IgZXhhbXBsZSwgYSB2YWxpZCBpbnNtb2QgbGluZQorICAgIHdvdWxkIGJlOgorCisgICAgaW5zbW9kIGFpYzd4eHggYWljN3h4eD0ndmVyYm9zZS5pcnFfdHJpZ2dlcjoxLmV4dGVuZGVkJworCisgICAgVGhpcyBsaW5lIHNob3VsZCByZXN1bHQgaW4gdGhlICpleGFjdCogc2FtZSBiZWhhdmlvdXIgYXMgaWYgeW91IHR5cGVkCisgICAgaXQgaW4gYXQgdGhlIGxpbG8gcHJvbXB0IGFuZCB0aGUgZHJpdmVyIHdhcyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwKKyAgICBpbnN0ZWFkIG9mIGJlaW5nIGEgbW9kdWxlLiAgVGhlIHJlYXNvbiBmb3IgdGhlIHNpbmdsZSBxdW90ZSBpcyBzbyB0aGF0CisgICAgdGhlIHNoZWxsIHdvbid0IHRyeSB0byBpbnRlcnByZXQgYW55dGhpbmcgaW4gdGhlIGxpbmUsIHN1Y2ggYXMgey4gCisgICAgSW5zbW9kIGFzc3VtZXMgYW55IG9wdGlvbnMgc3RhcnRpbmcgd2l0aCBhIGxldHRlciBpbnN0ZWFkIG9mIGEgbnVtYmVyCisgICAgaXMgYSBjaGFyYWN0ZXIgc3RyaW5nICh3aGljaCBpcyB3aGF0IHdlIHdhbnQpIGFuZCBieSBzd2l0Y2hpbmcgYWxsIG9mCisgICAgdGhlIGNvbW1hcyB0byBwZXJpb2RzLCBpbnNtb2Qgd29uJ3QgaW50ZXJwcmV0IHRoaXMgYXMgbW9yZSB0aGFuIG9uZQorICAgIHN0cmluZyBhbmQgd3JpdGUganVuayBpbnRvIG91ciBiaW5hcnkgaW1hZ2UuICBJIGNvbnNpZGVyIGl0IGEgYnVnIGluCisgICAgdGhlIGluc21vZCBwcm9ncmFtIHRoYXQgZXZlbiBpZiB5b3Ugd3JhcCB5b3VyIHN0cmluZyBpbiBxdW90ZXMgKHF1b3RlcworICAgIHRoYXQgcGFzcyB0aGUgc2hlbGwgbWluZCB5b3UgYW5kIHRoYXQgaW5zbW9kIHNlZXMpIGl0IHN0aWxsIHRyZWF0ZXMKKyAgICBhIGNvbW1hIGluc2lkZSBvZiB0aG9zZSBxdW90ZXMgYXMgc3RhcnRpbmcgYSBuZXcgdmFyaWFibGUsIHJlc3VsdGluZworICAgIGluIG1lbW9yeSBzY3JpYmJsZXMgaWYgeW91IGRvbid0IHN3aXRjaCB0aGUgY29tbWFzIHRvIHBlcmlvZHMuCisKKworICBLZXJuZWwgQ29tcGlsZSBvcHRpb25zCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFRoZSB2YXJpb3VzIGtlcm5lbCBjb21waWxlIHRpbWUgb3B0aW9ucyBmb3IgdGhpcyBkcml2ZXIgYXJlIG5vdyBmYWlybHkKKyAgICB3ZWxsIGRvY3VtZW50ZWQgaW4gdGhlIGZpbGUgRG9jdW1lbnRhdGlvbi9Db25maWd1cmUuaGVscC4gIEluIG9yZGVyIHRvCisgICAgc2VlIHRoaXMgZG9jdW1lbnRhdGlvbiwgeW91IG5lZWQgdG8gdXNlIG9uZSBvZiB0aGUgYWR2YW5jZWQgY29uZmlndXJhdGlvbgorICAgIHByb2dyYW1zIChtZW51Y29uZmlnIGFuZCB4Y29uZmlnKS4gIElmIHlvdSBhcmUgdXNpbmcgdGhlICJtYWtlIG1lbnVjb25maWciCisgICAgbWV0aG9kIG9mIGNvbmZpZ3VyaW5nIHlvdXIga2VybmVsLCB0aGVuIHlvdSB3b3VsZCBzaW1wbHkgaGlnaGxpZ2h0IHRoZQorICAgIG9wdGlvbiBpbiBxdWVzdGlvbiBhbmQgaGl0IHRoZSA/IGtleS4gIElmIHlvdSBhcmUgdXNpbmcgdGhlICJtYWtlIHhjb25maWciCisgICAgbWV0aG9kIG9mIGNvbmZpZ3VyaW5nIHlvdXIga2VybmVsLCB0aGVuIHNpbXBseSBjbGljayBvbiB0aGUgaGVscCBidXR0b24KKyAgICBuZXh0IHRvIHRoZSBvcHRpb24geW91IGhhdmUgcXVlc3Rpb25zIGFib3V0LiAgVGhlIGhlbHAgaW5mb3JtYXRpb24gZnJvbQorICAgIHRoZSBDb25maWd1cmUuaGVscCBmaWxlIHdpbGwgdGhlbiBnZXQgYXV0b21hdGljYWxseSBkaXNwbGF5ZWQuCisKKyAgL3Byb2Mgc3VwcG9ydAorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBUaGUgL3Byb2Mgc3VwcG9ydCBmb3IgdGhlIEFJQzd4eHggY2FuIGJlIGZvdW5kIGluIHRoZSAvcHJvYy9zY3NpL2FpYzd4eHgvCisgICAgZGlyZWN0b3J5LiBUaGF0IGRpcmVjdG9yeSBjb250YWlucyBhIGZpbGUgZm9yIGVhY2ggU0NTSSBjb250cm9sbGVyIGluCisgICAgdGhlIHN5c3RlbS4gRWFjaCBmaWxlIHByZXNlbnRzIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gYW5kIHRyYW5zZmVyCisgICAgc3RhdGlzdGljcyAoZW5hYmxlZCB3aXRoICNkZWZpbmUgaW4gYWljN3h4eC5jKSBmb3IgZWFjaCBjb250cm9sbGVyLgorCisgICAgVGhhbmtzIHRvIE1pY2hhZWwgTmV1ZmZlciBmb3IgaGlzIHVwcGVyLWxldmVsIFNDU0kgaGVscCwgYW5kCisgICAgTWF0dGhldyBKYWNvYiBmb3Igc3RhdGlzdGljcyBzdXBwb3J0LgorCisgIERlYnVnZ2luZyB0aGUgZHJpdmVyCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNob3VsZCB5b3UgaGF2ZSBwcm9ibGVtcyB3aXRoIHRoaXMgZHJpdmVyLCBhbmQgd291bGQgbGlrZSBzb21lIGhlbHAgaW4KKyAgICBnZXR0aW5nIHRoZW0gc29sdmVkLCB0aGVyZSBhcmUgYSBjb3VwbGUgZGVidWdnaW5nIGl0ZW1zIGJ1aWx0IGludG8KKyAgICB0aGUgZHJpdmVyIHRvIGZhY2lsaXRhdGUgZ2V0dGluZyB0aGUgbmVlZGVkIGluZm9ybWF0aW9uIGZyb20gdGhlIHN5c3RlbS4KKyAgICBJbiBnZW5lcmFsLCBJIG5lZWQgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvYmxlbSwgd2l0aCBhcyBtYW55CisgICAgbG9ncyBhcyBwb3NzaWJsZSBjb25jZXJuaW5nIHdoYXQgaGFwcGVucy4gIFRvIGhlbHAgd2l0aCB0aGlzLCB0aGVyZSBpcworICAgIGEgY29tbWFuZCBvcHRpb24gYWljN3h4eD1wYW5pY19vbl9hYm9ydC4gIFRoaXMgb3B0aW9uLCB3aGVuIHNldCwgZm9yY2VzCisgICAgdGhlIGRyaXZlciB0byBwYW5pYyB0aGUga2VybmVsIG9uIHRoZSBmaXJzdCBTQ1NJIGFib3J0IGlzc3VlZCBieSB0aGUKKyAgICBtaWQgbGV2ZWwgU0NTSSBjb2RlLiAgSWYgeW91ciBzeXN0ZW0gaXMgZ29pbmcgdG8gcmVzZXQgbG9vcHMgYW5kIHlvdQorICAgIGNhbid0IHJlYWQgdGhlIHNjcmVlbiwgdGhlbiB0aGlzIGlzIHdoYXQgeW91IG5lZWQuICBOb3Qgb25seSB3aWxsIGl0CisgICAgc3RvcCB0aGUgc3lzdGVtLCBidXQgaXQgYWxzbyBwcmludHMgb3V0IGEgbGFyZ2UgYW1vdW50IG9mIHN0YXRlCisgICAgaW5mb3JtYXRpb24gaW4gdGhlIHByb2Nlc3MuICBTZWNvbmQsIGlmIHlvdSBzcGVjaWZ5IHRoZSBvcHRpb24KKyAgICAiYWljN3h4eD12ZXJib3NlOjB4MWZmZmYiLCB0aGUgc3lzdGVtIHdpbGwgcHJpbnQgb3V0ICpTT09PTyogbXVjaAorICAgIGluZm9ybWF0aW9uIGFzIGl0IHJ1bnMgdGhhdCB5b3Ugd29uJ3QgYmUgYWJsZSB0byBzZWUgYW55dGhpbmcuCisgICAgSG93ZXZlciwgdGhpcyBjYW4gYWN0dWFsbHkgYmUgdmVyeSB1c2VmdWwgaWYgeW91ciBtYWNoaW5lIHNpbXBseQorICAgIGxvY2tzIHVwIHdoZW4gdHJ5aW5nIHRvIGJvb3QsIHNpbmNlIGl0IHdpbGwgcGluLXBvaW50IHdoYXQgd2FzIGxhc3QKKyAgICBoYXBwZW5pbmcgKGluIHJlZ2FyZHMgdG8gdGhlIGFpYzd4eHggZHJpdmVyKSBpbW1lZGlhdGVseSBwcmlvciB0bworICAgIHRoZSBsb2NrdXAuICBUaGlzIGlzIHJlYWxseSBvbmx5IHVzZWZ1bCBpZiB5b3VyIG1hY2hpbmUgc2ltcGx5IGNhbgorICAgIG5vdCBib290IHVwIHN1Y2Nlc3NmdWxseS4gIElmIHlvdSBjYW4gZ2V0IHlvdXIgbWFjaGluZSB0byBydW4sIHRoZW4KKyAgICB0aGlzIHdpbGwgcHJvZHVjZSBmYXIgdG9vIG11Y2ggaW5mb3JtYXRpb24uCisKKyAgRlRQIHNpdGVzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGZ0cDovL2Z0cC5yZWRoYXQuY29tL3B1Yi9haWMvCisgICAgICAtIE91dCBvZiBkYXRlLiAgSSB1c2VkIHRvIGtlZXAgc3R1ZmYgaGVyZSwgYnV0IHRvbyBtYW55IHBlb3BsZQorICAgICAgICBjb21wbGFpbmVkIGFib3V0IGhhdmluZyBhIGhhcmQgdGltZSBnZXR0aW5nIGludG8gUmVkIEhhdCdzIGZ0cAorCXNlcnZlci4gIFNvIHVzZSB0aGUgd2ViIHNpdGUgYmVsb3cgaW5zdGVhZC4KKyAgICBmdHA6Ly9mdHAucGNuZXQuY29tL3VzZXJzL2Vpc2NoZW4vTGludXgvCisgICAgICAtIERhbiBFaXNjaGVuJ3MgZHJpdmVyIGRpc3RyaWJ1dGlvbiBhcmVhCisgICAgZnRwOi8vZWtmMi52c2IuY3ovcHViL2xpbnV4L2tlcm5lbC9haWM3eHh4L2Z0cC50ZWxlcG9ydC5jb20vCisgICAgICAtIEV1cm9wZWFuIExpbnV4IG1pcnJvciBvZiBUZWxlcG9ydCBzaXRlCisKKyAgV2ViIHNpdGVzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGh0dHA6Ly9wZW9wbGUucmVkaGF0LmNvbS9kbGVkZm9yZC8KKyAgICAgIC0gTXkgd2ViIHNpdGUsIGFsc28gdGhlIHByaW1hcnkgYWljN3h4eCBzaXRlIHdpdGggc2V2ZXJhbCByZWxhdGVkCisgICAgICAgIHBhZ2VzLgorCitEZWFuIFcuIEdlaG5lcnQKK2RlYW5nQHRlbGVwb3J0LmNvbQorCiskUmV2aXNpb246IDMuMCAkCisKK01vZGlmaWVkIGJ5IERvdWcgTGVkZm9yZCAxOTk4LTIwMDAKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL2NwcWZjLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9jcHFmYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQzM2U2MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9jcHFmYy50eHQKQEAgLTAsMCArMSwyNzIgQEAKK05vdGVzIGZvciBDUFFGQ1RTIGRyaXZlciBmb3IgQ29tcGFxIFRhY2h5b24gVFMKK0ZpYnJlIENoYW5uZWwgSG9zdCBCdXMgQWRhcHRlciwgUENJIDY0LWJpdCwgNjZNSHoKK2ZvciBMaW51eCAoUkggNi4xLCA2LjIga2VybmVsIDIuMi4xMi0zMiwgMi4yLjE0LTUpCitTTVAgdGVzdGVkCitUZXN0ZWQgaW4gc2luZ2xlIGFuZCBkdWFsIEhCQSBjb25maWd1cmF0aW9uLCAzMiBhbmQgNjRiaXQgYnVzc2VzLAorMzMgYW5kIDY2TUh6LiAgT25seSBzdXBwb3J0cyBGQy1BTC4KK1NFU1Qgc2l6ZSA1MTIgRXhjaGFuZ2VzIChzaW11bHRhbmVvdXMgSS9PcykgbGltaXRlZCBieSBtb2R1bGUga21hbGxvYygpIAorCW1heCBvZiAxMjhrIGJ5dGVzIGNvbnRpZ3VvdXMuCisKK1ZlciAyLjUuNCAgT2N0IDAzLCAyMDAyCisgICAqIGZpeGVkIG1lbWNweSBvZiBzZW5zZSBidWZmZXIgaW4gaW9jdGwgdG8gY29weSB0aGUgc21hbGxlciBkZWZpbmVkIHNpemUKK1ZlciAyLjUuMyAgQXVnIDAxLCAyMDAyCisgICAqIGZpeCB0aGUgcGFzc3RocnUgaW9jdGwgdG8gaGFuZGxlIHRoZSBTY3NpX0NtbmQtPnJlcXVlc3QgYmVpbmcgYSBwb2ludGVyCitWZXIgMi41LjEgIEp1bCAzMCwgMjAwMgorICAgKiBmaXggaW9jdGwgdG8gcGF5IGF0dGVudGlvbiB0byB0aGUgc3BlY2lmaWVkIExVTi4KK1ZlciAyLjUuMCAgTm92IDI5LCAyMDAxCisgICAqIGVsaW1pbmF0ZWQgaW9fcmVxdWVzdF9sb2NrLiAgVGhpcyBjaGFuZ2UgbWFrZXMgdGhlIGRyaXZlciBzcGVjaWZpYworICAgICB0byB0aGUgMi41Lngga2VybmVscy4KKyAgICogc2lsZW5jZWQgZXhjZXNzaXZlbHkgbm9pc3kgcHJpbnRrcy4KKworVmVyIDIuMS4yICBKdWx5IDIzLCAyMDAyCisgICAqIGluaXRpYWxpemUgRHVtQ21uZC0+bHVuIGluIGNwcWZjVFNfaW9jdGwgKHVzZWQgaW4gZmNGaW5kTG9nZ2VkSW5Qb3J0cyBhcyBMVU4gaW5kZXgpCisKK1ZlciAyLjEuMSAgT2N0IDE4LCAyMDAxCisgICAqIHJlaW5pdGlhbGl6ZSBDbW5kLT5TQ3Auc2VudF9jb21tYW5kICh1c2VkIHRvIGlkZW50aWZ5IGNvbW1hbmRzIGFzCisgICAgIHBhc3N0aHJ1cykgb24gY2FsbGluZyBzY3NpX2RvbmUsIHNpbmNlIHRoZSBzY3NpIG1pZCBsYXllciBkb2VzIG5vdAorICAgICB1c2UgKG9yIHJlaW5pdGlhbGl6ZSkgdGhpcyBmaWVsZCB0byBwcmV2ZW50IHN1YnNlcXVlbnQgY29tYW5kcyBmcm9tCisgICAgIGhhdmluZyBpdCBzZXQgaW5jb3JyZWN0bHkuIAorCitWZXIgMi4xLjAgIEF1ZyAyNywgMjAwMQorICAgKiBSZXZpc2UgZHJpdmVyIHRvIHVzZSBuZXcga2VybmVsIDIuNC54IFBDSSBETUEgQVBJLCBpbnN0ZWFkIG9mIAorICAgICB2aXJ0X3RvX2J1cygpLiAgKGVuYWJsZXMgZHJpdmVyIHRvIHdvcmsgdy8gaWE2NCBzeXN0ZW1zIHdpdGggPjJHYiBSQU0uKQorICAgICBSZXdvcmsgbWFpbiBzY2F0dGVyLWdhdGhlciBjb2RlIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSBTRyBlbGVtZW50CisgICAgIGxlbmd0aHMgYXJlIGxhcmdlciB0aGFuIDB4N0ZGRkYgYnl0ZXMgYW5kIHVzZSBhcyBtYW55IHNjYXR0ZXIgCisgICAgIGdhdGhlciBwYWdlcyBhcyBuZWNlc3NhcnkuIChTdGV2ZSBDYW1lcm9uKQorICAgKiBNYWtlZmlsZSBjaGFuZ2VzIHRvIGJyaW5nIGNwcWZjIGludG8gbGluZSB3LyByZXN0IG9mIFNDU0kgZHJpdmVycworICAgICAodGhhbmtzIHRvIEtlaXRoIE93ZW5zKQorCitWZXIgMi4wLjUgIEF1ZyAwNiwgMjAwMQorICAgKiBSZWplY3Qgbm9uLWV4aXN0ZW50IGx1bnMgaW4gdGhlIGRyaXZlciByYXRoZXIgdGhhbiBsZXR0aW5nIHRoZSAKKyAgICAgaGFyZHdhcmUgZG8gaXQuICAoc29tZSBIVyBiZWhhdmVzIGRpZmZlcmVudGx5IHRoYW4gb3RoZXJzIGluIHRoaXMgYXJlYS4pCisgICAqIENoYW5nZWQgTWFrZWZpbGUgdG8gcmVseSBvbiAibWFrZSBkZXAiIGluc3RlYWQgb2YgZXhwbGljaXQgZGVwZW5kZW5jaWVzCisgICAqIGlmZGVmJ2VkIG91dCBmaWJyZSBjaGFubmVsIGFuYWx5emVyIHRyaWdnZXJpbmcgZGVidWcgY29kZQorICAgKiBmaXhlZCBhIGppZmZpZXMgd3JhcHBpbmcgaXNzdWUKKworVmVyIDIuMC40ICBBdWcgMDEsIDIwMDEKKyAgICogSW5jb3Jwb3JhdGVkIGZpeCBmb3IgdGFyZ2V0IGRldmljZSByZXNldCBmcm9tIFN0ZWVsZXllCisgICAqIEZpeGVkIHBhc3N0aHJvdWdoIGlvY3RsIHNvIGl0IGRvZXNuJ3QgaGFuZy4KKyAgICogRml4ZWQgaGFuZyBpbiBsYXVuY2hfRkN3b3JrZXJfdGhyZWFkKCkgdGhhdCBvY2N1cnJlZCBvbiBzb21lIG1hY2hpbmVzLgorICAgKiBBdm9pZCBwcm9ibGVtIHdoZW4gbnVtYmVyIG9mIHZvbHVtZXMgaW4gYSBzaW5nbGUgY2FiaW5ldCA+IDgKKworVmVyIDIuMC4yICBKdWx5IDIzLCAyMDAxCisgICBDaGFuZ2VkIHRoZSBzZW1pcGhvcmUgY2hhbmdlcyBzbyB0aGUgZHJpdmVyIHdvdWxkIGNvbXBpbGUgaW4gMi40LjcuIAorICAgVGhpcyB2ZXJzaW9uIGlzIGZvciAyLjQuNyBhbmQgYmV5b25kLiAKKyAKK1ZlciAyLjAuMSAgTWF5IAk3LCAyMDAxCisgICBNZXJnZWQgdmVyc2lvbiAxLjMuNiBmaXhlcyBpbnRvIHZlcnNpb24gMi4wLjAuICAgCisKK1ZlciAyLjAuMCAgTWF5ICAgNywgMjAwMQorICBGaXhlZCBwcm9ibGVtIHNvIHNwaW5sb2NrIGlzIGJlaW5nIGluaXRpYWxpemVkIHRvIFVOTE9DS0VELiAKKyAgRml4ZWQgdXBkYXRlZCBkcml2ZXIgc28gaXQgY29tcGlsZXMgaW4gdGhlIDIuNCB0cmVlLiAKKyAKKyBWZXIgMS4zLjYgIEZlYiAgMjcsIDIwMDEKKyAgIEFkZGVkIFRhcmdldF9EZXZpY2VfUmVzZXQgZnVuY3Rpb24gZm9yIFNDU0kgZXJyb3IgaGFuZGxpbmcKKyAgIEZpeGVkIHByb2JsZW0gd2l0aCBub3QgcmVzZXRpbmcgYWRkcmVzc2luZyBtb2RlIGFmdGVyIGltcGxpY2l0IGxvZ291dAorIAorCitWZXIgMS4zLjQgIFNlcCAgIDcsIDIwMDAKKyAgQWRkZWQgTW9kaW5mbyBpbmZvcm1hdGlvbgorICBGaXhlZCBwcm9ibGVtIHdpdGggc3RhdGljYWxseSBsaW5raW5nIHRoZSBkcml2ZXIKKworVmVyIDEuMy4zLCBBdWcgIDIzLCAyMDAwCisgIEZpeGVkIGRldmljZS9mdW5jdGlvbiBudW1iZXIgaW4gaW9jdGwKKworVmVyIDEuMy4yLCBKdWx5IDI3LCAyMDAwCisgIEFkZCBpbmNsdWRlIGZvciBBbHBoYSBjb21waWxlIG9uIDIuMi4xNCBrZXJuZWwgKGNwcSppMmMuYykKKyAgQ2hhbmdlIGxvZ2ljIGZvciBkaWZmZXJlbnQgRkNQLVJTUCBzZW5zZV9idWZmZXIgbG9jYXRpb24gZm9yIEhTRzgwIHRhcmdldAorICBBbmQgc2VhcmNoIGZvciBBZ2lsZW50IFRhY2h5b24gWEwyIEhCQXMgKG5vdCBmaW5pc2hlZCEgLSBpbiB0ZXN0KQorCitUZXN0ZWQgd2l0aCAKKyhzdG9yYWdlKToKKyAgICAgICAgICAgQ29tcGFxIFJBLTR4MDAwLCBSQUlEIGZpcm13YXJlIHZlciAyLjQwIC0gMi41NAorICAgICAgICAgICBTZWFnYXRlIEZDIGRyaXZlcyBtb2RlbCBTVDM5MTAyRkMsIHJldiAwMDA2CisgICAgICAgICAgIEhpdGFjaGkgREszMUNKLTcyRkMgcmV2IEo4QTgKKyAgICAgICAgICAgSUJNIEREWUYtVDE4MzUwUiByZXYgRjYwSworICAgICAgICAgICBDb21wYXEgRkMtU0NTSSBicmlkZ2Ugdy8gRExUIDM1LzcwIEdiIERMVCAodGFwZSkKKyhzZXJ2ZXJzKToKKyAgICAgICAgICAgQ29tcGFxIFBMLTE4NTBSCisgICAgICAgICAgIENvbXBhcSBQTC02NTAwIFhlb24gKDQwME1IeikKKwkgICBDb21wYXEgUEwtODUwMCAoNTAwTUh6LCA2Nk1IeiwgNjRiaXQgUENJKQorICAgICAgICAgICBDb21wYXEgQWxwaGEgRFMyMCAoUkggNi4xKQorKGh1YnMpOgorICAgICAgICAgICBWaXhlbCBSYXBwb3J0IDEwMDAgKDctcG9ydCAiZHVtYiIpCisJICAgR2Fkem9veCBHaWJyYWx0ZXIgKDEyLXBvcnQgImR1bWIiKQorCSAgIEdhZHpvb3ggQ2FwZWxsaXggMjAwMCwgMzAwMCAKKyhzd2l0Y2hlcyk6CisgICAgICAgICAgIEJyb2NhZGUgMjAxMCwgMjQwMCwgMjgwMCwgcmV2IDIuMC4zYSAoJiBsYXRlcikKKyAgICAgICAgICAgR2Fkem9veCAzMjEwIChGYWJyaWMgYmxhZGUgYmV0YSkKKyAgICAgICAgICAgVml4ZWwgNzEwMCAoRmFicmljIGJldGEgZmlybWFyZSAtIGtub3duIGhvdCBwbHVnIGlzc3VlcykKK3VzaW5nICJxYV90ZXN0IiAoZXNwLiBpb190ZXN0IHNjcmlwdCkgc3VpdGUgbW9kaWZpZWQgZnJvbSBVbml4IHRlc3RzLgorCQorSW5zdGFsbGF0aW9uOgorbWFrZSBtZW51Y29uZmlnCisgIChzZWxlY3QgU0NTSSBsb3ctbGV2ZWwsIENvbXBhcSBGQyBIQkEpCittYWtlIG1vZHVsZXMKK21ha2UgbW9kdWxlc19pbnN0YWxsCisKK2UuZy4gaW5zbW9kIC1mIGNwcWZjCisKK0R1ZSB0byBGYWJyaWMvc3dpdGNoIGRlbGF5cywgZHJpdmVyIHJlcXVpcmVzIDQgc2Vjb25kcyAKK3RvIGluaXRpYWxpemUuICBJZiBhZGFwdGVycyBhcmUgZm91bmQsIHRoZXJlIHdpbGwgYmUgYSBlbnRyaWVzIGF0CisvcHJvYy9zY3NpL2NwcWZjVFMvKgorCitzYW1wbGUgY29udGVudHMgb2Ygc3RhcnR1cCBtZXNzYWdlcworCisqKioqKioqKioqKioqKioqKioqKioqKioqCisgc2NzaV9yZWdpc3RlciBhbGxvY2F0aW5nIDM1OTYgYnl0ZXMgZm9yIENQUUZDSEJBCisgaW9yZW1hcCdkIE1lbWJhc2U6IGM4ODdlNjAwCisgIEhCQSBUYWNoeW9uIFJldklkIDEuMgorQWxsb2NhdGluZyAxMTk4MDggZm9yIDU3NiBFeGNoYW5nZXMgQCBjMGRjMDAwMAorQWxsb2NhdGluZyAxMTI5MDQgZm9yIExpbmtRIEAgYzBjMjAwMDAgKDU3NiBlbGVtZW50cykKK0FsbG9jYXRpbmcgMTEwNjAwIGZvciBUYWNoU0VTVCBmb3IgNTEyIEV4Y2hhbmdlcworICBjcHFmY1RTOiB3cml0aW5nIElNUSBCQVNFIDdDMDAwMGggICAgUEkgN0M0MDAwaAorICBjcHFmY1RTOiBTRVNUIGMwZTQwMDAwKHZpcnQpOiBXcm90ZSBiYXNlIEU0MDAwMGggQCBjODg3ZTc0MAorY3BxZmNUUzogTmV3IEZDIHBvcnQgMDAwMEU4aCBXV046IDUwMDUwNzY1MDY0MjQ5OUQgU0NTSSBDaGFuL1RyZ3QgMC8wCitjcHFmY1RTOiBOZXcgRkMgcG9ydCAwMDAwRUZoIFdXTjogNTAwMDBFMTAwMDAwRDVBNiBTQ1NJIENoYW4vVHJndCAwLzEKK2NwcWZjVFM6IE5ldyBGQyBwb3J0IDAwMDBFNGggV1dOOiAyMTAwMDAyMDM3MDA5N0JCIFNDU0kgQ2hhbi9Ucmd0IDAvMgorY3BxZmNUUzogTmV3IEZDIHBvcnQgMDAwMEUyaCBXV046IDIxMDAwMDIwMzcwMDk5NDYgU0NTSSBDaGFuL1RyZ3QgMC8zCitjcHFmY1RTOiBOZXcgRkMgcG9ydCAwMDAwRTFoIFdXTjogMjEwMDAwMjAzNzAwOThGRSBTQ1NJIENoYW4vVHJndCAwLzQKK2NwcWZjVFM6IE5ldyBGQyBwb3J0IDAwMDBFMGggV1dOOiAyMTAwMDAyMDM3MDA5N0IyIFNDU0kgQ2hhbi9Ucmd0IDAvNQorY3BxZmNUUzogTmV3IEZDIHBvcnQgMDAwMERDaCBXV046IDIxMDAwMDIwMzcwMDZDQzEgU0NTSSBDaGFuL1RyZ3QgMC82CitjcHFmY1RTOiBOZXcgRkMgcG9ydCAwMDAwREFoIFdXTjogMjEwMDAwMjAzNzAwNTlGNiBTQ1NJIENoYW4vVHJndCAwLzcKK2NwcWZjVFM6IE5ldyBGQyBwb3J0IDAwMDAwRmggV1dOOiA1MDA4MDVGMUZBREIwRTIwIFNDU0kgQ2hhbi9Ucmd0IDAvOAorY3BxZmNUUzogTmV3IEZDIHBvcnQgMDAwMDA4aCBXV046IDUwMDgwNUYxRkFEQjBFQkEgU0NTSSBDaGFuL1RyZ3QgMC85CitjcHFmY1RTOiBOZXcgRkMgcG9ydCAwMDAwMDRoIFdXTjogNTAwODA1RjFGQURCMUVCOSBTQ1NJIENoYW4vVHJndCAwLzEwCitjcHFmY1RTOiBOZXcgRkMgcG9ydCAwMDAwMDJoIFdXTjogNTAwODA1RjFGQURCMUFERSBTQ1NJIENoYW4vVHJndCAwLzExCitjcHFmY1RTOiBOZXcgRkMgcG9ydCAwMDAwMDFoIFdXTjogNTAwODA1RjFGQURCQTJDQSBTQ1NJIENoYW4vVHJndCAwLzEyCitzY3NpNCA6IENvbXBhcSBGaWJyZUNoYW5uZWwgSEJBIFRhY2h5b24gVFMgSFBGQy01MTY2QS8xLjI6IFdXTiA1MDA1MDhCMjAwMTkzRjUwCisgb24gUENJIGJ1cyAwIGRldmljZSAweGEwZmMgaXJxIDUgSU9iYXNlTCAweDM0MDAsIE1FTUJBU0UgMHhjNmVmODYwMAorUENJIGJ1cyB3aWR0aCAzMiBiaXRzLCBidXMgc3BlZWQgMzMgTUh6CitGQ1AtU0NTSSBEcml2ZXIgdjEuMy4wCitHQklDIGRldGVjdGVkOiBTaG9ydC13YXZlLiAgTFBTTSAwaCBNb25pdG9yCitzY3NpIDogNSBob3N0cy4KKyAgVmVuZG9yOiBJQk0gICAgICAgTW9kZWw6IEREWUYtVDE4MzUwUiAgICAgIFJldjogRjYwSworICBUeXBlOiAgIERpcmVjdC1BY2Nlc3MgICAgICAgICAgICAgICAgICAgICAgQU5TSSBTQ1NJIHJldmlzaW9uOiAwMworRGV0ZWN0ZWQgc2NzaSBkaXNrIHNkYiBhdCBzY3NpNCwgY2hhbm5lbCAwLCBpZCAwLCBsdW4gMAorICBWZW5kb3I6IEhJVEFDSEkgICBNb2RlbDogREszMUNKLTcyRkMgICAgICAgUmV2OiBKOEE4CisgIFR5cGU6ICAgRGlyZWN0LUFjY2VzcyAgICAgICAgICAgICAgICAgICAgICBBTlNJIFNDU0kgcmV2aXNpb246IDAyCitEZXRlY3RlZCBzY3NpIGRpc2sgc2RjIGF0IHNjc2k0LCBjaGFubmVsIDAsIGlkIDEsIGx1biAwCisgIFZlbmRvcjogU0VBR0FURSAgIE1vZGVsOiBTVDM5MTAyRkMgICAgICAgICBSZXY6IDAwMDYKKyAgVHlwZTogICBEaXJlY3QtQWNjZXNzICAgICAgICAgICAgICAgICAgICAgIEFOU0kgU0NTSSByZXZpc2lvbjogMDIKK0RldGVjdGVkIHNjc2kgZGlzayBzZGQgYXQgc2NzaTQsIGNoYW5uZWwgMCwgaWQgMiwgbHVuIDAKKyAgVmVuZG9yOiBTRUFHQVRFICAgTW9kZWw6IFNUMzkxMDJGQyAgICAgICAgIFJldjogMDAwNgorICBUeXBlOiAgIERpcmVjdC1BY2Nlc3MgICAgICAgICAgICAgICAgICAgICAgQU5TSSBTQ1NJIHJldmlzaW9uOiAwMgorRGV0ZWN0ZWQgc2NzaSBkaXNrIHNkZSBhdCBzY3NpNCwgY2hhbm5lbCAwLCBpZCAzLCBsdW4gMAorICBWZW5kb3I6IFNFQUdBVEUgICBNb2RlbDogU1QzOTEwMkZDICAgICAgICAgUmV2OiAwMDA2CisgIFR5cGU6ICAgRGlyZWN0LUFjY2VzcyAgICAgICAgICAgICAgICAgICAgICBBTlNJIFNDU0kgcmV2aXNpb246IDAyCitEZXRlY3RlZCBzY3NpIGRpc2sgc2RmIGF0IHNjc2k0LCBjaGFubmVsIDAsIGlkIDQsIGx1biAwCisgIFZlbmRvcjogU0VBR0FURSAgIE1vZGVsOiBTVDM5MTAyRkMgICAgICAgICBSZXY6IDAwMDYKKyAgVHlwZTogICBEaXJlY3QtQWNjZXNzICAgICAgICAgICAgICAgICAgICAgIEFOU0kgU0NTSSByZXZpc2lvbjogMDIKK0RldGVjdGVkIHNjc2kgZGlzayBzZGcgYXQgc2NzaTQsIGNoYW5uZWwgMCwgaWQgNSwgbHVuIDAKKyAgVmVuZG9yOiBTRUFHQVRFICAgTW9kZWw6IFNUMzkxMDJGQyAgICAgICAgIFJldjogMDAwNgorICBUeXBlOiAgIERpcmVjdC1BY2Nlc3MgICAgICAgICAgICAgICAgICAgICAgQU5TSSBTQ1NJIHJldmlzaW9uOiAwMgorRGV0ZWN0ZWQgc2NzaSBkaXNrIHNkaCBhdCBzY3NpNCwgY2hhbm5lbCAwLCBpZCA2LCBsdW4gMAorICBWZW5kb3I6IFNFQUdBVEUgICBNb2RlbDogU1QzOTEwMkZDICAgICAgICAgUmV2OiAwMDA2CisgIFR5cGU6ICAgRGlyZWN0LUFjY2VzcyAgICAgICAgICAgICAgICAgICAgICBBTlNJIFNDU0kgcmV2aXNpb246IDAyCitEZXRlY3RlZCBzY3NpIGRpc2sgc2RpIGF0IHNjc2k0LCBjaGFubmVsIDAsIGlkIDcsIGx1biAwCisgIFZlbmRvcjogQ09NUEFRICAgIE1vZGVsOiBMT0dJQ0FMIFZPTFVNRSAgICBSZXY6IDIuNDgKKyAgVHlwZTogICBEaXJlY3QtQWNjZXNzICAgICAgICAgICAgICAgICAgICAgIEFOU0kgU0NTSSByZXZpc2lvbjogMDIKK0RldGVjdGVkIHNjc2kgZGlzayBzZGogYXQgc2NzaTQsIGNoYW5uZWwgMCwgaWQgOCwgbHVuIDAKKyAgVmVuZG9yOiBDT01QQVEgICAgTW9kZWw6IExPR0lDQUwgVk9MVU1FICAgIFJldjogMi40OAorICBUeXBlOiAgIERpcmVjdC1BY2Nlc3MgICAgICAgICAgICAgICAgICAgICAgQU5TSSBTQ1NJIHJldmlzaW9uOiAwMgorRGV0ZWN0ZWQgc2NzaSBkaXNrIHNkayBhdCBzY3NpNCwgY2hhbm5lbCAwLCBpZCA4LCBsdW4gMQorICBWZW5kb3I6IENPTVBBUSAgICBNb2RlbDogTE9HSUNBTCBWT0xVTUUgICAgUmV2OiAyLjQwCisgIFR5cGU6ICAgRGlyZWN0LUFjY2VzcyAgICAgICAgICAgICAgICAgICAgICBBTlNJIFNDU0kgcmV2aXNpb246IDAyCitEZXRlY3RlZCBzY3NpIGRpc2sgc2RsIGF0IHNjc2k0LCBjaGFubmVsIDAsIGlkIDksIGx1biAwCisgIFZlbmRvcjogQ09NUEFRICAgIE1vZGVsOiBMT0dJQ0FMIFZPTFVNRSAgICBSZXY6IDIuNDAKKyAgVHlwZTogICBEaXJlY3QtQWNjZXNzICAgICAgICAgICAgICAgICAgICAgIEFOU0kgU0NTSSByZXZpc2lvbjogMDIKK0RldGVjdGVkIHNjc2kgZGlzayBzZG0gYXQgc2NzaTQsIGNoYW5uZWwgMCwgaWQgOSwgbHVuIDEKKyAgVmVuZG9yOiBDT01QQVEgICAgTW9kZWw6IExPR0lDQUwgVk9MVU1FICAgIFJldjogMi41NAorICBUeXBlOiAgIERpcmVjdC1BY2Nlc3MgICAgICAgICAgICAgICAgICAgICAgQU5TSSBTQ1NJIHJldmlzaW9uOiAwMgorRGV0ZWN0ZWQgc2NzaSBkaXNrIHNkbiBhdCBzY3NpNCwgY2hhbm5lbCAwLCBpZCAxMCwgbHVuIDAKKyAgVmVuZG9yOiBDT01QQVEgICAgTW9kZWw6IExPR0lDQUwgVk9MVU1FICAgIFJldjogMi41NAorICBUeXBlOiAgIERpcmVjdC1BY2Nlc3MgICAgICAgICAgICAgICAgICAgICAgQU5TSSBTQ1NJIHJldmlzaW9uOiAwMgorRGV0ZWN0ZWQgc2NzaSBkaXNrIHNkbyBhdCBzY3NpNCwgY2hhbm5lbCAwLCBpZCAxMSwgbHVuIDAKKyAgVmVuZG9yOiBDT01QQVEgICAgTW9kZWw6IExPR0lDQUwgVk9MVU1FICAgIFJldjogMi41NAorICBUeXBlOiAgIERpcmVjdC1BY2Nlc3MgICAgICAgICAgICAgICAgICAgICAgQU5TSSBTQ1NJIHJldmlzaW9uOiAwMgorRGV0ZWN0ZWQgc2NzaSBkaXNrIHNkcCBhdCBzY3NpNCwgY2hhbm5lbCAwLCBpZCAxMSwgbHVuIDEKKyAgVmVuZG9yOiBDT01QQVEgICAgTW9kZWw6IExPR0lDQUwgVk9MVU1FICAgIFJldjogMi41NAorICBUeXBlOiAgIERpcmVjdC1BY2Nlc3MgICAgICAgICAgICAgICAgICAgICAgQU5TSSBTQ1NJIHJldmlzaW9uOiAwMgorRGV0ZWN0ZWQgc2NzaSBkaXNrIHNkcSBhdCBzY3NpNCwgY2hhbm5lbCAwLCBpZCAxMiwgbHVuIDAKKyAgVmVuZG9yOiBDT01QQVEgICAgTW9kZWw6IExPR0lDQUwgVk9MVU1FICAgIFJldjogMi41NAorICBUeXBlOiAgIERpcmVjdC1BY2Nlc3MgICAgICAgICAgICAgICAgICAgICAgQU5TSSBTQ1NJIHJldmlzaW9uOiAwMgorRGV0ZWN0ZWQgc2NzaSBkaXNrIHNkciBhdCBzY3NpNCwgY2hhbm5lbCAwLCBpZCAxMiwgbHVuIDEKK3Jlc2l6ZV9kbWFfcG9vbDogdW5rbm93biBkZXZpY2UgdHlwZSAxMgorcmVzaXplX2RtYV9wb29sOiB1bmtub3duIGRldmljZSB0eXBlIDEyCitTQ1NJIGRldmljZSBzZGI6IGhkd3Igc2VjdG9yPSA1MTIgYnl0ZXMuIFNlY3RvcnM9IDM1ODQzNjcwIFsxNzUwMSBNQl0gWzE3LjUgR0JdCisgc2RiOiBzZGIxCitTQ1NJIGRldmljZSBzZGM6IGhkd3Igc2VjdG9yPSA1MTIgYnl0ZXMuIFNlY3RvcnM9IDE0NDQxMDg4MCBbNzA1MTMgTUJdIFs3MC41IEdCXQorIHNkYzogc2RjMQorU0NTSSBkZXZpY2Ugc2RkOiBoZHdyIHNlY3Rvcj0gNTEyIGJ5dGVzLiBTZWN0b3JzPSAxNzc4MzI0MCBbODY4MyBNQl0gWzguNyBHQl0KKyBzZGQ6IHNkZDEKK1NDU0kgZGV2aWNlIHNkZTogaGR3ciBzZWN0b3I9IDUxMiBieXRlcy4gU2VjdG9ycz0gMTc3ODMyNDAgWzg2ODMgTUJdIFs4LjcgR0JdCisgc2RlOiBzZGUxCitTQ1NJIGRldmljZSBzZGY6IGhkd3Igc2VjdG9yPSA1MTIgYnl0ZXMuIFNlY3RvcnM9IDE3NzgzMjQwIFs4NjgzIE1CXSBbOC43IEdCXQorIHNkZjogc2RmMQorU0NTSSBkZXZpY2Ugc2RnOiBoZHdyIHNlY3Rvcj0gNTEyIGJ5dGVzLiBTZWN0b3JzPSAxNzc4MzI0MCBbODY4MyBNQl0gWzguNyBHQl0KKyBzZGc6IHNkZzEKK1NDU0kgZGV2aWNlIHNkaDogaGR3ciBzZWN0b3I9IDUxMiBieXRlcy4gU2VjdG9ycz0gMTc3ODMyNDAgWzg2ODMgTUJdIFs4LjcgR0JdCisgc2RoOiBzZGgxCitTQ1NJIGRldmljZSBzZGk6IGhkd3Igc2VjdG9yPSA1MTIgYnl0ZXMuIFNlY3RvcnM9IDE3NzgzMjQwIFs4NjgzIE1CXSBbOC43IEdCXQorIHNkaTogc2RpMQorU0NTSSBkZXZpY2Ugc2RqOiBoZHdyIHNlY3Rvcj0gNTEyIGJ5dGVzLiBTZWN0b3JzPSAyMDU2MTYwIFsxMDAzIE1CXSBbMS4wIEdCXQorIHNkajogc2RqMQorU0NTSSBkZXZpY2Ugc2RrOiBoZHdyIHNlY3Rvcj0gNTEyIGJ5dGVzLiBTZWN0b3JzPSAyMDUyNzM2IFsxMDAyIE1CXSBbMS4wIEdCXQorIHNkazogc2RrMQorU0NTSSBkZXZpY2Ugc2RsOiBoZHdyIHNlY3Rvcj0gNTEyIGJ5dGVzLiBTZWN0b3JzPSAxNzc2NDMyMCBbODY3MyBNQl0gWzguNyBHQl0KKyBzZGw6IHNkbDEKK1NDU0kgZGV2aWNlIHNkbTogaGR3ciBzZWN0b3I9IDUxMiBieXRlcy4gU2VjdG9ycz0gODM4MDMyMCBbNDA5MSBNQl0gWzQuMSBHQl0KKyBzZG06IHNkbTEKK1NDU0kgZGV2aWNlIHNkbjogaGR3ciBzZWN0b3I9IDUxMiBieXRlcy4gU2VjdG9ycz0gMTc3NjQzMjAgWzg2NzMgTUJdIFs4LjcgR0JdCisgc2RuOiBzZG4xCitTQ1NJIGRldmljZSBzZG86IGhkd3Igc2VjdG9yPSA1MTIgYnl0ZXMuIFNlY3RvcnM9IDE3NzY0MzIwIFs4NjczIE1CXSBbOC43IEdCXQorIHNkbzogc2RvMQorU0NTSSBkZXZpY2Ugc2RwOiBoZHdyIHNlY3Rvcj0gNTEyIGJ5dGVzLiBTZWN0b3JzPSAxNzc2NDMyMCBbODY3MyBNQl0gWzguNyBHQl0KKyBzZHA6IHNkcDEKK1NDU0kgZGV2aWNlIHNkcTogaGR3ciBzZWN0b3I9IDUxMiBieXRlcy4gU2VjdG9ycz0gMjA1NjE2MCBbMTAwMyBNQl0gWzEuMCBHQl0KKyBzZHE6IHNkcTEKK1NDU0kgZGV2aWNlIHNkcjogaGR3ciBzZWN0b3I9IDUxMiBieXRlcy4gU2VjdG9ycz0gMjA1MjczNiBbMTAwMiBNQl0gWzEuMCBHQl0KKyBzZHI6IHNkcjEKKworKioqKioqKioqKioqKioqKioqKioqKioqKgorCitJZiBhIEdCSUMgb2YgdHlwZSBTaG9ydC13YXZlLCBMb25nLXdhdmUsIG9yIENvcHBlciBpcyBkZXRlY3RlZCwgaXQgd2lsbAorcHJpbnQgb3V0OyBvdGhlcndpc2UsICJub25lIiBpcyBkaXNwbGF5ZWQuICBJZiB0aGUgY2FibGluZyBpcyBjb3JyZWN0CithbmQgYSBsb29wIGNpcmN1aXQgaXMgY29tcGxldGVkLCB5b3Ugc2hvdWxkIHNlZSAiTW9uaXRvciI7IG90aGVyd2lzZSwgCisiTG9vcEZhaWwiIChvbiBvcGVuIGNpcmN1aXQpIG9yIHNvbWUgTFBTTSBudW1iZXIvc3RhdGUgd2l0aCBiaXQgMyBzZXQuCisKKworRVJSQVRBOgorMS4gTm9ybWFsbHksIExpbnV4IFNjc2kgcXVlcmllcyBGQyBkZXZpY2VzIHdpdGggSU5RVUlSWSBzdHJpbmdzLiAgQWxsIExVTnMKK2ZvdW5kIGFjY29yZGluZyB0byBJTlFVSVJZIHNob3VsZCBnZXQgUkVBRCBjb21tYW5kcyBhdCBzZWN0b3IgMCB0byBmaW5kCitwYXJ0aXRpb24gdGFibGUsIGV0Yy4gIE9sZGVyIGtlcm5lbHMgb25seSBxdWVyeSB0aGUgZmlyc3QgNCBkZXZpY2VzLiAgU29tZQorTGludXgga2VybmVscyBvbmx5IGxvb2sgZm9yIG9uZSBMVU4gcGVyIHRhcmdldCAoaS5lLiBGQyBkZXZpY2UpLgorCisyLiBQaHlzaWNhbGx5IHJlbW92aW5nIGEgZGV2aWNlLCBvciBhIG1hbGZ1bmN0aW9uaW5nIHN5c3RlbSB3aGljaCBoaWRlcyBhCitkZXZpY2UsIGxlYWRzIHRvIGEgMzAtc2Vjb25kIHRpbWVvdXQgYW5kIHN1YnNlcXVlbnQgX2Fib3J0IGNhbGwuICAKK0luIHNvbWUgcHJvY2VzcyBjb250ZXh0cywgdGhpcyB3aWxsIGhhbmcgdGhlIGtlcm5lbCAoY3Jhc2hpbmcgdGhlIHN5c3RlbSkuCitTaW5nbGUgYml0IGVycm9ycyBpbiBmcmFtZXMgYW5kIHZpcnR1YWxseSBhbGwgaG90IHBsdWdnaW5nIGV2ZW50cyBhcmUgCitncmFjZWZ1bGx5IGhhbmRsZWQgd2l0aCBpbnRlcm5hbCBkcml2ZXIgdGltZXIgYW5kIEFib3J0IHByb2Nlc3NpbmcuCisKKzMuIFNvbWUgU0NTSSBkcml2ZXMgd2l0aCBlcnJvciBjb25kaXRpb25zIHdpbGwgbm90IGhhbmRsZSB0aGUgNyBzZWNvbmQgdGltZW91dAoraW4gdGhpcyBzb2Z0d2FyZSBkcml2ZXIsIGxlYWRpbmcgdG8gaW5maW5pdGUgcmV0cmllcyBvbiB0aW1lZCBvdXQgU0NTSSBjb21tYW5kcy4KK1RoZSA3IHNlY3MgYmFsYW5jZXMgdGhlIG5lZWQgdG8gcXVpY2tseSByZWNvdmVyIGZyb20gbG9zdCBmcmFtZXMgKGVzcC4gb24gc2VxdWVuY2UKK2luaXRpYXRpdmVzKSBhbmQgdGltZSBuZWVkZWQgYnkgb2xkZXIvc2xvd2VyL2Vycm9yLXN0YXRlIGRyaXZlcyBpbiByZXNwb25kaW5nLgorVGhpcyBjYW4gYmUgZWFzaWx5IGNoYW5nZWQgaW4gIkV4Y2hhbmdlc1tdLnRpbWVPdXQiLgorCis0LiBEdWUgdG8gdGhlIG5hdHVyZSBvZiBGQyBzb2Z0IGFkZHJlc3NpbmcsIHRoZXJlIGlzIG5vIGFzc3VyYW5jZSB0aGF0IHRoZSAKK3NhbWUgTFVOcyAoZHJpdmVzKSB3aWxsIGhhdmUgdGhlIHNhbWUgcGF0aCAoZS5nLiAvZGV2L3NkYjEpIGZyb20gb25lIGJvb3QgdG8KK25leHQuICBEeW5hbWljIHNvZnQgYWRkcmVzcyBjaGFuZ2VzIChpLmUuIDI0LWJpdCBGQyBwb3J0X2lkKSBhcmUKK3N1cHBvcnRlZCBkdXJpbmcgcnVuIHRpbWUgKGUuZy4gZHVlIHRvIGhvdCBwbHVnIGV2ZW50KSBieSB0aGUgdXNlIG9mIFdXTiB0bworU0NTSSBOZXh1cyAoY2hhbm5lbC90YXJnZXQvTFVOKSBtYXBwaW5nLgorCis1LiBDb21wYXEgUkE0eDAwIGZpcm13YXJlIHZlcnNpb24gMi41NCBhbmQgbGF0ZXIgc3VwcG9ydHMgU1NQIChTZWxlY3RpdmUgCitTdG9yYWdlIFByZXNlbnRhdGlvbiksIHdoaWNoIG1hcHMgTFVOcyB0byBhIFdXTi4gIElmIFJBNHgwMCBmaXJtd2FyZSBwcmlvcgorMi41NCAoZS5nLiBvbGRlciBjb250cm9sbGVyKSBpcyB1c2VkLCBvciB0aGUgRkMgSEJBIGlzIHJlcGxhY2VkIChhbm90aGVyIFdXTgoraXMgdXNlZCksIGxvZ2ljYWwgdm9sdW1lcyBvbiB0aGUgUkE0eDAwIHdpbGwgbm8gbG9uZ2VyIGJlIHZpc2libGUuCisKKworU2VuZCBxdWVzdGlvbnMvY29tbWVudHMgdG86CitBbXkgVmFuemFudC1Ib2RnZSAoZmlicmVjaGFubmVsQGNvbXBhcS5jb20pCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9kYzM5NXgudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL2RjMzk1eC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUzYjc5YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9kYzM5NXgudHh0CkBAIC0wLDAgKzEsMTAyIEBACitSRUFETUUgZmlsZSBmb3IgdGhlIGRjMzk1eCBTQ1NJIGRyaXZlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1N0YXR1cworLS0tLS0tCitUaGUgZHJpdmVyIGhhcyBiZWVuIHRlc3RlZCB3aXRoIENELVIgYW5kIENELVIvVyBkcml2ZXMuIFRoZXNlIHNob3VsZAorYmUgc2FmZSB0byB1c2UuIFRlc3Rpbmcgd2l0aCBoYXJkIGRpc2tzIGhhcyBub3QgYmVlbiBkb25lIHRvIGFueQorZ3JlYXQgZGVncmVlIGFuZCBjYXV0aW9uIHNob3VsZCBiZSBleGVyY2lzZWQgaWYgeW91IHdhbnQgdG8gYXR0ZW1wdAordG8gdXNlIHRoaXMgZHJpdmVyIHdpdGggaGFyZCBkaXNrcy4KKworVGhpcyBpcyBhIDIuNSBvbmx5IGRyaXZlci4gRm9yIGEgMi40IGRyaXZlciBwbGVhc2Ugc2VlIHRoZSBvcmlnaW5hbAorZHJpdmVyICh3aGljaCB0aGlzIGRyaXZlciBzdGFydGVkIGZyb20pIGF0CitodHRwOi8vd3d3LmdhcmxvZmYuZGUva3VydC9saW51eC9kYzM5NS8KKworUHJvYmxlbXMsIHF1ZXN0aW9ucyBhbmQgcGF0Y2hlcyBzaG91bGQgYmUgc3VibWl0dGVkIHRvIHRoZSBtYWlsaW5nCitsaXN0LiBEZXRhaWxzIG9uIHRoZSBsaXN0LCBpbmNsdWRpbmcgYXJjaGl2ZXMsIGFyZSBhdmFpbGFibGUgYXQKK2h0dHA6Ly9saXN0cy50d2liYmxlLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RjMzk1eC8KKworUGFyYW1ldGVycworLS0tLS0tLS0tLQorVGhlIGRyaXZlciB1c2VzIHRoZSBzZXR0aW5ncyBmcm9tIHRoZSBFRVBST00gc2V0IGluIHRoZSBTQ1NJIEJJT1MgCitzZXR1cC4gSWYgdGhlcmUgaXMgbm8gRUVQUk9NLCB0aGUgZHJpdmVyIHVzZXMgZGVmYXVsdCB2YWx1ZXMuCitCb3RoIGNhbiBiZSBvdmVycmlkZW4gYnkgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMgKG1vZHVsZSBvciBrZXJuZWwKK3BhcmFtZXRlcnMpLgorCitUaGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgYXJlIGF2YWlsYWJsZToKKworIC0gc2FmZQorICAgRGVmYXVsdDogMCwgQWNjZXB0YWJsZSB2YWx1ZXM6IDAgb3IgMQorCisgICBJZiBzYWZlIGlzIHNldCB0byAxIHRoZW4gdGhlIGFkYXB0ZXIgd2lsbCB1c2UgY29uc2VydmF0aXZlCisgICAoInNhZmUiKSBkZWZhdWx0IHNldHRpbmdzLiBUaGlzIHNldHM6CisKKwkJc2hvcnRjdXQgZm9yIGRjMzk1eD03LDQsOSwxNSwyLDEwCisKKyAtIGFkYXB0ZXJfaWQKKyAgIERlZmF1bHQ6IDcsIEFjY2VwdGFibGUgdmFsdWVzOiAwIHRvIDE1CisKKyAgIFNldHMgdGhlIGhvc3QgYWRhcHRlciBTQ1NJIElELgorCisgLSBtYXhfc3BlZWQKKyAgIERlZmF1bHQ6IDEsIEFjY2VwdGFibGUgdmFsdWU6IDAgdG8gNworICAgMCA9IDIwICAgTWh6CisgICAxID0gMTIuMiBNaHoKKyAgIDIgPSAxMCAgIE1oegorICAgMyA9IDggICAgTWh6CisgICA0ID0gNi43ICBNaHoKKyAgIDUgPSA1LjggIEhoegorICAgNiA9IDUgICAgTWh6CisgICA3ID0gNCAgICBNaHoKKworIC0gZGV2X21vZGUKKyAgIEJpdG1hcCBmb3IgZGV2aWNlIGNvbmZpZ3VyYXRpb24KKworICAgRGV2TW9kZSBiaXQgZGVmaW5pdGlvbjoKKyAgICAgIEJpdCBWYWwoaGV4KSBWYWwoZGVjKSAgTWVhbmluZworICAgICAgKjAgICAgMHgwMSAgICAgICAxICAgICBQYXJpdHkgY2hlY2sKKyAgICAgICoxICAgIDB4MDIgICAgICAgMiAgICAgU3luY2hyb25vdXMgTmVnb3RpYXRpb24KKyAgICAgICoyICAgIDB4MDQgICAgICAgNCAgICAgRGlzY29ubmVjdGlvbgorICAgICAgKjMgICAgMHgwOCAgICAgICA4ICAgICBTZW5kIFN0YXJ0IGNvbW1hbmQgb24gc3RhcnR1cC4gKE5vdCB1c2VkKQorICAgICAgKjQgICAgMHgxMCAgICAgIDE2ICAgICBUYWdnZWQgQ29tbWFuZCBRdWV1ZWluZworICAgICAgKjUgICAgMHgyMCAgICAgIDMyICAgICBXaWRlIE5lZ290aWF0aW9uCisKKyAtIGFkYXB0ZXJfbW9kZQorICAgQml0bWFwIGZvciBhZGFwdGVyIGNvbmZpZ3VyYXRpb24KKworICAgQWRhcHRNb2RlIGJpdCBkZWZpbml0aW9uCisgICAgICBCaXQgVmFsKGhleCkgVmFsKGRlYykgIE1lYW5pbmcKKyAgICAgICowICAgIDB4MDEgICAgICAgMSAgICAgU3VwcG9ydCBtb3JlIHRoYW4gdHdvIGRyaXZlcy4gKE5vdCB1c2VkKQorICAgICAgKjEgICAgMHgwMiAgICAgICAyICAgICBVc2UgRE9TIGNvbXBhdGlibGUgbWFwcGluZyBmb3IgSERzIGdyZWF0ZXIgdGhhbiAxR0IuCisgICAgICAqMiAgICAweDA0ICAgICAgIDQgICAgIFJlc2V0IFNDU0kgQnVzIG9uIHN0YXJ0dXAuCisgICAgICAqMyAgICAweDA4ICAgICAgIDggICAgIEFjdGl2ZSBOZWdhdGlvbjogSW1wcm92ZXMgU0NTSSBCdXMgbm9pc2UgaW1tdW5pdHkuCisgICAgICAgNCAgICAweDEwICAgICAgMTYgICAgIEltbWVkaWF0ZSByZXR1cm4gb24gQklPUyBzZWVrIGNvbW1hbmQuIChOb3QgdXNlZCkKKyAgICAoKik1ICAgIDB4MjAgICAgICAzMiAgICAgQ2hlY2sgZm9yIExVTnMgPj0gMS4KKworIC0gdGFncworICAgRGVmYXVsdDogMywgQWNjZXB0YWJsZSB2YWx1ZXM6IDAtNQorICAgCisgICBUaGUgbnVtYmVyIG9mIHRhZ3MgaXMgMTw8eCwgaWYgeCBoYXMgYmVlbiBzcGVjaWZpZWQKKworIC0gcmVzZXRfZGVsYXkKKyAgIERlZmF1bHQ6IDEsIEFjY2VwdGFibGUgdmFsdWVzOiAwLTE4MAorCisgICBUaGUgc2Vjb25kcyB0byBub3QgYWNjZXB0IGNvbW1hbmRzIGFmdGVyIGEgU0NTSSBSZXNldAorCisKK0ZvciB0aGUgYnVpbHQgIGluIGRyaXZlciB0aGUgcGFyYW1ldGVycyBzaG91bGQgYmUgcHJlZml4ZWQgd2l0aAorZGMzOTV4LiAoZWcgImRjMzk1eC5zYWZlPTEiKQorCisKK0NvcHlyaWdodAorLS0tLS0tLS0tCitUaGUgZHJpdmVyIGlzIGZyZWUgc29mdHdhcmUuIEl0IGlzIHByb3RlY3RlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIChHUEwpLiBQbGVhc2UgcmVhZCBpdCwgYmVmb3JlIHVzaW5nIHRoaXMgZHJpdmVyLiBJdCBzaG91bGQgYmUKK2luY2x1ZGVkIGluIHlvdXIga2VybmVsIHNvdXJjZXMgYW5kIHdpdGggeW91ciBkaXN0cmlidXRpb24uIEl0IGNhcnJpZXMgdGhlCitmaWxlbmFtZSBDT1BZSU5HLiBJZiB5b3UgZG9uJ3QgaGF2ZSBpdCwgcGxlYXNlIGFzayBtZSB0byBzZW5kIHlvdSBvbmUgYnkKK2VtYWlsLgorTm90ZTogVGhlIEdOVSBHUEwgc2F5cyBhbHNvIHNvbWV0aGluZyBhYm91dCB3YXJyYW50eSBhbmQgbGlhYmlsaXR5LiAKK1BsZWFzZSBiZSBhd2FyZSB0aGUgZm9sbG93aW5nOiBXaGlsZSB3ZSBkbyBteSBiZXN0IHRvIHByb3ZpZGUgYSB3b3JraW5nIGFuZAorcmVsaWFibGUgZHJpdmVyLCB0aGVyZSBpcyBhIGNoYW5jZSwgdGhhdCBpdCB3aWxsIGtpbGwgeW91ciB2YWx1YWJsZSBkYXRhLiAKK1dlIHJlZnVzZSB0byB0YWtlIGFueSByZXNwb25zaWJpbGl0eSBmb3IgdGhhdC4gVGhlIGRyaXZlciBpcyBwcm92aWRlZCBhcy1pcworYW5kIFlPVSBVU0UgSVQgQVQgWU9VUiBPV04gUkVTUE9OU0lCSUxJVFkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvZHB0aS50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvZHB0aS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU0NWU3MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9kcHRpLnR4dApAQCAtMCwwICsxLDgzIEBACisgLyogVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVVNFCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGZvcm0sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZQorICogcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgcmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZQorICogYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIAorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBgYXMgaXMnIGJ5IEFkYXB0ZWMgYW5kCisgKiBhbnkgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnRpZXMsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCB0aGUKKyAqIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLAorICogYXJlIGRpc2NsYWltZWQuIEluIG5vIGV2ZW50IHNoYWxsIEFkYXB0ZWMgYmUKKyAqIGxpYWJsZSBmb3IgYW55IGRpcmVjdCwgaW5kaXJlY3QsIGluY2lkZW50YWwsIHNwZWNpYWwsIGV4ZW1wbGFyeSBvcgorICogY29uc2VxdWVudGlhbCBkYW1hZ2VzIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgcHJvY3VyZW1lbnQgb2YKKyAqIHN1YnN0aXR1dGUgZ29vZHMgb3Igc2VydmljZXM7IGxvc3Mgb2YgdXNlLCBkYXRhLCBvciBwcm9maXRzOyBvciBidXNpbmVzcworICogaW50ZXJydXB0aW9ucykgaG93ZXZlciBjYXVzZWQgYW5kIG9uIGFueSB0aGVvcnkgb2YgbGlhYmlsaXR5LCB3aGV0aGVyIGluCisgKiBjb250cmFjdCwgc3RyaWN0IGxpYWJpbGl0eSwgb3IgdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2Ugb3Igb3RoZXJ3aXNlKQorICogYXJpc2luZyBpbiBhbnkgd2F5IG91dCBvZiB0aGUgdXNlIG9mIHRoaXMgZHJpdmVyIHNvZnR3YXJlLCBldmVuIGlmIGFkdmlzZWQKKyAqIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZS4KKyAqIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBBZGFwdGVjIEkyTyBSQUlEIGFuZCBEUFQgU21hcnRSQUlEIFYgSTJPIGJvYXJkcy4KKyAqCisgKiBDUkVESVRTOgorICogVGhlIG9yaWdpbmFsIGxpbnV4IGRyaXZlciB3YXMgcG9ydGVkIHRvIExpbnV4IGJ5IEthcmVuIFdoaXRlIHdoaWxlIGF0IAorICogRGVsbCBDb21wdXRlci4gIEl0IHdhcyBwb3J0ZWQgZnJvbSBCb2IgUGFzdGV1cidzIChvZiBEUFQpIG9yaWdpbmFsIAorICogbm9uLUxpbnV4IGRyaXZlci4gIE1hcmsgU2FseXp5biBhbmQgQm9iIFBhc3RldXIgY29uc3VsdGVkIG9uIHRoZSBvcmlnaW5hbAorICogZHJpdmVyLiAKKyAqIAorICogMi4wIHZlcnNpb24gb2YgdGhlIGRyaXZlciBieSBEZWFubmEgQm9uZHMgYW5kIE1hcmsgU2FseXp5bi4KKyAqCisgKiBISVNUT1JZOgorICogVGhlIGRyaXZlciB3YXMgb3JpZ2luYWxseSBwb3J0ZWQgdG8gbGludXggdmVyc2lvbiAyLjAuMzQgCisgKgorICogVjIuMCBSZXdyaXRlIG9mIGRyaXZlci4gIFJlLWFyY2hpdGVjdHVyZWQgYmFzZWQgb24gaTJvIHN1YnN5c3RlbS4KKyAqICAgVGhpcyB3YXMgdGhlIGZpcnN0IGZ1bGwgR1BMIHZlcnNpb24gc2luY2UgdGhlIGxhc3QgdmVyc2lvbiB1c2VkCisgKiAgIGkyb3NpZyBoZWFkZXJzIHdoaWNoIHdlcmUgbm90IEdQTC4gIERldmVsb3BlciBUZXN0aW5nIHZlcnNpb24uCisgKiBWMi4xIEludGVybmFsIHRlc3RpbmcKKyAqIFYyLjIgRmlyc3QgcmVsZWFzZWQgdmVyc2lvbgorICoKKyAqIFYyLjMgCisgKiAgIENoYW5nZXM6CisgKiAgICAgIEFkZGVkIFJhcHRvciBTdXBwb3J0CisgKiAgICAgIEZpeGVkIGJ1ZyBjYXVzaW5nIHN5c3RlbSB0byBoYW5nIHVuZGVyIGV4dHJlbWUgbG9hZCB3aXRoIAorICogICAgICAgICBtYW5hZ2VtZW50IHV0aWxpdGllcyBydW5uaW5nIChyZW1vdmVkIEdGUF9ETUEgZnJvbSBrbWFsbG9jIGZsYWdzKQorICoKKyAqCisgKiBWMi40IEZpcnN0IHZlcnNpb24gcmVhZHkgdG8gYmUgc3VibWl0dGVkIHRvIGJlIGVtYmVkZGVkIGluIHRoZSBrZXJuZWwKKyAqICAgQ2hhbmdlczogCisgKiAgICAgIEltcGxlbWVudGVkIHN1Z2dlc3Rpb25zIGZyb20gQWxhbiBDb3gKKyAqICAgICAgQWRkZWQgY2FsY3VsYXRpb24gb2YgcmVzaWQgZm9yIHNnIGxheWVyCisgKiAgICAgIEJldHRlciBlcnJvciBoYW5kbGluZworICogICAgICAgICBBZGRlZCBjaGVja2luZyB1bmRlcmZsb3cgY29uZHRpb25zIAorICogICAgICAgICBBZGRlZCBEQVRBUFJPVEVDVCBjaGVja2luZworICogICAgICAgICBDaGFuZ2VkIGVycm9yIHJldHVybiBjb2RlcworICogICAgICAgICBGaXhlZCBwb2ludGVyIGJ1ZyBpbiBidXMgcmVzZXQgcm91dGluZQorICogICAgICBFbmFibGVkIGhiYSByZXNldCBmcm9tIGlvY3RscyAoYWxsb3dzIGEgRlcgZmxhc2ggdG8gcmVib290IGFuZCB1c2UgdGhlIG5ldworICogICAgICAgICBGVyB3aXRob3V0IGhhdmluZyB0byByZWJvb3QpCisgKiAgICAgIENoYW5nZWQgcHJvYyBvdXRwdXQKKyAqCisgKiBUT0RPOgorICogICAgICBBZGQgNjQgYml0IFNjYXR0ZXIgR2F0aGVyIHdoZW4gY29tcGlsZWQgb24gNjQgYml0IGFyY2hpdGVjdHVyZXMKKyAqICAgICAgQWRkIHNwYXJzZSBsdW4gc2Nhbm5pbmcgCisgKiAgICAgIEFkZCBjb2RlIHRoYXQgY2hlY2tzIGlmIGEgZGV2aWNlIHRoYXQgaGFkIGJlZW4gdGFrZW4gb2ZmbGluZSBpcworICogICAgICAgICBub3cgb25saW5lIChhdCB0aGUgRlcgbGV2ZWwpIHdoZW4gdGVzdCB1bml0IHJlYWR5IG9yIGlucXVpcnkgCisgKiAgICAgICAgIGNvbW1hbmQgZnJvbSBzY3NpLWNvcmUKKyAqICAgICAgQWRkIHByb2MgcmVhZCBpbnRlcmZhY2UKKyAqICAgICAgICAgYnVzcmVzY2FuIGNvbW1hbmQKKyAqICAgICAgICAgcmVzY2FuIGNvbW1hbmQKKyAqICAgICAgQWRkIGNvZGUgdG8gcmVzY2FuIHJvdXRpbmUgdGhhdCBub3RpZmllcyBzY3NpLWNvcmUgYWJvdXQgbmV3IGRldmljZXMKKyAqICAgICAgQWRkIHN1cHBvcnQgZm9yIEMtUENJIChob3RwbHVnIHN0dWZmKQorICogICAgICBBZGQgaW9jdGwgcGFzc3RocnUgZXJyb3IgcmVjb3ZlcnkKKyAqCisgKiBOT1RFUzoKKyAqIFRoZSBEUFQgY2FyZCBvcHRpbWl6ZXMgdGhlIG9yZGVyIG9mIHByb2Nlc3NpbmcgY29tbWFuZHMuICBDb25zZXF1ZW50bHksCisgKiBhIGNvbW1hbmQgbWF5IHRha2UgdXAgdG8gNiBtaW51dGVzIHRvIGNvbXBsZXRlIGFmdGVyIGl0IGhhcyBiZWVuIHNlbnQKKyAqIHRvIHRoZSBib2FyZC4gIAorICoKKyAqIFRoZSBmaWxlcyBkcHRpX2lvY3RsLmggZHB0c2lnLmggb3NkX2RlZnMuaCBvc2RfdXRpbC5oIHN5c19pbmZvLmggYXJlIHBhcnQgb2YgdGhlCisgKiBpbnRlcmZhY2UgZmlsZXMgZm9yIEFkYXB0ZWMncyBtYW5hZ2VtZW50IHJvdXRpbmVzLiAgVGhlc2UgZGVmaW5lIHRoZSBzdHJ1Y3R1cmVzIHVzZWQKKyAqIGluIHRoZSBpb2N0bHMuICBUaGV5IGFyZSB3cml0dGVuIHRvIGJlIHBvcnRhYmxlLiAgVGhleSBhcmUgaGFyZCB0byByZWFkLCBidXQgSSBuZWVkCisgKiB0byB1c2UgdGhlbSAnYXMgaXMnIG9yIEkgY2FuIG1pc3MgY2hhbmdlcyBpbiB0aGUgaW50ZXJmYWNlLgorICoKKyAqLworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvZHRjM3g4MC50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvZHRjM3g4MC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThhZTYyMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9kdGMzeDgwLnR4dApAQCAtMCwwICsxLDQzIEBACitSRUFETUUgZmlsZSBmb3IgdGhlIExpbnV4IERUQzMxODAvMzI4MCBzY3NpIGRyaXZlci4KK2J5IFJheSBWYW4gVGFzc2xlIChyYXl2dEBjb21tLm1vdC5jb20pICBNYXJjaCAxOTk2CitCYXNlZCBvbiB0aGUgZ2VuZXJpYyAmIGNvcmUgTkNSNTM4MCBjb2RlIGJ5IERyZXcgRWNraGFyZAorCitTQ1NJIGRldmljZSBkcml2ZXIgZm9yIHRoZSBEVEMgMzE4MC8zMjgwLgorRGF0YSBUZWNobm9sb2d5IENvcnAtLS1hIGRpdmlzaW9uIG9mIFF1bWUuCisKK1RoZSAzMjgwIGhhcyBhIHN0YW5kYXJkIGZsb3BweSBpbnRlcmZhY2UuCisKK1RoZSAzMTgwIGRvZXMgbm90LiAgT3RoZXJ3aXNlLCB0aGV5IGFyZSBpZGVudGljYWwuCisKK1RoZSBEVEMzeDgwIGRvZXMgbm90IHN1cHBvcnQgRE1BIGJ1dCBpdCBkb2VzIGhhdmUgUHNldWRvLURNQSB3aGljaCBpcworc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIuCisKK0l0J3MgRFRDNDA2IHNjc2kgY2hpcCBpcyBzdXBwb3NlZGx5IGNvbXBhdGlibGUgd2l0aCB0aGUgTkNSIDUzQzQwMC4KK0l0IGlzIG1lbW9yeSBtYXBwZWQsIHVzZXMgYW4gSVJRLCBidXQgbm8gZG1hIG9yIGlvLXBvcnQuICBUaGVyZSBpcworaW50ZXJuYWwgRE1BLCBiZXR3ZWVuIFNDU0kgYnVzIGFuZCBhbiBvbi1jaGlwIDEyOC1ieXRlIGJ1ZmZlci4gIERvdWJsZQorYnVmZmVyaW5nIGlzIGRvbmUgYXV0b21hZ2ljYWxseSBieSB0aGUgY2hpcC4gIERhdGEgaXMgdHJhbnNmZXJyZWQKK2JldHdlZW4gdGhlIG9uLWNoaXAgYnVmZmVyIGFuZCBDUFUvUkFNIHZpYSBtZW1vcnkgbW92ZXMuCisKK1RoZSBkcml2ZXIgZGV0ZWN0cyB0aGUgcG9zc2libGUgbWVtb3J5IGFkZHJlc3NlcyAoanVtcGVyIHNlbGVjdGFibGUpOgorCUNDMDAsIERDMDAsIEM4MDAsIGFuZCBEODAwCitUaGUgcG9zc2libGUgSVJRJ3MgKGp1bXBlciBzZWxlY3RhYmxlKSBhcmU6CisJSVJRIDEwLCAxMSwgMTIsIDE1CitQYXJpdHkgaXMgc3VwcG9ydGVkIGJ5IHRoZSBjaGlwLCBidXQgbm90IGJ5IHRoaXMgZHJpdmVyLgorSW5mb3JtYXRpb24gY2FuIGJlIG9idGFpbmVkIGZyb20gL3Byb2Mvc2NzaS9kdGMzYzgwL04uCisKK05vdGUgb24gaW50ZXJydXB0czoKKworVGhlIGRvY3VtZW50YXRpb24gc2F5cyB0aGF0IGl0IGNhbiBiZSBzZXQgdG8gaW50ZXJydXB0IHdoZW5ldmVyIHRoZQorb24tY2hpcCBidWZmZXIgbmVlZHMgQ1BVIGF0dGVudGlvbi4gIEkgY291bGRuJ3QgZ2V0IHRoaXMgdG8gd29yay4gIFNvCit0aGUgZHJpdmVyIHBvbGxzIGZvciBkYXRhLXJlYWR5IGluIHRoZSBwc2V1ZG8tRE1BIHRyYW5zZmVyIHJvdXRpbmUuCitUaGUgaW50ZXJydXB0IHN1cHBvcnQgcm91dGluZXMgaW4gdGhlIE5DUjMyODAuYyBjb3JlIG1vZHVsZXMgaGFuZGxlCitzY3NpIGRpc2Nvbm5lY3QvcmVjb25uZWN0LCBhbmQgdGhpcyAobW9zdGx5KSB3b3Jrcy4gIEhvd2V2ZXIuLi4uLiAgSQoraGF2ZSB0ZXN0ZWQgaXQgd2l0aCA0IHRvdGFsbHkgZGlmZmVyZW50IGhhcmQgZHJpdmVzIChib3RoIFNDU0ktMSBhbmQKK1NDU0ktMiksIGFuZCBvbmUgQ0RST00gZHJpdmUuICBJbnRlcnJ1cHRzIHdvcmtzIGdyZWF0IGZvciBhbGwgYnV0IG9uZQorc3BlY2lmaWMgaGFyZCBkcml2ZS4gIEZvciB0aGlzIG9uZSwgdGhlIGRyaXZlciB3aWxsIGV2ZW50dWFsbHkgaGFuZyBpbgordGhlIHRyYW5zZmVyIHN0YXRlLiAgSSBoYXZlIHRlc3RlZCB3aXRoOiAiZGQgYnM9NGsgY291bnQ9MmsKK29mPS9kZXYvbnVsbCBpZj0vZGV2L3NkYiIuICBJdCByZWFkcyBvayBmb3IgYSB3aGlsZSwgdGhlbiBoYW5ncy4KK0FmdGVyIGJlYXRpbmcgbXkgaGVhZCBhZ2FpbnN0IHRoaXMgZm9yIGEgY291cGxlIG9mIHdlZWtzLCBnZXR0aW5nCitub3doZXJlLCBJIGdpdmUgdXAuICBTby4uLi4uVGhpcyBkcml2ZXIgZG9lcyBOT1QgdXNlIGludGVycnVwdHMsIGV2ZW4KK2lmIHlvdSBoYXZlIHRoZSBjYXJkIGp1bXBlcmVkIHRvIGFuIElSUS4gIFByb2JhYmx5IG5vYm9keSB3aWxsIGV2ZXIKK2NhcmUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvZ19OQ1I1MzgwLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9nX05DUjUzODAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiODBmNTYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvZ19OQ1I1MzgwLnR4dApAQCAtMCwwICsxLDYzIEBACitSRUFETUUgZmlsZSBmb3IgdGhlIExpbnV4IGdfTkNSNTM4MCBkcml2ZXIuCisKKyhjKSAxOTkzIERyZXcgRWNraGFyZAorTkNSNTNjNDAwIGV4dGVuc2lvbnMgKGMpIDE5OTQsMTk5NSwxOTk2IEtldmluIExlbnRpbgorCitUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBOQ1I1M2M0MDAgZXh0ZW5zaW9ucyBieSBLZXZpbiBMZW50aW4gYW5kIHNvbWUKK2VuaGFuY2VtZW50cyB0byB0aGUgTkNSNTM4MCBjb3JlLgorCitUaGlzIGRyaXZlciBzdXBwb3J0cyBib3RoIE5DUjUzODAgYW5kIE5DUjUzYzQwMCBjYXJkcyBpbiBwb3J0IG9yIG1lbW9yeQorbWFwcGVkIG1vZGVzLiBDdXJyZW50bHkgdGhpcyBkcml2ZXIgY2FuIG9ubHkgc3VwcG9ydCBvbmUgb2YgdGhvc2UgbWFwcGluZworbW9kZXMgYXQgYSB0aW1lIGJ1dCBpdCBkb2VzIHN1cHBvcnQgYm90aCBvZiB0aGVzZSBjaGlwcyBhdCB0aGUgc2FtZSB0aW1lLgorVGhlIG5leHQgcmVsZWFzZSBvZiB0aGlzIGRyaXZlciB3aWxsIHN1cHBvcnQgcG9ydCAmIG1lbW9yeSBtYXBwZWQgY2FyZHMgYXQKK3RoZSBzYW1lIHRpbWUuIEl0IHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSBtdWx0aXBsZSBkaWZmZXJlbnQgY2FyZHMgaW4gdGhlCitzYW1lIG1hY2hpbmUuCisKK1RoZSBkcml2ZXJzL3Njc2kvTWFrZWZpbGUgaGFzIGFuIG92ZXJyaWRlIGluIGl0IGZvciB0aGUgbW9zdCBjb21tb24KK05DUjUzYzQwMCBjYXJkLCB0aGUgVHJhbnRvciBUMTMwQiBpbiBpdHMgZGVmYXVsdCBjb25maWd1cmF0aW9uOgorCVBvcnQ6IDB4MzUwCisJSVJRIDogNQorCitUaGUgTkNSNTNjNDAwIGRvZXMgbm90IHN1cHBvcnQgRE1BIGJ1dCBpdCBkb2VzIGhhdmUgUHNldWRvLURNQSB3aGljaCBpcworc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIuCisKK0lmIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZG9lcyBub3Qgd29yayBmb3IgeW91LCB5b3UgY2FuIHVzZSB0aGUga2VybmVsCitjb21tYW5kIGxpbmVzIChlZyB1c2luZyB0aGUgbGlsbyBhcHBlbmQgY29tbWFuZCk6CisJbmNyNTM4MD1wb3J0LGlycSxkbWEKKwluY3I1M2M0MDA9cG9ydCxpcnEKK29yCisJbmNyNTM4MD1iYXNlLGlycSxkbWEKKwluY3I1M2M0MDA9YmFzZSxpcnEKKworVGhlIGRyaXZlciBkb2VzIG5vdCBwcm9iZSBmb3IgYW55IGFkZHJlc3NlcyBvciBwb3J0cyBvdGhlciB0aGFuIHRob3NlIGluCit0aGUgT1ZFUlJJREUgb3IgZ2l2ZW4gdG8gdGhlIGtlcm5lbCBhcyBhYm92ZS4KKworVGhpcyBkcml2ZXIgcHJvdmlkZXMgc29tZSBpbmZvcm1hdGlvbiBvbiB3aGF0IGl0IGhhcyBkZXRlY3RlZCBpbgorL3Byb2Mvc2NzaS9nX05DUjUzODAveCB3aGVyZSB4IGlzIHRoZSBzY3NpIGNhcmQgbnVtYmVyIGFzIGRldGVjdGVkIGF0IGJvb3QKK3RpbWUuIE1vcmUgaW5mbyB0byBjb21lIGluIHRoZSBmdXR1cmUuCisKK1doZW4gTkNSNTNjNDAwIHN1cHBvcnQgaXMgY29tcGlsZWQgaW4sIEJJT1MgcGFyYW1ldGVycyB3aWxsIGJlIHJldHVybmVkIGJ5Cit0aGUgZHJpdmVyICh0aGUgcmF3IDUzODAgZHJpdmVyIGRvZXMgbm90IGFuZCBJIGRvbid0IHBsYW4gdG8gZmlkZGxlIHdpdGgKK2l0ISkuCisKK1RoaXMgZHJpdmVyIHdvcmtzIGFzIGEgbW9kdWxlLgorV2hlbiBpbmNsdWRlZCBhcyBhIG1vZHVsZSwgcGFyYW1ldGVycyBjYW4gYmUgcGFzc2VkIG9uIHRoZSBpbnNtb2QvbW9kcHJvYmUKK2NvbW1hbmQgbGluZToKKyAgbmNyX2lycT14eCAgIHRoZSBpbnRlcnJ1cHQKKyAgbmNyX2FkZHI9eHggIHRoZSBwb3J0IG9yIGJhc2UgYWRkcmVzcyAoZm9yIHBvcnQgb3IgbWVtb3J5CisgICAgICAgICAgICAgICBtYXBwZWQsIHJlc3AuKQorICBuY3JfZG1hPXh4ICAgdGhlIERNQQorICBuY3JfNTM4MD0xICAgdG8gc2V0IHVwIGZvciBhIE5DUjUzODAgYm9hcmQKKyAgbmNyXzUzYzQwMD0xIHRvIHNldCB1cCBmb3IgYSBOQ1I1M0M0MDAgYm9hcmQKK2UuZy4KK21vZHByb2JlIGdfTkNSNTM4MCBuY3JfaXJxPTUgbmNyX2FkZHI9MHgzNTAgbmNyXzUzODA9MQorICBmb3IgYSBwb3J0IG1hcHBlZCBOQ1I1MzgwIGJvYXJkIG9yCittb2Rwcm9iZSBnX05DUjUzODAgbmNyX2lycT0yNTUgbmNyX2FkZHI9MHhjODAwMCBuY3JfNTNjNDAwPTEKKyAgZm9yIGEgbWVtb3J5IG1hcHBlZCBOQ1I1M0M0MDAgYm9hcmQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgorCisoMjU1IHNob3VsZCBiZSBzcGVjaWZpZWQgZm9yIG5vIG9yIERNQSBpbnRlcnJ1cHQsIDI1NCB0byBhdXRvcHJvYmUgZm9yIGFuIAorICAgICBJUlEgbGluZSBpZiBvdmVycmlkZGVuIG9uIHRoZSBjb21tYW5kIGxpbmUuKQorCisKK0tldmluIExlbnRpbgorSy5MZW50aW5AY3MubW9uYXNoLmVkdS5hdQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL2libW1jYS50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvaWJtbWNhLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODE0NDkxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL2libW1jYS50eHQKQEAgLTAsMCArMSwxNDAyIEBACisKKyAgICAgICAgICAgICAgIC09PCBUaGUgSUJNIE1pY3JvY2hhbm5lbCBTQ1NJLVN1YnN5c3RlbSA+PS0KKwkgICAgICAgCisJICAgICAgICAgICAgICAgICBmb3IgdGhlIElCTSBQUy8yIHNlcmllcworCQkgCisJICAJICAgTG93IExldmVsIFNvZnR3YXJlLURyaXZlciBmb3IgTGludXgKKwkJIAorICAgICBDb3B5cmlnaHQgKGMpIDE5OTUgU3Ryb20gU3lzdGVtcywgSW5jLiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSAKKyAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gT3JpZ2luYWxseSB3cml0dGVuIGJ5IE1hcnRpbiBLb2xpbmVrLCBEZWNlbWJlciAxOTk1LgorICAgT2ZmaWNpYWxseSBtb2RpZmllZCBhbmQgbWFpbnRhaW5lZCBieSBNaWNoYWVsIExhbmcgc2luY2UgSmFudWFyeSAxOTk5LgorCSAgIAorIAkgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gNC4wYQorCQorICAgTGFzdCB1cGRhdGU6IEphbnVhcnkgMywgMjAwMQorICAgCisgICBCZWZvcmUgeW91IFN0YXJ0CisgICAtLS0tLS0tLS0tLS0tLS0tCisgICBUaGlzIGlzIHRoZSBjb21tb24gUkVBRE1FLmlibW1jYSBmaWxlIGZvciBhbGwgZHJpdmVyIHJlbGVhc2VzIG9mIHRoZSAKKyAgIElCTSBNQ0EgU0NTSSBkcml2ZXIgZm9yIExpbnV4LiBQbGVhc2Ugbm90ZSwgdGhhdCBkcml2ZXIgcmVsZWFzZXMgNC4wCisgICBvciBuZXdlciBkbyBub3Qgd29yayB3aXRoIGtlcm5lbCB2ZXJzaW9ucyBvbGRlciB0aGFuIDIuNC4wLCB3aGlsZSBkcml2ZXIKKyAgIHZlcnNpb25zIG9sZGVyIHRoYW4gNC4wIGRvIG5vdCB3b3JrIHdpdGgga2VybmVscyAyLjQuMCBvciBsYXRlciEgSWYgeW91CisgICB0cnkgdG8gY29tcGlsZSB5b3VyIGtlcm5lbCB3aXRoIHRoZSB3cm9uZyBkcml2ZXIgc291cmNlLCB0aGUgCisgICBjb21waWxhdGlvbiBpcyBhYm9ydGVkIGFuZCB5b3UgZ2V0IGEgY29ycmVzcG9uZGluZyBlcnJvciBtZXNzYWdlLiBUaGlzIGlzCisgICBubyBidWcgaW4gdGhlIGRyaXZlci4gSXQgcHJldmVudHMgeW91IGZyb20gdXNpbmcgdGhlIHdyb25nIHNvdXJjZWNvZGUKKyAgIHdpdGggdGhlIHdyb25nIGtlcm5lbCB2ZXJzaW9uLgorCisgICBBdXRob3JzIG9mIHRoaXMgRHJpdmVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLSBDaHJpcyBCZWF1cmVnYXJkIChpbXByb3ZlbWVudCBvZiB0aGUgU0NTSS1kZXZpY2UgbWFwcGluZyBieSB0aGUgZHJpdmVyKQorICAgIC0gTWFydGluIEtvbGluZWsgKG9yaWdpbiwgZmlyc3QgcmVsZWFzZSBvZiB0aGlzIGRyaXZlcikKKyAgICAtIEtsYXVzIEt1ZGllbGthIChtdWx0aXBsZSBTQ1NJLWhvc3QgbWFuYWdlbWVudC9kZXRlY3Rpb24sIGFkYXB0aW9uIHRvCisgICAgICAgICAgICAgICAgICAgICAgTGludXggS2VybmVsIDIuMS54LCBtb2R1bGUgc3VwcG9ydCkKKyAgICAtIE1pY2hhZWwgTGFuZyAoYXNzaWduaW5nIG9yaWdpbmFsIHB1bi9sdW4gbWFwcGluZywgZHluYW1pY2FsIGxkbgorICAgICAgICAgICAgICAgICAgICBhc3NpZ25tZW50LCByZXdyaXR0ZW4gYWRhcHRlciBkZXRlY3Rpb24sIHRoaXMgZmlsZSwgCisJCSAgICBwYXRjaGVzLCBvZmZpY2lhbCBkcml2ZXIgbWFpbnRlbmFuY2UgYW5kIHN1YnNlcXVlbnQgCisJCSAgICBkZWJ1Z2dpbmcsIHJlbGF0ZWQgd2l0aCB0aGUgZHJpdmVyKQorCisgICBUYWJsZSBvZiBDb250ZW50cworICAgLS0tLS0tLS0tLS0tLS0tLS0KKyAgIDEgQWJzdHJhY3QKKyAgIDIgRHJpdmVyIERlc2NyaXB0aW9uCisgICAgIDIuMSAgSUJNIFNDU0ktU3Vic3lzdGVtIERldGVjdGlvbgorICAgICAyLjIgIFBoeXNpY2FsIFVuaXRzLCBMb2dpY2FsIFVuaXRzLCBhbmQgTG9naWNhbCBEZXZpY2VzCisgICAgIDIuMyAgU0NTSS1EZXZpY2UgUmVjb2duaXRpb24gYW5kIGR5bmFtaWNhbCBsZG4gQXNzaWdubWVudAorICAgICAyLjQgIFNDU0ktRGV2aWNlIE9yZGVyCisgICAgIDIuNSAgUmVndWxhciBTQ1NJLUNvbW1hbmQtUHJvY2Vzc2luZworICAgICAyLjYgIEFib3J0ICYgUmVzZXQgQ29tbWFuZHMKKyAgICAgMi43ICBEaXNrIEdlb21ldHJ5CisgICAgIDIuOCAgS2VybmVsIEJvb3QgT3B0aW9uCisgICAgIDIuOSAgRHJpdmVyIE1vZHVsZSBTdXBwb3J0CisgICAgIDIuMTAgTXVsdGlwbGUgSG9zdGFkYXB0ZXIgU3VwcG9ydAorICAgICAyLjExIC9wcm9jL3Njc2ktRmlsZXN5c3RlbSBJbmZvcm1hdGlvbgorICAgICAyLjEyIC9wcm9jL21jYS1GaWxlc3lzdGVtIEluZm9ybWF0aW9uCisgICAgIDIuMTMgU3VwcG9ydGVkIElCTSBTQ1NJLVN1YnN5c3RlbXMKKyAgICAgMi4xNCBMaW51eCBLZXJuZWwgVmVyc2lvbnMKKyAgIDMgQ29kZSBIaXN0b3J5CisgICA0IFRvIGRvCisgICA1IFVzZXJzJyBNYW51YWwKKyAgICAgNS4xIENvbW1hbmRsaW5lIFBhcmFtZXRlcnMKKyAgICAgNS4yIFRyb3VibGVzaG9vdGluZworICAgICA1LjMgQnVncmVwb3J0cworICAgICA1LjQgU3VwcG9ydCBXV1ctcGFnZQorICAgNiBSZWZlcmVuY2VzCisgICA3IENyZWRpdHMgdG8KKyAgICAgNy4xIFBlb3BsZQorICAgICA3LjIgU3BvbnNvcnMgJiBTdXBwb3J0ZXJzCisgICA4IFRyYWRlbWFya3MKKyAgIDkgRGlzY2xhaW1lcgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICogKgorCisgICAxIEFic3RyYWN0CisgICAtLS0tLS0tLS0tCisgICBUaGlzIFJFQURNRS1maWxlIGRlc2NyaWJlcyB0aGUgSUJNIFNDU0ktc3Vic3lzdGVtIGxvdyBsZXZlbCBkcml2ZXIgZm9yIAorICAgTGludXguIFRoZSBkZXNjcmlwdGlvbnMgd2hpY2ggd2VyZSBmb3JtZXJseSBrZXB0IGluIHRoZSBzb3VyY2UtY29kZSBoYXZlIAorICAgYmVlbiB0YWtlbiBvdXQgdG8gdGhpcyBmaWxlIHRvIGVhc2lmeSB0aGUgY29kZXMnIHJlYWRhYmlsaXR5LiBUaGUgZHJpdmVyIAorICAgZGVzY3JpcHRpb24gaGFzIGJlZW4gdXBkYXRlZCwgYXMgbW9zdCBvZiB0aGUgZm9ybWVyIGRlc2NyaXB0aW9uIHdhcyBhbHJlYWR5CisgICBxdWl0ZSBvdXRkYXRlZC4gVGhlIGhpc3Rvcnkgb2YgdGhlIGRyaXZlciBkZXZlbG9wbWVudCBpcyBhbHNvIGtlcHQgaW5zaWRlIAorICAgaGVyZS4gTXVsdGlwbGUgaGlzdG9yaWNhbCBkZXZlbG9wbWVudHMgaGF2ZSBiZWVuIHN1bW1hcml6ZWQgdG8gc2hvcnRlbiB0aGUgCisgICB0ZXh0c2l6ZSBhIGJpdC4gQXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUgeW91IGNhbiBmaW5kIGEgc21hbGwgbWFudWFsIGZvciAKKyAgIHRoaXMgZHJpdmVyIGFuZCBoaW50cyB0byBnZXQgaXQgcnVubmluZyBvbiB5b3VyIG1hY2hpbmUuCisKKyAgIDIgRHJpdmVyIERlc2NyaXB0aW9uCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgMi4xIElCTSBTQ1NJLVN1YnN5c3RlbSBEZXRlY3Rpb24KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBUaGlzIGlzIGRvbmUgaW4gdGhlIGlibW1jYV9kZXRlY3QoKSBmdW5jdGlvbi4gSXQgZmlyc3QgY2hlY2tzLCBpZiB0aGUKKyAgIE1pY3JvY2hhbm5lbC1idXMgc3VwcG9ydCBpcyBlbmFibGVkLCBhcyB0aGUgSUJNIFNDU0ktc3Vic3lzdGVtIG5lZWRzIHRoZQorICAgTWljcm9jaGFubmVsLiBJbiBhIG5leHQgc3RlcCwgYSBmcmVlIGludGVycnVwdCBpcyBjaG9zZW4gYW5kIHRoZSBtYWluCisgICBpbnRlcnJ1cHQgaGFuZGxlciBpcyBjb25uZWN0ZWQgdG8gaXQgdG8gaGFuZGxlIGFuc3dlcnMgb2YgdGhlIFNDU0ktCisgICBzdWJzeXN0ZW0ocykuIElmIHRoZSBGL1cgU0NTSS1hZGFwdGVyIGlzIGZvcmNlZCBieSB0aGUgQklPUyB0byB1c2UgSVJRMTEKKyAgIGluc3RlYWQgb2YgSVJRMTQsIElSUTExIGlzIHVzZWQgZm9yIHRoZSBJQk0gU0NTSS0yIEYvVyBhZGFwdGVyLiBJbiBhIAorICAgZnVydGhlciBzdGVwIGl0IGlzIGNoZWNrZWQsIGlmIHRoZSBhZGFwdGVyIGdldHMgZGV0ZWN0ZWQgYnkgZm9yY2UgZnJvbQorICAgdGhlIGtlcm5lbCBjb21tYW5kbGluZSwgd2hlcmUgdGhlIEkvTyBwb3J0IGFuZCB0aGUgU0NTSS1zdWJzeXN0ZW0gaWQgY2FuIAorICAgYmUgc3BlY2lmaWVkLiBUaGUgbmV4dCBzdGVwIGNoZWNrcyBpZiB0aGVyZSBpcyBhbiBpbnRlZ3JhdGVkIFNDU0ktc3Vic3lzdGVtCisgICBpbnN0YWxsZWQuIFRoaXMgcmVnaXN0ZXIgYXJlYSBpcyBmaXhlZCB0aHJvdWdoIGFsbCBJQk0gUFMvMiBNQ0EtbWFjaGluZXMgCisgICBhbmQgYXBwZWFycyBhcyBzb21ldGhpbmcgbGlrZSBhIHZpcnR1YWwgc2xvdCAxMCBvZiB0aGUgTUNBLWJ1cy4gT24gbW9zdAorICAgUFMvMiBtYWNoaW5lcywgdGhlIFBPUyByZWdpc3RlcnMgb2Ygc2xvdCAxMCBhcmUgc2V0IHRvIDB4ZmYgb3IgMHgwMCBpZiBub3QKKyAgIGludGVncmF0ZWQgU0NTSS1jb250cm9sbGVyIGlzIGF2YWlsYWJsZS4gQnV0IG9uIGNlcnRhaW4gUFMvMnMsIGxpa2UgbW9kZWwgCisgICA5NTk1LCB0aGlzIHNsb3QgMTAgaXMgdXNlZCB0byBzdG9yZSBvdGhlciBpbmZvcm1hdGlvbiB3aGljaCBhdCBlYXJsaWVyCisgICBzdGFnZSBjb25mdXNlZCB0aGUgZHJpdmVyIGFuZCByZXN1bHRlZCBpbiB0aGUgZGV0ZWN0aW9uIG9mIHNvbWUgZ2hvc3QtU0NTSS4gCisgICBJZiBQT1MtcmVnaXN0ZXIgMiBhbmQgMyBhcmUgbm90IDB4MDAgYW5kIG5vdCAweGZmLCBidXQgYWxsIG90aGVyIFBPUworICAgcmVnaXN0ZXJzIGFyZSBlaXRoZXIgMHhmZiBvciAweDAwLCB0aGVyZSBtdXN0IGJlIGFuIGludGVncmF0ZWQgU0NTSS0KKyAgIHN1YnN5c3RlbSBwcmVzZW50IGFuZCBpdCB3aWxsIGJlIHJlZ2lzdGVyZWQgYXMgSUJNIEludGVncmF0ZWQgU0NTSS0KKyAgIFN1YnN5c3RlbS4gVGhlIG5leHQgc3RlcCBjaGVja3MsIGlmIHRoZXJlIGlzIGEgc2xvdC1hZGFwdGVyIGluc3RhbGxlZCBvbiAKKyAgIHRoZSBNQ0EtYnVzLiBUbyBnZXQgdGhpcywgdGhlIGZpcnN0IHR3byBQT1MtcmVnaXN0ZXJzLCB0aGF0IHJlcHJlc2VudCB0aGUgCisgICBhZGFwdGVyIElEIGFyZSBjaGVja2VkLiBJZiB0aGV5IGZpdCB0byBvbmUgb2YgdGhlIGlkcywgc3RvcmVkIGluIHRoZSAKKyAgIGFkYXB0ZXIgbGlzdCwgYSBTQ1NJLXN1YnN5c3RlbSBpcyBhc3N1bWVkIHRvIGJlIGZvdW5kIGluIGEgc2xvdCBhbmQgd2lsbCBiZSAKKyAgIHJlZ2lzdGVyZWQuIFRoaXMgY2hlY2sgaXMgZG9uZSB0aHJvdWdoIGFsbCBwb3NzaWJsZSBNQ0EtYnVzIHNsb3RzIHRvIGFsbG93IAorICAgbW9yZSB0aGFuIG9uZSBTQ1NJLWFkYXB0ZXIgdG8gYmUgcHJlc2VudCBpbiB0aGUgUFMvMi1zeXN0ZW0gYW5kIHRoaXMgaXMgCisgICBhbHJlYWR5IHRoZSBmaXJzdCBwb2ludCBvZiBwcm9ibGVtcy4gTG9va2luZyBpbnRvIHRoZSB0ZWNobmljYWwgcmVmZXJlbmNlIAorICAgbWFudWFsIGZvciB0aGUgSUJNIFBTLzIgY29tbW9uIGludGVyZmFjZXMsIHRoZSBQT1MyIHJlZ2lzdGVyIG11c3QgaGF2ZSAKKyAgIGRpZmZlcmVudCBpbnRlcnByZXRhdGlvbiBvZiBpdHMgc2luZ2xlIGJpdHMgdG8gYXZvaWQgb3ZlcmxhcHBpbmcgSS9PCisgICByZWdpb25zLiBXaGlsZSBvbmUgY2FuIGFzc3VtZSwgdGhhdCB0aGUgaW50ZWdyYXRlZCBzdWJzeXN0ZW0gaGFzIGEgZml4IAorICAgSS9PLWFkZHJlc3MgYXQgMHgzNTQwIC0gMHgzNTQ3LCBmdXJ0aGVyIGluc3RhbGxlZCBJQk0gU0NTSS1hZGFwdGVycyBtdXN0IAorICAgdXNlIGEgZGlmZmVyZW50IEkvTy1hZGRyZXNzLiBUaGlzIGlzIGV4cHJlc3NlZCBieSBiaXQgMSB0byAzIG9mIFBPUzIgCisgICAobXVsdGlwbGllZCBieSA4ICsgMHgzNTQwKS4gQml0cyAyIGFuZCAzIGFyZSByZXNlcnZlZCBmb3IgdGhlIGludGVncmF0ZWQgCisgICBzdWJzeXN0ZW0sIGJ1dCBub3QgZm9yIHRoZSBhZGFwdGVycyEgVGhlIGZvbGxvd2luZyBsaXN0IHNob3dzLCBob3cgdGhlIAorICAgYml0cyBvZiBQT1MyIGFuZCBQT1MzIHNob3VsZCBiZSBpbnRlcnByZXRlZC4KKyAgIAorICAgVGhlIFBPUzItcmVnaXN0ZXIgb2YgYWxsIFBTLzIgbW9kZWxzJyBpbnRlZ3JhdGVkIFNDU0ktc3Vic3lzdGVtcyBoYXMgdGhlIAorICAgZm9sbG93aW5nIGludGVycHJldGF0aW9uIG9mIGJpdHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgNyAtIDQgOiBDaGlwIFJldmlzaW9uIElEIChSZWxlYXNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0IDMgLSAyIDogUmVzZXJ2ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCAxICAgICA6IDhrIE5WUkFNIERpc2FibGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgMCAgICAgOiBDaGlwIEVuYWJsZSAoRU4tU2lnbmFsKQorICAgVGhlIFBPUzMtcmVnaXN0ZXIgaXMgaW50ZXJwcmV0ZWQgYXMgZm9sbG93cyAoZm9yIG1vc3QgSUJNIFNDU0ktc3Vic3lzLik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgNyAtIDUgOiBTQ1NJIElECisgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgNCAtIDAgOiBSZXNlcnZlZCA9IDAKKyAgIFRoZSBzbG90LWFkYXB0ZXJzIGhhdmUgZGlmZmVyZW50IGludGVycHJldGF0aW9uIG9mIHRoZXNlIGJpdHMuIFRoZSBJQk0gU0NTSQorICAgYWRhcHRlciAody9DYWNoZSkgYW5kIHRoZSBJQk0gU0NTSS0yIEYvVyBhZGFwdGVyIHVzZSB0aGUgZm9sbG93aW5nCisgICBpbnRlcnByZXRhdGlvbiBvZiB0aGUgUE9TMiByZWdpc3RlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdCA3IC0gNCA6IFJPTSBTZWdtZW50IEFkZHJlc3MgU2VsZWN0CisJCQkgICBCaXQgMyAtIDEgOiBBZGFwdGVyIEkvTyBBZGRyZXNzIFNlbGVjdCAoKjgrMHgzNTQwKQorCQkJICAgQml0IDAgICAgIDogQWRhcHRlciBFbmFibGUgKEVOLVNpZ25hbCkKKyAgIGFuZCBmb3IgdGhlIFBPUzMgcmVnaXN0ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXQgNyAtIDUgOiBTQ1NJIElEIAorCQkJICAgQml0IDQgICAgIDogRmFpcm5lc3MgRW5hYmxlIChTQ1NJIElEMyBmLiBGL1cpCisJCQkgICBCaXQgMyAtIDAgOiBBcmJpdHJhdGlvbiBMZXZlbAorICAgVGhlIG1vc3QgbW9kZXJuIHByb2R1Y3Qgb2YgdGhlIHNlcmllcyBpcyB0aGUgSUJNIFNDU0ktMiBGL1cgYWRhcHRlciwgaXQgCisgICBhbGxvd3MgZHVhbC1idXMgU0NTSSBhbmQgU0NTSS13aWRlIGFkZHJlc3NpbmcsIHdoaWNoIG1lYW5zLCBQVU5zIG1heSBiZQorICAgYmV0d2VlbiAwIGFuZCAxNS4gSGVyZSwgQml0IDQgaXMgdGhlIGhpZ2gtb3JkZXIgYml0IG9mIHRoZSA0LWJpdCB3aWRlCisgICBhZGFwdGVyIFBVTiBleHByZXNzaW9uLiBJbiBzaG9ydCB3b3JkcywgdGhpcyBtZWFucywgdGhhdCBJQk0gUFMvMiBtYWNoaW5lcyAKKyAgIGNhbiBvbmx5IHN1cHBvcnQgMSBzaW5nbGUgaW50ZWdyYXRlZCBzdWJzeXN0ZW0gYnkgZGVmYXVsdC4gQWRkaXRpb25hbAorICAgc2xvdC1hZGFwdGVycyBnZXQgcG9ydHMgYXNzaWduZWQgYnkgdGhlIGF1dG9tYXRpYyBjb25maWd1cmF0aW9uIHRvb2wuCisKKyAgIE9uZSBkYXkgSSBmb3VuZCBhIHBhdGNoIGluIGlibW1jYV9kZXRlY3QoKSwgZm9yY2luZyB0aGUgSS9PLWFkZHJlc3MgdG8gYmUgCisgICAweDM1NDAgZm9yIGludGVncmF0ZWQgU0NTSS1zdWJzeXN0ZW1zLCB0aGVyZSB3YXMgYSByZW1hcmsgcGxhY2VkLCB0aGF0IG9uIAorICAgaW50ZWdyYXRlZCBJQk0gU0NTSS1zdWJzeXN0ZW1zIG9mIG1vZGVsIDU2LCB0aGUgUE9TMiByZWdpc3RlciB3YXMgc2hvd2luZyA1LgorICAgVGhpcyBtZWFucywgdGhhdCByZWFsbHkgZm9yIHRoZXNlIG1vZGVscywgUE9TMiBoYXMgdG8gYmUgaW50ZXJwcmV0ZWQKKyAgIHN0aWNraW5nIHRvIHRoZSB0ZWNobmljYWwgcmVmZXJlbmNlIGd1aWRlLiBJbiB0aGlzIGNhc2UsIHRoZSBiaXQgMiAoNCkgaXMgCisgICBhIHJlc2VydmVkIGJpdCBhbmQgbWF5IG5vdCBiZSBpbnRlcnByZXRlZC4gVGhlc2UgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgCisgICBhZGFwdGVycyBhbmQgdGhlIGludGVncmF0ZWQgY29udHJvbGxlcnMgYXJlIHRha2VuIGludG8gYWNjb3VudCBieSB0aGUgCisgICBkZXRlY3Rpb24gcm91dGluZSBvZiB0aGUgZHJpdmVyIG9uIGZyb20gdmVyc2lvbiA+My4wZy4gCisKKyAgIEV2ZXJ5IHRpbWUsIGEgU0NTSS1zdWJzeXN0ZW0gaXMgZGlzY292ZXJlZCwgdGhlIGlibW1jYV9yZWdpc3RlcigpIGZ1bmN0aW9uCisgICBpcyBjYWxsZWQuIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGZpcnN0LCBpZiB0aGUgcmVxdWVzdGVkIGFyZWEgZm9yIHRoZSBJL08tCisgICBhZGRyZXNzIG9mIHRoaXMgU0NTSS1zdWJzeXN0ZW0gaXMgc3RpbGwgYXZhaWxhYmxlIGFuZCBhc3NpZ25zIHRoaXMgSS9PLQorICAgYXJlYSB0byB0aGUgU0NTSS1zdWJzeXN0ZW0uIFRoZXJlIGFyZSBhbHdheXMgOCBzZXF1ZW50aWFsIEkvTy1hZGRyZXNzZXMKKyAgIHRha2VuIGZvciBlYWNoIGluZGl2aWR1YWwgU0NTSS1zdWJzeXN0ZW0gZm91bmQsIHdoaWNoIGFyZToKKyAgIAorICAgICBPZmZzZXQgICAgICAgICAgICBUeXBlICAgICAgICAgICAgICAgICAgUGVybWlzc2lvbnMKKyAgICAgICAwICAgICBDb21tYW5kIEludGVyZmFjZSBSZWdpc3RlciAxICAgIFJlYWQvV3JpdGUKKyAgICAgICAxICAgICBDb21tYW5kIEludGVyZmFjZSBSZWdpc3RlciAyICAgIFJlYWQvV3JpdGUKKyAgICAgICAyICAgICBDb21tYW5kIEludGVyZmFjZSBSZWdpc3RlciAzICAgIFJlYWQvV3JpdGUKKyAgICAgICAzICAgICBDb21tYW5kIEludGVyZmFjZSBSZWdpc3RlciA0ICAgIFJlYWQvV3JpdGUKKyAgICAgICA0ICAgICBBdHRlbnRpb24gUmVnaXN0ZXIgICAgICAgICAgICAgIFJlYWQvV3JpdGUKKyAgICAgICA1ICAgICBCYXNpYyBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgIFJlYWQvV3JpdGUKKyAgICAgICA2ICAgICBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICAgICAgIFJlYWQKKyAgICAgICA3ICAgICBCYXNpYyBTdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgIFJlYWQKKyAgIAorICAgQWZ0ZXIgdGhlIEkvTy1hZGRyZXNzIHJhbmdlIGlzIGFzc2lnbmVkLCB0aGUgaG9zdC1hZGFwdGVyIGlzIGFzc2lnbmVkCisgICB0byBhIGxvY2FsIHN0cnVjdHVyZSB3aGljaCBrZWVwcyBhbGwgYWRhcHRlciBpbmZvcm1hdGlvbiBuZWVkZWQgZm9yIHRoZQorICAgZHJpdmVyIGl0c2VsZiBhbmQgdGhlIG1pZC0gYW5kIGhpZ2hlci1sZXZlbCBTQ1NJLWRyaXZlcnMuIFRoZSBTQ1NJIHB1bi9sdW4KKyAgIGFuZCB0aGUgYWRhcHRlcnMnIGxkbiB0YWJsZXMgYXJlIGluaXRpYWxpemVkIGFuZCBnZXQgcHJvYmVkIGFmdGVyd2FyZHMgYnkKKyAgIHRoZSBjaGVja19kZXZpY2VzKCkgZnVuY3Rpb24uIElmIG5vIGZ1cnRoZXIgYWRhcHRlcnMgYXJlIGZvdW5kLCAKKyAgIGlibW1jYV9kZXRlY3QoKSBxdWl0cy4KKyAgIAorICAgMi4yIFBoeXNpY2FsIFVuaXRzLCBMb2dpY2FsIFVuaXRzLCBhbmQgTG9naWNhbCBEZXZpY2VzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFRoZXJlIGNhbiBiZSB1cCB0byA1NiBkZXZpY2VzIG9uIHRoZSBTQ1NJIGJ1cyAoYmVzaWRlcyB0aGUgYWRhcHRlcik6CisgICB0aGVyZSBhcmUgdXAgdG8gNyAicGh5c2ljYWwgdW5pdHMiIChlYWNoIGlkZW50aWZpZWQgYnkgcGh5c2ljYWwgdW5pdCAKKyAgIG51bWJlciBvciBwdW4sIGFsc28gY2FsbGVkIHRoZSBzY3NpIGlkLCB0aGlzIGlzIHRoZSBudW1iZXIgeW91IHNlbGVjdAorICAgd2l0aCBoYXJkd2FyZSBqdW1wZXJzKSwgYW5kIGVhY2ggcGh5c2ljYWwgdW5pdCBjYW4gaGF2ZSB1cCB0byA4IAorICAgImxvZ2ljYWwgdW5pdHMiIChlYWNoIGlkZW50aWZpZWQgYnkgbG9naWNhbCB1bml0IG51bWJlciwgb3IgbHVuLCAKKyAgIGJldHdlZW4gMCBhbmQgNykuIFRoZSBJQk0gU0NTSS0yIEYvVyBhZGFwdGVyIG9mZmVycyB0aGlzIG9uIHVwIHRvIHR3bworICAgYnVzc2VzIGFuZCBwcm92aWRlcyBzdXBwb3J0IGZvciAzMCBsb2dpY2FsIGRldmljZXMgYXQgdGhlIHNhbWUgdGltZSwgd2hlcmUKKyAgIGluIHdpZGUtYWRkcmVzc2luZyBtb2RlIHlvdSBjYW4gaGF2ZSAxNiBwdW5zIHdpdGggMzIgbHVucyBvbiBlYWNoIGRldmljZS4KKyAgIFRoaXMgc2VjdGlvbiBkZXhyaWJlcyB5b3UgdGhlIGhhbmRsaW5nIG9mIGRldmljZXMgb24gbm9uLUYvVyBhZGFwdGVycy4KKyAgIEp1c3QgaW1hZ2luZSwgdGhhdCB5b3UgY2FuIGhhdmUgMTYgKiAzMiA9IDUxMiBkZXZpY2VzIG9uIGEgRi9XIGFkYXB0ZXIKKyAgIHdoaWNoIG1lYW5zIGEgbG90IG9mIHBvc3NpYmxlIGRldmljZXMgZm9yIHN1Y2ggYSBzbWFsbCBtYWNoaW5lLgorCisgICBUeXBpY2FsbHkgdGhlIGFkYXB0ZXIgaGFzIHB1bj03LCBzbyBwdW5zIG9mIG90aGVyIHBoeXNpY2FsIHVuaXRzCisgICBhcmUgYmV0d2VlbiAwIGFuZCA2KDE1KS4gT24gYSB3aWRlLWFkYXB0ZXIgYSBwdW4gaGlnaGVyIHRoYW4gNyBpcworICAgcG9zc2libGUsIGJ1dCBpcyBub3JtYWxseSBub3QgdXNlZC4gQWxtb3N0IGFsbCBwaHlzaWNhbCB1bml0cyBoYXZlIG9ubHkgCisgICBvbmUgbG9naWNhbCB1bml0LCB3aXRoIGx1bj0wLiBBIENELVJPTSBqdWtlYm94IHdvdWxkIGJlIGFuIGV4YW1wbGUgb2YgYSAKKyAgIHBoeXNpY2FsIHVuaXQgd2l0aCBtb3JlIHRoYW4gb25lIGxvZ2ljYWwgdW5pdC4KKworICAgVGhlIGVtYmVkZGVkIG1pY3JvcHJvY2Vzc29yIG9mIHRoZSBJQk0gU0NTSS1zdWJzeXN0ZW0gaGlkZXMgdGhlIGNvbXBsZXgKKyAgIHR3by1kaW1lbnNpb25hbCAocHVuLGx1bikgb3JnYW5pemF0aW9uIGZyb20gdGhlIG9wZXJhdGluZyBzeXN0ZW0uCisgICBXaGVuIHRoZSBtYWNoaW5lIGlzIHBvd2VyZWQtdXAgKG9yIHJlYm9vdGVkKSwgdGhlIGVtYmVkZGVkIG1pY3JvcHJvY2Vzc29yIAorICAgY2hlY2tzLCBvbiBpdHMgb3duLCBhbGwgNTYgcG9zc2libGUgKHB1bixsdW4pIGNvbWJpbmF0aW9ucywgYW5kIHRoZSBmaXJzdCAKKyAgIDE1IGRldmljZXMgZm91bmQgYXJlIGFzc2lnbmVkIGludG8gYSBvbmUtZGltZW5zaW9uYWwgYXJyYXkgb2Ygc28tY2FsbGVkIAorICAgImxvZ2ljYWwgZGV2aWNlcyIsIGlkZW50aWZpZWQgYnkgImxvZ2ljYWwgZGV2aWNlIG51bWJlcnMiIG9yIGxkbi4gVGhlIGxhc3QgCisgICBsZG49MTUgaXMgcmVzZXJ2ZWQgZm9yIHRoZSBzdWJzeXN0ZW0gaXRzZWxmLiBXaWRlIGFkYXB0ZXJzIG1heSBoYXZlIAorICAgdG8gY2hlY2sgdXAgdG8gMTUgKiA4ID0gMTIwIHB1bi9sdW4gY29tYmluYXRpb25zLgorICAgCisgICAyLjMgU0NTSS1EZXZpY2UgUmVjb2duaXRpb24gYW5kIER5bmFtaWNhbCBsZG4gQXNzaWdubWVudAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIE9uZSBjb25zZXF1ZW5jZSBvZiBpbmZvcm1hdGlvbiBoaWRpbmcgaXMgdGhhdCB0aGUgcmVhbCAocHVuLGx1bikgICAgCisgICBudW1iZXJzIGFyZSBhbHNvIGhpZGRlbi4gVGhlIHR3byBwb3NzaWJpbGl0aWVzIHRvIGdldCBhcm91bmQgdGhpcyBwcm9ibGVtCisgICBpcyB0byBvZmZlciBmYWtlIHB1bi9sdW4gY29tYmluYXRpb25zIHRvIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9yIHRvIAorICAgZGVsZXRlIHRoZSB3aG9sZSBtYXBwaW5nIG9mIHRoZSBhZGFwdGVyIGFuZCB0byByZWFzc2lnbiB0aGUgbGRucywgdXNpbmcKKyAgIHRoZSBpbW1lZGlhdGUgYXNzaWduIGNvbW1hbmQgb2YgdGhlIFNDU0ktc3Vic3lzdGVtIGZvciBwcm9iaW5nIHRocm91Z2gKKyAgIGFsbCBwb3NzaWJsZSBwdW4vbHVuIGNvbWJpbmF0aW9ucy4gYSBsZG4gaXMgYSAibG9naWNhbCBkZXZpY2UgbnVtYmVyIgorICAgd2hpY2ggaXMgdXNlZCBieSBJQk0gU0NTSS1zdWJzeXN0ZW1zIHRvIGFjY2VzcyBzb21lIHZhbGlkIFNDU0ktZGV2aWNlLgorICAgQXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBkcml2ZXIsIHRoZSBmb2xsb3dpbmcgYXBwcm9hY2ggCisgICB3YXMgdXNlZDoKKyAgIAorICAgRmlyc3QsIHRoZSBkcml2ZXIgY2hlY2tlZCB0aGUgbGRuJ3MgKDAgdG8gNikgdG8gZmluZCBvdXQgd2hpY2ggbGRuJ3MKKyAgIGhhdmUgZGV2aWNlcyBhc3NpZ25lZC4gVGhpcyB3YXMgZG9uZSBieSB0aGUgZnVuY3Rpb25zIGNoZWNrX2RldmljZXMoKSBhbmQKKyAgIGRldmljZV9leGlzdHMoKS4gVGhlIGludGVycnVwdCBoYW5kbGVyIGhhcyBhIHNwZWNpYWwgcGFyYWdyYXBoIG9mIGNvZGUKKyAgIChzZWUgbG9jYWxfY2hlY2tpbmdfcGhhc2VfZmxhZykgdG8gYXNzaXN0IGluIHRoZSBjaGVja2luZy4gQXNzdW1lLCBmb3IKKyAgIGV4YW1wbGUsIHRoYXQgdGhyZWUgbG9naWNhbCBkZXZpY2VzIHdlcmUgZm91bmQgYXNzaWduZWQgYXQgbGRuIDAsIDEsIDIuCisgICBUaGVzZSBhcmUgcHJlc2VudGVkIHRvIHRoZSB1cHBlciBsYXllciBvZiBMaW51eCBTQ1NJIGRyaXZlcgorICAgYXMgZGV2aWNlcyB3aXRoIGJvZ3VzIChwdW4sIGx1bikgZXF1YWwgdG8gKDAsMCksICgxLDApLCAoMiwwKS4gCisgICBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhlIHVwcGVyIGxheWVyIGlzc3VlcyBhIGNvbW1hbmQgdG8gZGV2aWNlCisgICBzYXkgKDQsMCksIHRoaXMgZHJpdmVyIHJldHVybnMgRElEX05PX0NPTk5FQ1QgZXJyb3IuCisKKyAgIEluIGEgc2Vjb25kIHN0ZXAgb2YgdGhlIGRyaXZlciBkZXZlbG9wbWVudCwgdGhlIGZvbGxvd2luZyBpbXByb3ZlbWVudCBoYXMKKyAgIGJlZW4gYXBwbGllZDogVGhlIGZpcnN0IGFwcHJvYWNoIGxpbWl0ZWQgdGhlIG51bWJlciBvZiBkZXZpY2VzIHRvIDcsIGZhcgorICAgZmV3ZXIgdGhhbiB0aGUgMTUgdGhhdCBpdCBjb3VsZCB1c2VtIHRoZW4gaXQganVzdCBtYXBlZCBsZG4gLT4gCisgICAobGRuLzgsbGRuJTgpIGZvciBwdW4sbHVuLiAgV2UgZW5kZWQgdXAgd2l0aCBhIHJlYWwgbWlzaG1hc2ggb2YgcHVucworICAgYW5kIGx1bnMsIGJ1dCBpdCBhbGwgc2VlbWVkIHRvIHdvcmsuCisKKyAgIFRoZSBsYXRlc3QgZGV2ZWxvcG1lbnQsIHdoaWNoIGlzIGltcGxlbWVudGVkIGZyb20gdGhlIGRyaXZlciB2ZXJzaW9uIDMuMAorICAgYW5kIGxhdGVyLCByZWFsaXplcyB0aGUgZGV2aWNlIHJlY29nbml0aW9uIGluIHRoZSBmb2xsb3dpbmcgd2F5OgorICAgVGhlIHBoeXNpY2FsIFNDU0ktZGV2aWNlcyBvbiB0aGUgU0NTSS1idXMgYXJlIHByb2JlZCB2aWEgaW1tZWRpYXRlX2Fzc2lnbi0gCisgICBhbmQgZGV2aWNlX2lucXVpcnktY29tbWFuZHMsIHRoYXQgaXMgYWxsIGltcGxlbWVudGVkIGluIGEgY29tcGxldGVseSBuZXcKKyAgIG1hZGUgY2hlY2tfZGV2aWNlcygpIHN1YnJvdXRpbmUuIFRoaXMgZGVsaXZlcnMgYW4gZXhhY3QgbWFwIG9mIHRoZSBwaHlzaWNhbAorICAgU0NTSS13b3JsZCB0aGF0IGlzIG5vdyBzdG9yZWQgaW4gdGhlIGdldF9zY3NpW11bXS1hcnJheS4gVGhpcyBtZWFucywKKyAgIHRoYXQgdGhlIG9uY2UgaGlkZGVuIHB1bixsdW4gYXNzaWdubWVudCBpcyBub3cga25vd24gdG8gdGhpcyBkcml2ZXIuCisgICBJdCBubyBsb25nZXIgYmVsaWV2ZXMgaW4gZGVmYXVsdC1zZXR0aW5ncyBvZiB0aGUgc3Vic3lzdGVtIGFuZCBtYXBzIGFsbAorICAgbGRucyB0byBleGlzdGluZyBwdW4sbHVuICJieSBmb290Ii4gVGhpcyBhc3N1cmVzIGZ1bGwgY29udHJvbCBvZiB0aGUgbGRuCisgICBtYXBwaW5nIGFuZCBhbGxvd3MgZHluYW1pY2FsIHJlbWFwcGluZyBvZiBsZG5zIHRvIGRpZmZlcmVudCBwdW4sbHVuLCBpZgorICAgdGhlcmUgYXJlIG1vcmUgU0NTSS1kZXZpY2VzIGluc3RhbGxlZCB0aGFuIGxkbnMgYXZhaWxhYmxlIChuPjE1KS4gVGhlCisgICBsZG5zIGZyb20gMCB0byA2IGdldCAnaGFyZHdpcmVkJyBieSB0aGlzIGRyaXZlciB0byBwdW5zIDAgdG8gNyBhdCBsdW49MCwKKyAgIGV4Y2x1ZGluZyB0aGUgcHVuIG9mIHRoZSBzdWJzeXN0ZW0uIFRoaXMgYXNzdXJlcywgdGhhdCBhdCBsZWFzdCBzaW1wbGUgCisgICBTQ1NJLWluc3RhbGxhdGlvbnMgaGF2ZSBvcHRpbXVtIGFjY2Vzcy1zcGVlZCBhbmQgYXJlIG5vdCB0b3VjaGVkIGJ5CisgICBkeW5hbWljYWwgcmVtYXBwaW5nLiBUaGUgbGRucyA3IHRvIDE0IGFyZSBwdXQgdG8gZXhpc3RpbmcgZGV2aWNlcyB3aXRoIAorICAgbHVuPjAgb3IgdG8gbm9uLWV4aXN0aW5nIGRldmljZXMsIGluIG9yZGVyIHRvIHNhdGlzZnkgdGhlIHN1YnN5c3RlbSwgaWYgCisgICB0aGVyZSBhcmUgbGVzcyB0aGFuIDE1IFNDU0ktZGV2aWNlcyBjb25uZWN0ZWQuIEluIHRoZSBjYXNlIG9mIG1vcmUgdGhhbiAxNSAKKyAgIGRldmljZXMsIHRoZSBkeW5hbWljYWwgbWFwcGluZyBnb2VzIGFjdGl2ZS4gSWYgdGhlIGdldF9zY3NpW11bXSByZXBvcnRzIGEgCisgICBkZXZpY2UgdG8gYmUgZXhpc3RhbnQsIGJ1dCBpdCBoYXMgbm8gbGRuIGFzc2lnbmVkLCBpdCBnZXRzIGEgbGRuIG91dCBvZiA3IAorICAgdG8gMTQuIFRoZSBudW1iZXJzIGFyZSBhc3NpZ25lZCBpbiBjeWNsaWMgb3JkZXIuIFRoZXJlZm9yZSBpdCB0YWtlcyA4IAorICAgZHluYW1pY2FsIHJlYXNzaWdubWVudHMgb24gdGhlIFNDU0ktZGV2aWNlcywgdW50aWwgYSBjZXJ0YWluIGRldmljZSAKKyAgIGxvc2VzIGl0cyBsZG4gYWdhaW4uIFRoaXMgYXNzdXJlcywgdGhhdCBkeW5hbWljYWwgcmVtYXBwaW5nIGlzIGF2b2lkZWQgCisgICBkdXJpbmcgaW50ZW5zZSBJL08gYmV0d2VlbiB1cCB0byAxNSBTQ1NJLWRldmljZXMgKG1lYW5zIHB1bixsdW4gCisgICBjb21iaW5hdGlvbnMpLiBBIGZ1cnRoZXIgYWR2YW50YWdlIG9mIHRoaXMgbWV0aG9kIGlzLCB0aGF0IHBlb3BsZSB3aG8KKyAgIGJ1aWxkIHRoZWlyIGtlcm5lbCB3aXRob3V0IHByb2Jpbmcgb24gYWxsIGx1bnMgd2lsbCBnZXQgd2hhdCB0aGV5IGV4cGVjdCwKKyAgIGJlY2F1c2UgdGhlIGRyaXZlciBqdXN0IHdvbid0IGFzc2lnbiBldmVyeXRoaW5nIHdpdGggbHVuPjAgd2hlbiAKKyAgIG11bHRwaWxlIGx1biBwcm9iaW5nIGlzIGluYWN0aXZlLgorIAorICAgMi40IFNDU0ktRGV2aWNlIE9yZGVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIEJlY2F1c2Ugb2YgdGhlIG5vdyBjb3JyZWN0IHJlY29nbml0aW9uIG9mIHBoeXNpY2FsIHB1bixsdW4sIGFuZCAKKyAgIHRoZWlyIHJlcG9ydCB0byBtaWQtbGV2ZWwtIGFuZCBoaWdoZXItbGV2ZWwtZHJpdmVycywgdGhlIG5ldyByZXBvcnRlZCBwdW5zCisgICBjYW4gYmUgZGlmZmVyZW50IGZyb20gdGhlIG9sZCwgZmFrZWQgcHVucy4gVGhlcmVmb3JlLCBMaW51eCB3aWxsIGV2ZW50dWFsbHkKKyAgIGNoYW5nZSAvZGV2L3NkWFhYIGFzc2lnbm1lbnRzIGFuZCBwcm9tcHQgeW91IGZvciBjb3JydXB0ZWQgc3VwZXJibG9jaworICAgcmVwYWlyIG9uIGJvb3R0aW1lLiBJbiB0aGlzIGNhc2UgRE8gTk9UIFBBTklDLCBZT1VSIERJU0tTIEFSRSBTVElMTCBPSyEhIQorICAgWW91IGhhdmUgdG8gcmVib290IChDVFJMLUQpIHdpdGggYW4gb2xkIGtlcm5lbCBhbmQgc2V0IHRoZSAvZXRjL2ZzdGFiLWZpbGUKKyAgIGVudHJpZXMgcmlnaHQuIEFmdGVyIHRoYXQsIHRoZSBzeXN0ZW0gc2hvdWxkIGNvbWUgdXAgYXMgZXJyb3JmcmVlIGFzIGJlZm9yZS4KKyAgIElmIHlvdXIgYm9vdC1wYXJ0aXRpb24gaXMgbm90IGNvbWluZyB1cCwgYWxzbyBlZGl0IHRoZSAvZXRjL2xpbG8uY29uZi1maWxlCisgICBpbiBhIExpbnV4IHNlc3Npb24gYm9vdGVkIG9uIG9sZCBrZXJuZWwgYW5kIHJ1biBsaWxvIGJlZm9yZSByZWJvb3QuIENoZWNrCisgICBsaWxvLmNvbmYgYW55d2F5IHRvIGdldCBib290IG9uIG90aGVyIHBhcnRpdGlvbnMgd2l0aCBmb3JlaWduIE9TZXMgcmlnaHQKKyAgIGFnYWluLiBCdXQgdGhlcmUgZXhpc3RzIGEgZmVhdHVyZSBvZiB0aGlzIGRyaXZlciB0aGF0IGFsbG93cyB5b3UgdG8gY2hhbmdlCisgICB0aGUgYXNzaWdubWVudCBvcmRlciBvZiB0aGUgU0NTSS1kZXZpY2VzIGJ5IGZsaXBwaW5nIHRoZSBQVU4tYXNzaWdubWVudC4KKyAgIFNlZSB0aGUgbmV4dCBwYXJhZ3JhcGggZm9yIGEgZGVzY3JpcHRpb24uCisgCisgICBUaGUgcHJvYmxlbSBmb3IgdGhpcyBpcywgdGhhdCBMaW51eCBkb2VzIG5vdCBhc3NpZ24gdGhlIFNDU0ktZGV2aWNlcyBpbiB0aGUKKyAgIHdheSBhcyBkZXNjcmliZWQgaW4gdGhlIEFOU0ktU0NTSS1zdGFuZGFyZC4gTGludXggYXNzaWducyAvZGV2L3NkYSB0byAKKyAgIHRoZSBkZXZpY2Ugd2l0aCBhdCBtaW5pbXVtIGlkIDAuIEJ1dCB0aGUgZmlyc3QgZHJpdmUgc2hvdWxkIGJlIGF0IGlkIDYsCisgICBiZWNhdXNlIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIGRyaXZlIGF0IGlkIDYgaGFzLCBieSBoYXJkd2FyZSwgdGhlIGhpZ2hlc3QKKyAgIHByaW9yaXR5IGFuZCBhIGRyaXZlIGF0IGlkIDAgdGhlIGxvd2VzdC4gSUJNIHdhcyBvbmUgb2YgdGhlIHJhcmUgcHJvZHVjZXJzLAorICAgd2hlcmUgdGhlIEJJT1MgYXNzaWducyBkcml2ZXMgYmVsb25naW5nIHRvIHRoZSBBTlNJLVNDU0ktc3RhbmRhcmQuIE1vc3QgCisgICBvdGhlciBwcm9kdWNlcnMnIEJJT1MgZG9lcyBub3QgKEkgdGhpbmsgZXZlbiBBZGFwdGVjLUJJT1MpLiBUaGUgCisgICBJQk1NQ0FfU0NTSV9PUkRFUl9TVEFOREFSRCBmbGFnLCB3aGljaCB5b3Ugc2V0IHdoaWxlIGNvbmZpZ3VyaW5nIHRoZQorICAga2VybmVsIGVuYWJsZXMgdG8gY2hvb3NlIHRoZSBwcmVmZXJyZWQgd2F5IG9mIFNDU0ktZGV2aWNlLWFzc2lnbm1lbnQuIAorICAgRGVmaW5pbmcgdGhpcyBmbGFnIHdvdWxkIHJlc3VsdCBpbiBMaW51eCBkZXRlcm1pbmluZyB0aGUgZGV2aWNlcyBpbiB0aGUgCisgICBzYW1lIG9yZGVyIGFzIERPUyBhbmQgT1MvMiBkb2VzIG9uIHlvdXIgTUNBLW1hY2hpbmUuIFRoaXMgaXMgYWxzbyBzdGFuZGFyZCAKKyAgIG9uIG1vc3QgaW5kdXN0cmlhbCBjb21wdXRlcnMgYW5kIE9TZXMsIGxpa2UgZS5nLiBPUy05LiBMZWF2aW5nIHRoaXMgZmxhZyAKKyAgIHVuZGVmaW5lZCB3aWxsIGdldCB5b3VyIGRldmljZXMgb3JkZXJlZCBpbiB0aGUgZGVmYXVsdCB3YXkgb2YgTGludXguIFNlZSAKKyAgIGFsc28gdGhlIHJlbWFya3Mgb2YgQ2hyaXMgQmVhdXJlZ2FyZCBmcm9tIERlYyAxNSwgMTk5NyBhbmQgdGhlIGZvbGxvd3VwcyAKKyAgIGluIHNlY3Rpb24gMy4KKyAgIAorICAgMi41IFJlZ3VsYXIgU0NTSS1Db21tYW5kLVByb2Nlc3NpbmcKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBPbmx5IHRocmVlIGZ1bmN0aW9ucyBnZXQgaW52b2x2ZWQ6IGlibW1jYV9xdWV1ZWNvbW1hbmQoKSwgaXNzdWVfY21kKCksCisgICBhbmQgaW50ZXJydXB0X2hhbmRsZXIoKS4KKworICAgVGhlIHVwcGVyIGxheWVyIGlzc3VlcyBhIHNjc2kgY29tbWFuZCBieSBjYWxsaW5nIGZ1bmN0aW9uIAorICAgaWJtbWNhX3F1ZXVlY29tbWFuZCgpLiBUaGlzIGZ1bmN0aW9uIGZpbGxzIGEgInN1YnN5c3RlbSBjb250cm9sIGJsb2NrIgorICAgKHNjYikgYW5kIGNhbGxzIGEgbG9jYWwgZnVuY3Rpb24gaXNzdWVfY21kKCksIHdoaWNoIHdyaXRlcyBhIHNjYiAKKyAgIGNvbW1hbmQgaW50byBzdWJzeXN0ZW0gSS9PIHBvcnRzLiBPbmNlIHRoZSBzY2IgY29tbWFuZCBpcyBjYXJyaWVkIG91dCwgCisgICB0aGUgaW50ZXJydXB0X2hhbmRsZXIoKSBpcyBpbnZva2VkLiBJZiBhIGRldmljZSBpcyBkZXRlcm1pbmVkIHRvIGJlIAorICAgZXhpc3RhbnQgYW5kIGl0IGhhcyBub3QgYXNzaWduZWQgYW55IGxkbiwgaXQgZ2V0cyBvbmUgZHluYW1pY2FsbHkuCisgICBGb3IgdGhpcywgdGhlIHdob2xlIHN0dWZmIGlzIGRvbmUgaW4gaWJtbWNhX3F1ZXVlY29tbWFuZCgpLgorCisgICAyLjYgQWJvcnQgJiBSZXNldCBDb21tYW5kcworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFRoZXNlIGFyZSBpbXBsZW1lbnRlZCB3aXRoIGJ1c3kgd2FpdGluZyBmb3IgaW50ZXJydXB0IHRvIGFycml2ZS4KKyAgIGlibW1jYV9yZXNldCgpIGFuZCBpYm1tY2FfYWJvcnQoKSBkbyBub3Qgd29yayBzdWZmaWNlbnRseSB3ZWxsCisgICB1cCB0byBub3cgYW5kIG5lZWQgc3RpbGwgYSBsb3Qgb2YgZGV2ZWxvcG1lbnQgd29yay4gQnV0LCB0aGlzIHNlZW1zCisgICB0byBiZSBldmVuIGEgcHJvYmxlbSB3aXRoIG90aGVyIFNDU0ktbG93IGxldmVsIGRyaXZlcnMsIHRvby4gSG93ZXZlciwKKyAgIHRoaXMgc2hvdWxkIGJlIG5vIGV4Y3VzZS4KKworICAgMi43IERpc2sgR2VvbWV0cnkKKyAgIC0tLS0tLS0tLS0tLS0tLS0tCisgICBUaGUgaWJtbWNhX2Jpb3NwYXJhbXMoKSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIHRoZSBzYW1lIGRpc2sgZ2VvbWV0cnkgCisgICBhcyB0aGUgYmlvcy4gVGhpcyBpcyBuZWVkZWQgZm9yIGZkaXNrLCBldGMuIFRoZSByZXR1cm5lZCBnZW9tZXRyeSBpcyAKKyAgIGNlcnRhaW5seSBjb3JyZWN0IGZvciBkaXNrcyBzbWFsbGVyIHRoYW4gMSBnaWdhYnl0ZS4gSW4gdGhlIG1lYW50aW1lLAorICAgaXQgaGFzIGJlZW4gcHJvdmVkLCB0aGF0IHRoaXMgd29ya3MgZmluZSBldmVuIHdpdGggZGlza3MgbGFyZ2VyIHRoYW4KKyAgIDEgZ2lnYWJ5dGUuCisKKyAgIDIuOCBLZXJuZWwgQm9vdCBPcHRpb24KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFRoZSBmdW5jdGlvbiBpYm1tY2Ffc2NzaV9zZXR1cCgpIGlzIGNhbGxlZCBpZiBvcHRpb24gaWJtbWNhc2NzaT1uIAorICAgaXMgcGFzc2VkIHRvIHRoZSBrZXJuZWwuIFNlZSBmaWxlIGxpbnV4L2luaXQvbWFpbi5jIGZvciBkZXRhaWxzLgorICAgCisgICAyLjkgRHJpdmVyIE1vZHVsZSBTdXBwb3J0CisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBJcyBpbXBsZW1lbnRlZCBhbmQgdGVzdGVkIGJ5IEsuIEt1ZGllbGthLiBUaGlzIGNvdWxkIHByb2JhYmx5IG5vdCB3b3JrCisgICBvbiBrZXJuZWxzIDwyLjEuMC4KKyAgCisgICAyLjEwIE11bHRpcGxlIEhvc3RhZGFwdGVyIFN1cHBvcnQKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdXAgdG8gZWlnaHQgaW50ZXJmYWNlcyBvZiB0eXBlIElCTS1TQ1NJLVN1YnN5c3RlbS4gCisgICBJbnRlZ3JhdGVkLSwgYW5kIE1DQS1hZGFwdGVycyBhcmUgYXV0b21hdGljYWxseSByZWNvZ25pemVkLiBVbnJlY29nbml6YWJsZQorICAgSUJNLVNDU0ktU3Vic3lzdGVtIGludGVyZmFjZXMgY2FuIGJlIHNwZWNpZmllZCBhcyBrZXJuZWwtcGFyYW1ldGVycy4KKyAKKyAgIDIuMTEgL3Byb2Mvc2NzaS1GaWxlc3lzdGVtIEluZm9ybWF0aW9uCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgSW5mb3JtYXRpb24gYWJvdXQgdGhlIGRyaXZlciBjb25kaXRpb24gaXMgZ2l2ZW4gaW4gCisgICAvcHJvYy9zY3NpL2libW1jYS88aG9zdF9ubz4uIGlibW1jYV9wcm9jX2luZm8oKSBwcm92aWRlcyB0aGlzIGluZm9ybWF0aW9uLgorICAgCisgICBUaGlzIHRhYmxlIGlzIHF1aXRlIGluZm9ybWF0aXZlIGZvciBpbnRlcmVzdGVkIHVzZXJzLiBJdCBzaG93cyB0aGUgbG9hZAorICAgb2YgY29tbWFuZHMgb24gdGhlIHN1YnN5c3RlbSBhbmQgd2V0aGVyIHlvdSBhcmUgcnVubmluZyB0aGUgYnlwYXNzZWQgCisgICAoc29mdHdhcmUpIG9yIGludGVncmF0ZWQgKGhhcmR3YXJlKSBTQ1NJLWNvbW1hbmQgc2V0IChzZWUgYmVsb3cpLiBUaGUKKyAgIGFtb3VudCBvZiBhY2Nlc3NlcyBpcyBzaG93bi4gUmVhZCwgd3JpdGUsIG1vZGVzZWxlY3QgaXMgc2hvd24gc2VwYXJhdGVseQorICAgaW4gb3JkZXIgdG8gaGVscCBkZWJ1Z2dpbmcgcHJvYmxlbXMgd2l0aCBDRC1ST01zIG9yIHRhcGVkcml2ZXMuCisgICAKKyAgIFRoZSBmb2xsb3dpbmcgdGFibGUgc2hvd3MgdGhlIGxpc3Qgb2YgMTUgbG9naWNhbCBkZXZpY2UgbnVtYmVycywgdGhhdCBhcmUKKyAgIHVzZWQgYnkgdGhlIFNDU0ktc3Vic3lzdGVtLiBUaGUgbG9hZCBvbiBlYWNoIGxkbiBpcyBzaG93biBpbiB0aGUgdGFibGUsCisgICBhZ2FpbiwgcmVhZCBhbmQgd3JpdGUgY29tbWFuZHMgYXJlIHNwbGl0LiBUaGUgbGFzdCBjb2x1bW4gc2hvd3MgdGhlIGFtb3VudAorICAgb2YgcmVhc3NpZ25tZW50cywgdGhhdCBoYXZlIGJlZW4gYXBwbGllZCB0byB0aGUgbGRucywgaWYgeW91IGhhdmUgbW9yZSB0aGFuCisgICAxNSBwdW4vbHVuIGNvbWJpbmF0aW9ucyBhdmFpbGFibGUgb24gdGhlIFNDU0ktYnVzLgorICAgCisgICBUaGUgbGFzdCB0d28gdGFibGVzIHNob3cgdGhlIHB1bi9sdW4gbWFwIGFuZCB0aGUgcG9zaXRpb25zIG9mIHRoZSBsZG5zCisgICBvbiB0aGlzIHB1bi9sdW4gbWFwLiBUaGlzIG1heSBjaGFuZ2UgZHVyaW5nIG9wZXJhdGlvbiwgd2hlbiBhIGxkbiBpcworICAgcmVhc3NpZ25lZCB0byBhbm90aGVyIHB1bi9sdW4gY29tYmluYXRpb24uIElmIHRoZSBuZWNlc3NpdHkgZm9yIGR5bmFtaWNhbAorICAgYXNzaWdubWVudHMgaXMgc2V0IHRvICdubycsIHRoZSBsZG4gc3RydWN0dXJlIGtlZXBzIHN0YXRpYy4KKyAgIAorICAgMi4xMiAvcHJvYy9tY2EtRmlsZXN5c3RlbSBJbmZvcm1hdGlvbgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVGhlIHNsb3QtZmlsZSBjb250YWlucyBhbGwgZGVmYXVsdCBlbnRyaWVzIGFuZCBpbiBhZGRpdGlvbiBjaGlwIGFuZCBJL08tCisgICBhZGRyZXNzIGluZm9ybWF0aW9uIG9mIHRoZSBTQ1NJLXN1YnN5c3RlbS4gVGhpcyBpbmZvcm1hdGlvbiBpcyBwcm92aWRlZAorICAgYnkgaWJtbWNhX2dldGluZm8oKS4KKyAgIAorICAgMi4xMyBTdXBwb3J0ZWQgSUJNIFNDU0ktU3Vic3lzdGVtcworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVGhlIGZvbGxvd2luZyBJQk0gU0NTSS1zdWJzeXN0ZW1zIGFyZSBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXI6CisgICAKKyAgICAgLSBJQk0gRmFzdC9XaWRlIFNDU0ktMiBBZGFwdGVyCisgICAgIC0gSUJNIDc1NjggSW5kdXN0cmlhbCBDb21wdXRlciBTQ1NJIEFkYXB0ZXIgdy9DYWNoZQorICAgICAtIElCTSBFeHBhbnNpb24gVW5pdCBTQ1NJIENvbnRyb2xsZXIKKyAgICAgLSBJQk0gU0NTSSBBZGFwdGVyIHcvQ2FjaGUKKyAgICAgLSBJQk0gU0NTSSBBZGFwdGVyCisgICAgIC0gSUJNIEludGVncmF0ZWQgU0NTSSBDb250cm9sbGVyCisgICAgIC0gQWxsIGNsb25lcywgMTAwJSBjb21wYXRpYmxlIHdpdGggdGhlIGNoaXBzZXQgYW5kIHN1YnN5c3RlbSBjb21tYW5kCisgICAgICAgc3lzdGVtIG9mIElCTSBTQ1NJLWFkYXB0ZXJzIChmb3JjZWQgZGV0ZWN0aW9uKQorICAgICAKKyAgIDIuMTQgTGludXggS2VybmVsIFZlcnNpb25zCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVGhlIElCTSBTQ1NJLXN1YnN5c3RlbSBsb3cgbGV2ZWwgZHJpdmVyIGlzIHByZXBhcmVkIHRvIGJlIHVzZWQgd2l0aAorICAgYWxsIHZlcnNpb25zIG9mIExpbnV4IGJldHdlZW4gMi4wLnggYW5kIDIuNC54LiBUaGUgY29tcGF0aWJpbGl0eSBjaGVja3MKKyAgIGFyZSBmdWxseSBpbXBsZW1lbnRlZCB1cCBmcm9tIHZlcnNpb24gMy4xZSBvZiB0aGUgZHJpdmVyLiBUaGlzIG1lYW5zLCB0aGF0CisgICB5b3UganVzdCBuZWVkIHRoZSBsYXRlc3QgaWJtbWNhLmggYW5kIGlibW1jYS5jIGZpbGUgYW5kIGNvcHkgaXQgaW4gdGhlCisgICBsaW51eC9kcml2ZXJzL3Njc2kgZGlyZWN0b3J5LiBUaGUgY29kZSBpcyBhdXRvbWF0aWNhbGx5IGFkYXB0ZWQgZHVyaW5nIAorICAga2VybmVsIGNvbXBpbGF0aW9uLiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIGtlcm5lbCAyLjQuMCEgSGVyZSB2ZXJzaW9uIAorICAgNC4wIG9yIGxhdGVyIG9mIHRoZSBkcml2ZXIgbXVzdCBiZSB1c2VkIGZvciBrZXJuZWwgMi40LjAgb3IgbGF0ZXIuIFZlcnNpb24KKyAgIDQuMCBvciBsYXRlciBkb2VzIG5vdCB3b3JrIHRvZ2V0aGVyIHdpdGggb2xkZXIga2VybmVscyEgRHJpdmVyIHZlcnNpb25zCisgICBvbGRlciB0aGFuIDQuMCBkbyBub3Qgd29yayB0b2dldGhlciB3aXRoIGtlcm5lbCAyLjQuMCBvciBsYXRlci4gVGhleSB3b3JrCisgICBvbiBhbGwgb2xkZXIga2VybmVscy4KKworICAgMyBDb2RlIEhpc3RvcnkKKyAgIC0tLS0tLS0tLS0tLS0tCisgICBKYW4gMTUgMTk5NjogIEZpcnN0IHB1YmxpYyByZWxlYXNlLgorICAgLSBNYXJ0aW4gS29saW5laworCisgICBKYW4gMjMgMTk5NjogIFNjcmFwcGVkIGNvZGUgd2hpY2ggcmVhc3NpZ25lZCBzY3NpIGRldmljZXMgdG8gbG9naWNhbAorICAgZGV2aWNlIG51bWJlcnMuIEluc3RlYWQsIHRoZSBleGlzdGluZyBhc3NpZ25tZW50IChjcmVhdGVkCisgICB3aGVuIHRoZSBtYWNoaW5lIGlzIHBvd2VyZWQtdXAgb3IgcmVib290ZWQpIGlzIHVzZWQuIAorICAgQSBzaWRlIGVmZmVjdCBpcyB0aGF0IHRoZSB1cHBlciBsYXllciBvZiBMaW51eCBTQ1NJIAorICAgZGV2aWNlIGRyaXZlciBnZXRzIGJvZ3VzIHNjc2kgaWRzICh0aGlzIGlzIGJlbmlnbiksIAorICAgYW5kIGFsc28gdGhlIGhhcmQgZGlza3MgYXJlIG9yZGVyZWQgdW5kZXIgTGludXggdGhlIAorICAgc2FtZSB3YXkgYXMgdGhleSBhcmUgdW5kZXIgZG9zIChpLmUuLCBDOiBkaXNrIGlzIHNkYSwgCisgICBEOiBkaXNrIGlzIHNkYiwgZXRjLikuCisgICAtIE1hcnRpbiBLb2xpbmVrCisKKyAgIEkgdGhpbmsgdGhhdCB0aGUgQ0QtUk9NIGlzIG5vdyBkZXRlY3RlZCBvbmx5IGlmIGEgQ0QgaXMgCisgICBpbnNpZGUgQ0RfUk9NIHdoaWxlIExpbnV4IGJvb3RzLiBUaGlzIGNhbiBiZSBmaXhlZCBsYXRlciwKKyAgIG9uY2UgdGhlIGRyaXZlciB3b3JrcyBvbiBhbGwgdHlwZXMgb2YgUFMvMidzLgorICAgLSBNYXJ0aW4gS29saW5laworCisgICBGZWIgNyAxOTk2OiAgIE1vZGlmaWVkIGJpb3NwYXJhbSBmdW5jdGlvbi4gRml4ZWQgdGhlIENELVJPTSBkZXRlY3Rpb24uIAorICAgRm9yIG5vdywgZGV2aWNlcyBvdGhlciB0aGFuIGhhcmRkaXNrIGFuZCBDRF9ST00gYXJlIAorICAgaWdub3JlZC4gVGVtcG9yYXJpbHkgbW9kaWZpZWQgYWJvcnQoKSBmdW5jdGlvbiAKKyAgIHRvIGJlaGF2ZSBsaWtlIHJlc2V0KCkuCisgICAtIE1hcnRpbiBLb2xpbmVrCisKKyAgIE1hciAzMSAxOTk2OiAgVGhlIGludGVncmF0ZWQgc2NzaSBzdWJzeXN0ZW0gaXMgY29ycmVjdGx5IGZvdW5kCisgICBpbiBQUy8yIG1vZGVscyA1Niw1NywgYnV0IG5vdCBpbiBtb2RlbCA3Ni4gVGhlcmVmb3JlCisgICB0aGUgaWJtbWNhX3Njc2lfc2V0dXAoKSBmdW5jdGlvbiBoYXMgYmVlbiBhZGRlZCB0b2RheS4KKyAgIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHRoZSB1c2VyIHRvIGZvcmNlIGRldGVjdGlvbiBvZgorICAgc2NzaSBzdWJzeXN0ZW0uIFRoZSBrZXJuZWwgb3B0aW9uIGhhcyBmb3JtYXQKKyAgIGlibW1jYXNjc2k9bgorICAgd2hlcmUgbiBpcyB0aGUgc2NzaV9pZCAocHVuKSBvZiB0aGUgc3Vic3lzdGVtLiBNb3N0IGxpa2VseSwgbiBpcyA3LgorICAgLSBNYXJ0aW4gS29saW5laworCisgICBBdWcgMjEgMTk5NjogIE1vZGlmaWVkIHRoZSBjb2RlIHdoaWNoIG1hcHMgbGRucyB0byAocHVuLDApLiAgSXQgd2FzCisgICBpbnN1ZmZpY2llbnQgZm9yIHRob3NlIG9mIHVzIHdpdGggQ0QtUk9NIGNoYW5nZXJzLgorICAgLSBDaHJpcyBCZWF1cmVnYXJkCisgCisgICBEZWMgMTQgMTk5NjogTW9yZSBpbXByb3ZlbWVudHMgdG8gdGhlIGxkbiBtYXBwaW5nLiAgU2VlIGNoZWNrX2RldmljZXMKKyAgIGZvciBkZXRhaWxzLiAgRGlkIG1vcmUgZmlkZGxpbmcgd2l0aCB0aGUgaW50ZWdyYXRlZCBTQ1NJIGRldGVjdGlvbiwKKyAgIGJ1dCBJIHRoaW5rIGl0J3MgdWx0aW1hdGVseSBob3BlbGVzcyB3aXRob3V0IGFjdHVhbGx5IHRlc3RpbmcgdGhlCisgICBtb2RlbCBvZiB0aGUgbWFjaGluZS4gIFRoZSA1NiwgNTcsIDc2IGFuZCA5NSAodWx0aW1lZGlhKSBhbGwgaGF2ZQorICAgZGlmZmVyZW50IGludGVncmF0ZWQgU0NTSSByZWdpc3RlciBjb25maWd1cmF0aW9ucy4gIEhvd2V2ZXIsIHRoZSA1NgorICAgYW5kIDU3IGFyZSB0aGUgb25seSBvbmVzIHRoYXQgaGF2ZSBwcm9ibGVtcyB3aXRoIGZvcmNlZCBkZXRlY3Rpb24uCisgICAtIENocmlzIEJlYXVyZWdhcmQKKyAKKyAgIE1hciA4LTE2IDE5OTc6IE1vZGlmaWVkIGRyaXZlciB0byBydW4gYXMgYSBtb2R1bGUgYW5kIHRvIHN1cHBvcnQgCisgICBtdWx0aXBsZSBhZGFwdGVycy4gQSBzdHJ1Y3R1cmUsIGNhbGxlZCBpYm1tY2FfaG9zdGRhdGEsIGlzIG5vdworICAgcHJlc2VudCwgY29udGFpbmluZyBhbGwgdGhlIHZhcmlhYmxlcywgdGhhdCB3ZXJlIG9uY2Ugb25seQorICAgYXZhaWxhYmxlIGZvciBvbmUgc2luZ2xlIGFkYXB0ZXIuIFRoZSBmaW5kX3N1YnN5c3RlbS1yb3V0aW5lIGhhcyB2YW5pc2hlZC4KKyAgIFRoZSBoYXJkd2FyZSByZWNvZ25pdGlvbiBpcyBub3cgZG9uZSBpbiBpYm1tY2FfZGV0ZWN0IGRpcmVjdGx5LgorICAgVGhpcyByb3V0aW5lIGNoZWNrcyBmb3IgcHJlc2VuY2Ugb2YgTUNBLWJ1cywgY2hlY2tzIHRoZSBpbnRlcnJ1cHQKKyAgIGxldmVsIGFuZCBjb250aW51ZXMgd2l0aCBjaGVja2luZyB0aGUgaW5zdGFsbGVkIGhhcmR3YXJlLgorICAgQ2VydGFpbiBQUy8yLW1vZGVscyBkbyBub3QgcmVjb2duaXplIGEgU0NTSS1zdWJzeXN0ZW0gYXV0b21hdGljYWxseS4KKyAgIEhlbmNlLCB0aGUgc2V0dXAgZGVmaW5lZCBieSBjb21tYW5kLWxpbmUtcGFyYW1ldGVycyBpcyBjaGVja2VkIGZpcnN0LgorICAgVGhlcmVhZnRlciwgdGhlIHJvdXRpbmUgcHJvYmVzIGZvciBhbiBpbnRlZ3JhdGVkIFNDU0ktc3Vic3lzdGVtLgorICAgRmluYWxseSwgYWRhcHRlcnMgYXJlIGNoZWNrZWQuIFRoaXMgbWV0aG9kIGhhcyB0aGUgYWR2YW50YWdlIHRvIGNvdmVyIGFsbAorICAgcG9zc2libGUgY29tYmluYXRpb25zIG9mIG11bHRpcGxlIFNDU0ktc3Vic3lzdGVtcyBvbiBvbmUgTUNBLWJvYXJkLiBVcCB0bworICAgZWlnaHQgU0NTSS1zdWJzeXN0ZW1zIGNhbiBiZSByZWNvZ25pemVkIGFuZCBhbm5vdW5jZWQgdG8gdGhlIHVwcGVyLWxldmVsCisgICBkcml2ZXJzIHdpdGggdGhpcyBpbXByb3ZlbWVudC4gQSBzZXQgb2YgZGVmaW5lcyBtYWRlIGNoYW5nZXMgdG8gb3RoZXIKKyAgIHJvdXRpbmVzIGFzIHNtYWxsIGFzIHBvc3NpYmxlLgorICAgLSBLbGF1cyBLdWRpZWxrYQorICAgCisgICBNYXkgMzAgMTk5NzogKHYxLjViKQorICAgMSkgU0NTSS1jb21tYW5kIGNhcGFiaWxpdHkgZW5sYXJnZWQgYnkgdGhlIHJlY29nbml0aW9uIG9mIE1PREVfU0VMRUNULgorICAgICAgVGhpcyBuZWVkcyB0aGUgUkQtQml0IHRvIGJlIGRpc2FibGVkIG9uIElNX09USEVSX1NDU0lfQ01EX0NNRCB3aGljaCAKKyAgICAgIGFsbG93cyBkYXRhIHRvIGJlIHdyaXR0ZW4gZnJvbSB0aGUgc3lzdGVtIHRvIHRoZSBkZXZpY2UuIEl0IGlzIGEKKyAgICAgIG5lY2Vzc2FyeSBzdGVwIHRvIGJlIGFsbG93ZWQgdG8gc2V0IGJsb2Nrc2l6ZSBvZiBTQ1NJLXRhcGUtZHJpdmVzIGFuZCAKKyAgICAgIHRoZSB0YXBlLXNwZWVkLCB3aGl0aG91dCBjb25mdXNpbmcgdGhlIFNDU0ktU3Vic3lzdGVtLgorICAgMikgVGhlIHJlY29nbml0aW9uIG9mIGEgdGFwZSBpcyBpbmNsdWRlZCBpbiB0aGUgY2hlY2tfZGV2aWNlcyByb3V0aW5lLgorICAgICAgVGhpcyBpcyBkb25lIGJ5IGNoZWNraW5nIGZvciBUWVBFX1RBUEUsIHRoYXQgaXMgYWxyZWFkeSBkZWZpbmVkIGluCisgICAgICB0aGUga2VybmVsLXNjc2ktZW52aXJvbm1lbnQuIFRoZSBtYXJrdXAgb2YgYSB0YXBlIGlzIGRvbmUgaW4gdGhlIAorICAgICAgZ2xvYmFsIGxkbl9pc190YXBlW10gYXJyYXkuIElmIHRoZSBlbnRyeSBvbiBpbmRleCBsZG4gCisgICAgICBpcyAxLCB0aGVyZSBpcyBhIHRhcGVkcml2ZSBjb25uZWN0ZWQuCisgICAzKSBUaGUgbGRuX2lzX3RhcGVbXSBhcnJheSBpcyBuZWNlc3NhcnkgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0YXBlLSBhbmQgCisgICAgICBvdGhlciBkZXZpY2VzLiBGaXhlZCBibG9ja2xlbmd0aCBkZXZpY2VzIHNob3VsZCBub3QgY2F1c2UgYSBwcm9ibGVtCisgICAgICB3aXRoIHRoZSBTQ0ItY29tbWFuZCBmb3IgcmVhZCBhbmQgd3JpdGUgaW4gdGhlIGlibW1jYV9xdWV1ZWNvbW1hbmQKKyAgICAgIHN1YnJvdXRpbmUuIFRoZXJlZm9yZSwgSSBvbmx5IGRlcml2YXRlIHRoZSBSRUFEX1hYLCBXUklURV9YWCBmb3IKKyAgICAgIHRoZSB0YXBlLWRldmljZXMsIGFzIHJlY29tbWVuZGVkIGJ5IElCTSBpbiB0aGlzIFRlY2huaWNhbCBSZWZlcmVuY2UsCisgICAgICBtZW50aW9uZWQgYmVsb3cuIChJQk0gcmVjb21tZW5kcyB0byBhdm9pZCB1c2luZyB0aGUgcmVhZC93cml0ZSBvZiB0aGUKKyAgICAgIHN1YnN5c3RlbSwgYnV0IHRoZSBmYWN0IHdhcywgdGhhdCByZWFkL3dyaXRlIGNhdXNlcyBhIGNvbW1hbmQgZXJyb3IgZnJvbQorICAgICAgdGhlIHN1YnN5c3RlbSBhbmQgdGhpcyBjYXVzZXMga2VybmVsLXBhbmljLikKKyAgIDQpIEluIGFkZGl0aW9uLCBJIHByb3Bvc2UgdG8gdXNlIHRoZSBsZG4gaW5zdGVhZCBvZiBhIGZpeCBjaGFyIGZvciB0aGUKKyAgICAgIGRpc3BsYXkgb2YgUFMyX0RJU0tfTEVEX09OKCkuIE9uIDk1LCBvbmUgY2FuIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlCisgICAgICBkZXZpY2VzIHRoYXQgYXJlIGFjY2Vzc2VkLiBJdCBzaG93cyBhY3Rpdml0eSBhbmQgZWFzeWZpZXMgZGVidWdnaW5nLiAgIAorICAgVGhlIHRhcGUtc3VwcG9ydCBoYXMgYmVlbiB0ZXN0ZWQgd2l0aCBhIFNPTlkgU0RULTUyMDAgYW5kIGEgSFAgRERTLTIKKyAgIChJIGRvIG5vdCBrbm93IHlldCB0aGUgdHlwZSkuIE9wdGltaXphdGlvbiBhbmQgQ0QtUk9NIGF1ZGlvLXN1cHBvcnQsIAorICAgSSBhbSB3b3JraW5nIG9uIC4uLgorICAgLSBNaWNoYWVsIExhbmcKKyAgIAorICAgSnVuZSAxOSAxOTk3OiAodjEuNmIpCisgICAxKSBTdWJtaXR0aW5nIHRoZSBleHRyYS1hcnJheSBsZG5faXNfdGFwZVtdIC0+IHRvIHRoZSBsb2NhbCBsZFtdCisgICAgICBkZXZpY2UtYXJyYXkuIAorICAgMikgQ0QtUk9NIEF1ZGlvLVBsYXkgc2VlbXMgdG8gd29yayBub3cuCisgICAzKSBXaGVuIHVzaW5nIEREUy0yICgxMjBNKSBEQVQtVGFwZXMsIG10c3Qgc2hvd3Mgc3RpbGwgZGVuc2l0eS1jb2RlCisgICAgICAweDEzIGZvciBvcmRpbmFyeSBERFMgKDYxMDAwIEJQTSkgaW5zdGVhZCAweDI0IGZvciBERFMtMi4gVGhpcyBhcHBlYXJzIAorICAgICAgYWxzbyBvbiBBZGFwdGVjIDI5NDAgYWRhcHRvciBpbiBhIFBDSS1TeXN0ZW0uIFRoZXJlZm9yZSwgSSBhc3N1bWUgdGhhdCAKKyAgICAgIHRoZSBwcm9ibGVtIGlzIGluZGVwZW5kZW50IG9mIHRoZSBsb3ctbGV2ZWwtZHJpdmVyL2J1cy1hcmNoaXRlY3R1cmUuCisgICA0KSBIZXhhZGVjaW1hbCBsZG4gb24gUFMvMi05NSBMRUQtZGlzcGxheS4KKyAgIDUpIEZpeGluZyBvZiB0aGUgUFMvMi1MRUQgb24vb2ZmIHRoYXQgaXQgd29ya3MgcmlnaHQgd2l0aCB0YXBlZHJpdmVzIGFuZAorICAgICAgZG9lcyBub3QgY29uZnVzZSB0aGUgZGlza19yd19pbl9wcm9ncmVzcyBjb3VudGVyLgorICAgLSBNaWNoYWVsIExhbmcKKyAgCisgICBKdW5lIDIxIDE5OTc6ICh2MS43YikKKyAgIDEpIEFkZGluZyBvZiBhIHByb2NfaW5mbyByb3V0aW5lIHRvIGluZm9ybSBpbiAvcHJvYy9zY3NpL2libW1jYS88aG9zdD4gdGhlCisgICAgICBvdXRlci13b3JsZCBhYm91dCBvcGVyYXRpb25hbCBsb2FkIHN0YXRpc3RpY3Mgb24gdGhlIGRpZmZlcmVudCBsZG5zLAorICAgICAgc2VlbiBieSB0aGUgZHJpdmVyLiBFdmVyeWJvZHkgdGhhdCBoYXMgbW9yZSB0aGFuIG9uZSBJQk0tU0NTSSBzaG91bGQKKyAgICAgIHRlc3QgdGhpcywgYmVjYXVzZSBJIG9ubHkgaGF2ZSBvbmUgYW5kIGNhbm5vdCBzZWUgd2hhdCBoYXBwZW5zIHdpdGggbW9yZQorICAgICAgdGhhbiBvbmUgSUJNLVNDU0kgaG9zdHMuCisgICAyKSBEZWZpbml0aW9uIG9mIGEgZHJpdmVyIHZlcnNpb24tbnVtYmVyIHRvIGhhdmUgYSBiZXR0ZXIgcmVjb2duaXRpb24gb2YgCisgICAgICB0aGUgc291cmNlIHdoZW4gdGhlcmUgYXJlIGV4aXN0aW5nIHRvbyBtdWNoIHJlbGVhc2VzIHRoYXQgbWF5IGNvbmZ1c2UKKyAgICAgIHRoZSB1c2VyLCB3aGVuIHJlYWRpbmcgYWJvdXQgcmVsZWFzZS1zcGVjaWZpYyBwcm9ibGVtcy4gVXAgdG8ga25vdywKKyAgICAgIEkgY2FsY3VsYXRlZCB0aGUgdmVyc2lvbi1udW1iZXIgdG8gYmUgMS43LiBCZWNhdXNlIHdlIGFyZSBpbiBCRVRBLXRlc3QKKyAgICAgIHlldCwgaXQgaXMgdG9kYXkgMS43Yi4KKyAgIDMpIFNvcnJ5IGZvciB0aGUgaGVhdnkgYnVnIEkgcHJvZ3JhbW1lZCBvbiBKdW5lIDE5IDE5OTchIEFmdGVyIHRoYXQsIHRoZQorICAgICAgQ0QtUk9NIGRpZCBub3Qgd29yayBhbnkgbW9yZSEgVGhlIEM3LWNvbW1hbmQgd2FzIGEgZmFrZSBpbXByZXNzaW9uCisgICAgICBJIGdvdCB3aGlsZSBwcm9ncmFtbWluZy4gTm93LCB0aGUgUkVBRCBhbmQgV1JJVEUgY29tbWFuZHMgZm9yIENELVJPTSBhcmUKKyAgICAgIG5vIGxvbmdlciBydW5uaW5nIG92ZXIgdGhlIHN1YnN5c3RlbSwgYnV0IGp1c3Qgb3ZlciAKKyAgICAgIElNX09USEVSX1NDU0lfQ01EX0NNRC4gT24gbXkgb2JzZXJ2YXRpb25zIChQUy8yLTk1KSwgbm93IENELVJPTSBtb3VudHMKKyAgICAgIG11Y2ggZmFzdGVyKCEpIGFuZCBob3BlZnVsbHkgYWxsIGZhbmN5IG11bHRpbWVkaWEtZnVuY3Rpb25zLCBsaWtlIGRpcmVjdAorICAgICAgZGlnaXRhbCByZWNvcmRpbmcgZnJvbSBhdWRpby1DRHMgYWxzbyB3b3JrLiAoSSB0cmllZCBpdCB3aXRoIGNkZGEyd2F2CisgICAgICBmcm9tIHRoZSBjZHd0b29scy1wYWNrYWdlIGFuZCBpdCBmaWxsZWQgdXAgdGhlIGhhcmRkaXNrIGltbWVkaWF0ZWx5IDotKS4pCisgICAgICBUbyBlYXNpZnkgYm9vbGVhbiBsb2dpY3MsIGEgZnVydGhlciBsb2NhbCBkZXZpY2UtdHlwZSBpbiBsZFtdLCBjYWxsZWQKKyAgICAgIGlzX2Nkcm9tIGhhcyBiZWVuIGluY2x1ZGVkLgorICAgNCkgSWYgb25lIHVzZXMgYSBTQ1NJLWRldmljZSBvZiB1bnN1cHBvcnRlZCB0eXBlL2NvbW1hbmRzLCBvbmUKKyAgICAgIGltbWVkaWF0ZWx5IHJ1bnMgaW50byBhIGtlcm5lbC1wYW5pYyBjYXVzZWQgYnkgQ29tbWFuZCBFcnJvci4gVG8gYmV0dGVyCisgICAgICB1bmRlcnN0YW5kIHdoaWNoIFNDU0ktY29tbWFuZCBjYXVzZWQgdGhlIHByb2JsZW0sIEkgZXh0ZW5kZWQgdGhpcworICAgICAgc3BlY2lmaWMgcGFuaWMtbWVzc2FnZSBzbGlnaHRseS4KKyAgIC0gTWljaGFlbCBMYW5nCisgCisgICBKdW5lIDI1IDE5OTc6ICh2MS44YikKKyAgIDEpIFNvbWUgY29zbWV0aWNhbCBjaGFuZ2VzIGZvciB0aGUgaGFuZGxpbmcgb2YgU0NTSS1kZXZpY2UtdHlwZXMuCisgICAgICBOb3csIGFsc28gQ0QtQnVybmVycyAvIFdPUk1zIGFuZCBTQ1NJLXNjYW5uZXJzIHNob3VsZCB3b3JrLiBGb3IKKyAgICAgIE1PLWRyaXZlcyBJIGhhdmUgbm8gZXhwZXJpZW5jZSwgdGhlcmVmb3JlIG5vdCB5ZXQgc3VwcG9ydGVkLgorICAgICAgSW4gbG9naWNhbF9kZXZpY2VzIEkgY2hhbmdlZCBmcm9tIGRpZmZlcmVudCB0eXBlLXZhcmlhYmxlcyB0byBvbmUKKyAgICAgIGNhbGxlZCAnZGV2aWNlX3R5cGUnIHdoZXJlIHRoZSB2YWx1ZXMsIGNvcnJlc3BvbmRpbmcgdG8gc2NzaS5oLAorICAgICAgb2YgYSBTQ1NJLWRldmljZSBhcmUgc3RvcmVkLgorICAgMikgVGhlcmUgZXhpc3RlZCBhIHNtYWxsIGJ1ZywgdGhhdCBtYXBzIGEgZGV2aWNlLCBjb21pbmcgYWZ0ZXIgYSBTQ1NJLXRhcGUKKyAgICAgIHdyb25nLiBUaGVyZWZvcmUsIGUuZy4gYSBDRC1ST00gY2hhbmdlciB3b3VsZCBoYXZlIGJlZW4gbWFwcGVkIHdyb25nCisgICAgICAtPiBwcm9ibGVtIHJlbW92ZWQuCisgICAzKSBFeHRlbnNpb24gb2YgdGhlIGxvZ2ljYWxfZGV2aWNlIHN0cnVjdHVyZS4gTm93IGl0IGNvbnRhaW5zIGFsc28gZGV2aWNlLAorICAgICAgdmVuZG9yIGFuZCByZXZpc2lvbi1sZXZlbCBvZiBhIFNDU0ktZGV2aWNlIGZvciBpbnRlcm5hbCB1c2FnZS4KKyAgIC0gTWljaGFlbCBMYW5nCisKKyAgIEp1bmUgMjYtMjkgMTk5NzogKHYyLjBiKQorICAgMSkgVGhlIHJlbGVhc2UgbnVtYmVyIDIuMGIgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugb2YgdGhlIGNvbXBsZXRlbHkgbmV3IGRvbmUKKyAgICAgIHJlY29nbml0aW9uIGFuZCBoYW5kbGluZyBvZiBTQ1NJLWRldmljZXMgd2l0aCB0aGUgYWRhcHRlci4gQXMgSSBnb3QKKyAgICAgIGZyb20gQ2hyaXMgdGhlIGhpbnQsIHRoYXQgdGhlIHN1YnN5c3RlbSBjYW4gcmVhc3NpZ24gbGRucyBkeW5hbWljYWxseSwKKyAgICAgIEkgcmVtZW1iZXJlZCB0aGlzIGltbWVkaWF0ZV9hc3NpZ24tY29tbWFuZCwgSSBmb3VuZCBvbmNlIGluIHRoZSBoYW5kYm9vay4KKyAgICAgIE5vdywgdGhlIGRyaXZlciBmaXJzdCBraWxscyBhbGwgbGRuIGFzc2lnbm1lbnRzIHRoYXQgYXJlIHNldCBieSBkZWZhdWx0CisgICAgICBvbiB0aGUgU0NTSS1zdWJzeXN0ZW0uIEFmdGVyIHRoYXQsIGl0IHByb2JlcyBvbiBhbGwgcHVucyBhbmQgbHVucyBmb3IKKyAgICAgIGRldmljZXMgYnkgZ29pbmcgdGhyb3VnaCBhbGwgY29tYmluYXRpb25zIHdpdGggaW1tZWRpYXRlX2Fzc2lnbiBhbmQKKyAgICAgIHByb2JpbmcgZm9yIGRldmljZXMsIHVzaW5nIGRldmljZV9pbnF1aXJ5LiBUaGUgZm91bmQgcGh5c2ljYWwoISkgcHVuLGx1bgorICAgICAgc3RydWN0dXJlIGlzIHN0b3JlZCBpbiBnZXRfc2NzaVtdW10gYXMgZGV2aWNlIHR5cGVzLiBUaGlzIGlzIGZvbGxvd2VkCisgICAgICBieSB0aGUgYXNzaWdubWVudCBvZiBhbGwgbGRucyB0byBleGlzdGluZyBTQ1NJLWRldmljZXMuIElmIG1vcmUgbGRucworICAgICAgdGhhbiBkZXZpY2VzIGFyZSBhdmFpbGFibGUsIHRoZXkgYXJlIGFzc2lnbmVkIHRvIG5vbiBleGlzdGluZyBwdW4sbHVuCisgICAgICBjb21iaW5hdGlvbnMgdG8gc2F0aXNmeSB0aGUgYWRhcHRlci4gV2l0aCB0aGlzLCB0aGUgZHluYW1pY2FsIG1hcHBpbmcKKyAgICAgIHdhcyBwb3NzaWJsZSB0byBpbXBsZW1lbnQuIChGb3IgZnVydGhlciBpbmZvIHNlZSB0aGUgdGV4dCBpbiB0aGUgCisgICAgICBzb3VyY2UtY29kZSBhbmQgaW4gdGhlIGRlc2NyaXB0aW9uIGJlbG93LiBSZWFkIHRoZSBkZXNjcmlwdGlvbgorICAgICAgYmVsb3cgQkVGT1JFIGluc3RhbGxpbmcgdGhpcyBkcml2ZXIgb24geW91ciBzeXN0ZW0hKQorICAgMikgQ2hhbmdlZCB0aGUgbmFtZSBJQk1NQ0FfRFJJVkVSX1ZFUlNJT04gdG8gSUJNTUNBX1NDU0lfRFJJVkVSX1ZFUlNJT04uCisgICAzKSBUaGUgTEVELWRpc3BsYXkgc2hvd3Mgb24gUFMvMi05NSBubyBsb25nZXIgdGhlIGxkbiwgYnV0IHRoZSBTQ1NJLUlECisgICAgICAocHVuKSBvZiB0aGUgYWNjZXNzZWQgU0NTSS1kZXZpY2UuIFRoaXMgaXMgbm93IHNlbnNlZnVsLCBiZWNhdXNlIHRoZSAKKyAgICAgIHB1biBrbm93biB3aXRoaW4gdGhlIGRyaXZlciBpcyBleGFjdGx5IHRoZSBwdW4gb2YgdGhlIHBoeXNpY2FsIGRldmljZQorICAgICAgYW5kIG5vIGxvbmdlciBhIGZha2Ugb25lLgorICAgNCkgVGhlIC9wcm9jL3Njc2kvaWJtbWNhLzxob3N0X25vPiBjb25zaXN0cyBub3cgb2YgdGhlIGZpcnN0IHBhcnQsIHdoZXJlCisgICAgICBoaXQtc3RhdGlzdGljcyBvZiBsZG5zIGlzIHNob3duIGFuZCBhIHNlY29uZCBwYXJ0LCB3aGVyZSB0aGUgbWFwcyBvZiAKKyAgICAgIHBoeXNpY2FsIGFuZCBsb2dpY2FsIFNDU0ktZGV2aWNlcyBhcmUgZGlzcGxheWVkLiBUaGlzIGNvdWxkIGJlIHZlcnkgCisgICAgICBpbnRlcmVzdGluZywgd2hlbiBvbmUgaXMgdXNpbmcgbW9yZSB0aGFuIDE1IFNDU0ktZGV2aWNlcyBpbiBvcmRlciB0byAKKyAgICAgIGZvbGxvdyB0aGUgZHluYW1pY2FsIHJlbWFwcGluZyBvZiBsZG5zLgorICAgLSBNaWNoYWVsIExhbmcKKyAKKyAgIEp1bmUgMjYtMjkgMTk5NzogKHYyLjBiLTEpCisgICAxKSBJIGZvcmdvdCB0byBzd2l0Y2ggdGhlIGxvY2FsX2NoZWNraW5nX3BoYXNlX2ZsYWcgdG8gMSBhbmQgYmFjayB0byAwCisgICAgICBpbiB0aGUgZHluYW1pY2FsIHJlbWFwcGluZyBwYXJ0IGluIGlibW1jYV9xdWV1ZWNvbW1hbmQgZm9yIHRoZSAKKyAgICAgIGRldmljZV9leGlzdCByb3V0aW5lLiBTb3JyeS4KKyAgIC0gTWljaGFlbCBMYW5nCisgCisgICBKdWx5IDEtMTMgMTk5NzogKHYzLjBiLGMpCisgICAxKSBNZXJnaW5nIG9mIHRoZSBkcml2ZXItZGV2ZWxvcG1lbnRzIG9mIEtsYXVzIEt1ZGllbGthIGFuZCBNaWNoYWVsIExhbmcgCisgICAgICBpbiBvcmRlciB0byBnZXQgYSBvcHRpbXVtIGFuZCB1bmlmaWVkIGRyaXZlci1yZWxlYXNlIGZvciB0aGUgCisgICAgICBJQk0tU0NTSS1TdWJzeXN0ZW0tQWRhcHRlcihzKS4KKyAgICAgICAgIEZvciBwZW9wbGUsIHVzaW5nIHRoZSBLZXJuZWwtcmVsZWFzZSA+PTIuMS4wLCBtb2R1bGUtc3VwcG9ydCBzaG91bGQgCisgICAgICBiZSBubyBwcm9ibGVtLiBGb3IgdXNlcnMsIHJ1bm5pbmcgdW5kZXIgPDIuMS4wLCBtb2R1bGUtc3VwcG9ydCBtYXkgbm90IAorICAgICAgd29yaywgYmVjYXVzZSB0aGUgbWV0aG9kcyBoYXZlIGNoYW5nZWQgYmV0d2VlbiAyLjAueCBhbmQgMi4xLnguCisgICAyKSBBZGRlZCBzb21lIG1vcmUgZWZmZWN0aXZlIHN0YXRpc3RpY3MgZm9yIC9wcm9jLW91dHB1dC4KKyAgIDMpIENoYW5nZSB0eXBlY2FzdGluZyBhdCBuZWNlc3NhcnkgcG9pbnRzIGZyb20gKHVuc2lnbmVkIGxvbmcpIHRvCisgICAgICB2aXJ0X3RvX2J1cygpLgorICAgNCkgSW5jbHVkZWQgI2lmLi4uIGF0IHNwZWNpYWwgcG9pbnRzIHRvIGhhdmUgc3BlY2lmaWMgYWRhcHRpb24gb2YgdGhlCisgICAgICBkcml2ZXIgdG8ga2VybmVsIDIuMC54IGFuZCAyLjEueC4gSXQgc2hvdWxkIHRoZXJlZm9yZSBhbHNvIHJ1biB3aXRoIAorICAgICAgbGF0ZXIgcmVsZWFzZXMuCisgICA1KSBNYWduZXRvLU9wdGljYWwgZHJpdmVzIGFuZCBtZWRpdW0tY2hhbmdlcnMgYXJlIGFsc28gcmVjb2duaXplZCwgbm93LgorICAgICAgVGhlcmVmb3JlLCB3ZSBoYXZlIGEgY29tcGxldGVseSBnYXBmcmVlIHJlY29nbml0aW9uIG9mIGFsbCBTQ1NJLQorICAgICAgZGV2aWNlLXR5cGVzLCB0aGF0IGFyZSBrbm93biBieSBMaW51eCB1cCB0byBrZXJuZWwgMi4xLjMxLgorICAgNikgVGhlIGZsYWcgU0NTSV9JQk1NQ0FfREVWX1JFU0VUIGhhcyBiZWVuIGluc2VydGVkLiBJZiBpdCBpcyBzZXQgd2l0aGluCisgICAgICB0aGUgY29uZmlndXJhdGlvbiwgZWFjaCBjb25uZWN0ZWQgU0NTSS1kZXZpY2Ugd2lsbCBnZXQgYSByZXNldCBjb21tYW5kCisgICAgICBkdXJpbmcgYm9vdHRpbWUuIFRoaXMgY2FuIGJlIG5lY2Vzc2FyeSBmb3Igc29tZSBzcGVjaWFsIFNDU0ktZGV2aWNlcy4KKyAgICAgIFRoaXMgZmxhZyBzaG91bGQgYmUgaW5jbHVkZWQgaW4gQ29uZmlnLmluLgorICAgICAgKFNlZSBhbHNvIHRoZSBuZXcgQ29uZmlnLmluIGZpbGUuKQorICAgUHJvYmFibGUgbmV4dCBpbXByb3ZlbWVudDogYmFkIGRpc2sgaGFuZGxlci4KKyAgIC0gTWljaGFlbCBMYW5nCisgCisgICBTZXB0IDE0IDE5OTc6ICh2My4wYykKKyAgIDEpIFNvbWUgZGVidWdnaW5nIGFuZCBzcGVlZCBvcHRpbWl6YXRpb24gYXBwbGllZC4KKyAgIC0gTWljaGFlbCBMYW5nCisKKyAgIERlYyAxNSwgMTk5NworICAgIC0gY2hyaXNiQHRydWVzcGVjdHJhLmNvbQorICAgIC0gbWFkZSB0aGUgZnJvbnQgcGFuZWwgZGlzcGxheSB0aGluZ3kgb3B0aW9uYWwsIHNwZWNpZmllZCBmcm9tIHRoZQorICAgIGNvbW1hbmQtbGluZSB2aWEgaWJtbWNhc2NzaT1kaXNwbGF5LiAgQWxvbmcgdGhlIGxpbmVzIG9mIHRoZSAvTEVECisgICAgb3B0aW9uIGZvciB0aGUgT1MvMiBkcml2ZXIuCisgICAgLSBmaXhlZCBzbWFsbCBidWcgaW4gdGhlIExFRCBkaXNwbGF5IHRoYXQgd291bGQgaGFuZyBzb21lIG1hY2hpbmVzLgorICAgIC0gcmV2ZXJzZWQgb3JkZXJpbmcgb2YgdGhlIGRyaXZlcyAodXNpbmcgdGhlCisgICAgSUJNTUNBX1NDU0lfT1JERVJfU1RBTkRBUkQgZGVmaW5lKS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciB0d28gbWFpbgorICAgIHJlYXNvbnM6CisJLSB1c2VycyB3aG8ndmUgYWxyZWFkeSBpbnN0YWxsZWQgTGludXggd29uJ3QgYmUgc2NyZXdlZC4gIEtlZXAKKwlpbiBtaW5kIHRoYXQgbm90IGV2ZXJ5b25lIGlzIGEga2VybmVsIGhhY2tlci4KKwktIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgQklPUyBvcmRlcmluZyBvZiB0aGUgZHJpdmVzLiAgSW4gdGhlCisJQklPUywgaWQgNiBpcyBDOiwgaWQgMCBtaWdodCBiZSBEOi4gIFdpdGggdGhpcyBzY2hlbWUsIHRoZXknZCBiZQorCWJhY2t3YXJkcy4gIFRoaXMgY29uZnVzZXMgdGhlIGNyYXAgb3V0IG9mIHRob3NlIGhlYXRoZW5zIHdobyd2ZQorCWdvdCBhIGltcHVyZSBMaW51eCBpbnN0YWxsYXRpb24gKHdoaWNoLCA8d2luY2U+LCBJJ20gb25lIG9mKS4KKyAgICBUaGlzIHdob2xlIHByb2JsZW0gYXJpc2VzIGJlY2F1c2UgSUJNIGlzIGFjdHVhbGx5IG5vbi1zdGFuZGFyZCB3aXRoCisgICAgdGhlIGlkIHRvIEJJT1MgbWFwcGluZ3MuICBZb3UnbGwgZmluZCwgaW4gZmRvbWFpbi5jLCBhIHNpbWlsYXIKKyAgICBjb21tZW50IGFib3V0IGEgZmV3IEZEIEJJT1MgcmV2aXNpb25zLiAgVGhlIExpbnV4IChhbmQgYXBwYXJlbnRseQorICAgIGluZHVzdHJ5KSBzdGFuZGFyZCBpcyB0aGF0IEM6IG1hcHMgdG8gc2NzaSBpZCAoMCwwKS4gIExldCdzIHN0aWNrCisgICAgd2l0aCB0aGF0IHN0YW5kYXJkLgorICAgIC0gU2luY2UgdGhpcyBpcyB0ZWNobmljYWxseSBhIGJyYW5jaCBvZiBteSBvd24sIEkgY2hhbmdlZCB0aGUKKyAgICB2ZXJzaW9uIG51bWJlciB0byAzLjBlLWNwYi4KKworICAgSmFuIDE3LCAxOTk4OiAodjMuMGYpCisgICAxKSBBZGRpdGlvbiBvZiBzb21lIHN0YXRpc3RpY2FsIGluZm8gZm9yIC9wcm9jIGluIHByb2NfaW5mby4KKyAgIDIpIFRha2luZyBjYXJlIG9mIHRoZSBTQ1NJLWFzc2lnbm1lbnQgcHJvYmxlbSwgZGVhbGVkIGJ5IENocmlzIGF0IERlYyAxNQorICAgICAgMTk5Ny4gSW4gZmFjdCwgSUJNIGlzIHJpZ2h0LCBjb25jZXJuaW5nIHRoZSBhc3NpZ25tZW50IG9mIFNDU0ktZGV2aWNlcyAKKyAgICAgIHRvIGRyaXZlbGV0dGVycy4gSXQgaXMgY29uZm9ybSB0byB0aGUgQU5TSS1kZWZpbml0aW9uIG9mIHRoZSBTQ1NJLQorICAgICAgc3RhbmRhcmQgdG8gYXNzaWduIGRyaXZlIEM6IHRvIFNDU0ktaWQgNiwgYmVjYXVzZSBpdCBpcyB0aGUgaGlnaGVzdAorICAgICAgaGFyZHdhcmUgcHJpb3JpdHkgYWZ0ZXIgdGhlIGhvc3RhZGFwdGVyICh0aGF0IGhhcyBzdGlsbCB0b2RheSBieQorICAgICAgZGVmYXVsdCBldmVyeXdoZXJlIGlkIDcpLiBBbHNvIHJlYWx0aW1lLW9wZXJhdGluZyBzeXN0ZW1zIHRoYXQgSSB1c2UsIAorICAgICAgbGlrZSBMeW54T1MgYW5kIE9TOSwgd2hpY2ggYXJlIHF1aXRlIGluZHVzdHJpYWwgc3lzdGVtcyB1c2UgdG9wLWRvd24KKyAgICAgIG51bWJlcmluZyBvZiB0aGUgaGFyZGRpc2tzLCB0aGF0IGlzIGFsc28gc3RhcnRpbmcgYXQgaWQgNi4gTm93LCBvbmUKKyAgICAgIHNpdHMgYSBiaXQgYmV0d2VlbiB0d28gY2hhaXJzLiBPbiBvbmUgaGFuZCBzaWRlLCB1c2luZyB0aGUgZGVmaW5lCisgICAgICBJQk1NQ0FfU0NTSV9PUkRFUl9TVEFOREFSRCBtYWtlcyBMaW51eCBhc3NpZ25pbmcgZGlza3MgY29uZm9ybSB0bworICAgICAgdGhlIElCTS0gYW5kIEFOU0ktU0NTSS1zdGFuZGFyZCBhbmQga2VlcHMgdGhpcyBkcml2ZXIgZG93bndhcmQKKyAgICAgIGNvbXBhdGlibGUgdG8gb2xkZXIgcmVsZWFzZXMsIG9uIHRoZSBvdGhlciBoYW5kIHNpZGUsIHBlb3BsZSBpcyBxdWl0ZQorICAgICAgaGFiaXR1YXRlZCBpbiBiZWxpZXZpbmcgdGhhdCBDOiBpcyBhc3NpZ25lZCB0byAoMCwwKSBhbmQgbXVjaCBvdGhlcgorICAgICAgU0NTSS1CSU9TIGRvIHNvLiBUaGVyZWZvcmUsIEkgbW92ZWQgdGhlIElCTU1DQV9TQ1NJX09SREVSX1NUQU5EQVJEIAorICAgICAgZGVmaW5lIG91dCBvZiB0aGUgZHJpdmVyIGFuZCBwdXQgaXQgaW50byBDb25maWcuaW4gYXMgc3ViaXRlbSBvZiAKKyAgICAgICdJQk0gU0NTSSBzdXBwb3J0Jy4gQSBoZWxwLCBhZGRlZCB0byBEb2N1bWVudGF0aW9uL0NvbmZpZ3VyZS5oZWxwIAorICAgICAgZXhwbGFpbnMgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gc2F5aW5nICd5JyBvciAnbicgdG8gdGhlIHVzZXIsIHdoZW4gCisgICAgICBJQk1NQ0FfU0NTSV9PUkRFUl9TVEFOREFSRCBwcm9tcHRzLCBzbyB0aGUgb3JkaW5hcnkgdXNlciBpcyBlbmFibGVkIHRvIAorICAgICAgY2hvb3NlIHRoZSB3YXkgb2YgYXNzaWdubWVudCwgZGVwZW5kaW5nIG9uIGhpcyBvd24gc2l0dWF0aW9uIGFuZCBndXN0by4KKyAgIDMpIEFkYXB0ZWQgU0NTSV9JQk1NQ0FfREVWX1JFU0VUIHRvIHRoZSBsb2NhbCBuYW1pbmcgY29udmVudGlvbiwgc28gaXQgaXMKKyAgICAgIG5vdyBjYWxsZWQgSUJNTUNBX1NDU0lfREVWX1JFU0VULgorICAgNCkgT3B0aW1pemF0aW9uIG9mIHByb2NfaW5mbyBhbmQgaXRzIHN1YnJvdXRpbmVzLgorICAgNSkgQWRkZWQgbW9yZSBpbi1zb3VyY2UtY29tbWVudHMgYW5kIGV4dGVuZGVkIHRoZSBkcml2ZXIgZGVzY3JpcHRpb24gYnkKKyAgICAgIHNvbWUgZXhwbGFuYXRpb24gYWJvdXQgdGhlIFNDU0ktZGV2aWNlLWFzc2lnbm1lbnQgcHJvYmxlbS4KKyAgIC0gTWljaGFlbCBMYW5nCisgICAKKyAgIEphbiAxOCwgMTk5ODogKHYzLjBnKQorICAgMSkgQ29ycmVjdGluZyBuYW1lcyB0byBiZSBhYnNvbHV0ZWx5IGNvbmZvcm0gdG8gdGhlIGxhdGVyIDIuMS54IHJlbGVhc2VzLgorICAgICAgVGhpcyBpcyBuZWNlc3NhcnkgZm9yIAorICAgICAgICAgICAgSUJNTUNBX1NDU0lfREVWX1JFU0VUIC0+IENPTkZJR19JQk1NQ0FfU0NTSV9ERVZfUkVTRVQKKyAgICAgICAgICAgIElCTU1DQV9TQ1NJX09SREVSX1NUQU5EQVJEIC0+IENPTkZJR19JQk1NQ0FfU0NTSV9PUkRFUl9TVEFOREFSRAorICAgLSBNaWNoYWVsIExhbmcKKyAKKyAgIEphbiAxOCwgMTk5OTogKHYzLjEgTUNBLXRlYW0gaW50ZXJuYWwpCisgICAxKSBUaGUgbXVsdGlwbGUgaG9zdHMgc3RydWN0dXJlIGlzIGFjY2Vzc2VkIGZyb20gZXZlcnkgc3Vicm91dGluZSwgc28gdGhlcmUKKyAgICAgIGlzIG5vIGxvbmdlciB0aGUgYWRkcmVzcyBvZiB0aGUgZGV2aWNlIHN0cnVjdHVyZSBwYXNzZWQgZnJvbSBmdW5jdGlvbgorICAgICAgdG8gZnVuY3Rpb24sIGJ1dCBvbmx5IHRoZSBob3N0aW5kZXguIEEgY2FsbCBieSB2YWx1ZSwgbm90aGluZyBtb3JlLiBUaGlzCisgICAgICBzaG91bGQgcmVhbGx5IGJlIHVuZGVyc3Rvb2QgYnkgdGhlIGNvbXBpbGVyIGFuZCB0aGUgc3Vic3lzdGVtIHNob3VsZCBnZXQKKyAgICAgIHRoZSByaWdodCB2YWx1ZXMgYW5kIGFkZHJlc3Nlcy4KKyAgIDIpIFRoZSBTQ1NJLXN1YnN5c3RlbSBkZXRlY3Rpb24gd2FzIG5vdCBjb21wbGV0ZSBhbmQgcXVpdGUgaHVnZWx5IGJ1Z2d5IHVwCisgICAgICB0byBub3csIGNvbXBhcmVkIHRvIHRoZSB0ZWNobmljYWwgbWFudWFsLiBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlIHBvczIKKyAgICAgIHJlZ2lzdGVyIGlzIG5vdCBhcyBhc3N1bWVkIGJ5IHBlb3BsZSBiZWZvcmUsIHRoZXJlZm9yZSwgSSBkcm9wcGVkIGEgbm90ZQorICAgICAgaW4gdGhlIGlibW1jYV9kZXRlY3QgZnVuY3Rpb24gdG8gc2hvdyB0aGUgcmVnaXN0ZXJzJyBpbnRlcnByZXRhdGlvbi4KKyAgICAgIFRoZSBwb3MtcmVnaXN0ZXJzIG9mIGludGVncmF0ZWQgU0NTSS1zdWJzeXN0ZW1zIGRvIG5vdCBjb250YWluIGFueSAKKyAgICAgIGluZm9ybWF0aW9uIGNvbmNlcm5pbmcgdGhlIElPLXBvcnQgb2Zmc2V0LCByZWFsbHkuIEluc3RlYWQsIHRoZXkgY29udGFpbgorICAgICAgc29tZSBpbmZvIGFib3V0IHRoZSBhZGFwdGVyLCB0aGUgY2hpcCwgdGhlIE5WUkFNIC4uLi4gVGhlIEkvTy1wb3J0IGlzCisgICAgICBmaXhlZCB0byAweDM1NDAgLSAweDM1NDcuIFRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIGFkYXB0ZXJzIGluIHRoZSAKKyAgICAgIHNsb3RzIGFuZCB0aGV5IGdldCBhbiBvZmZzZXQgZm9yIHRoZSBJL08gYXJlYSBpbiBvcmRlciB0byBnZXQgdGhlaXIgb3duCisgICAgICBJL08tYWRkcmVzcyBhcmVhLiBTZWUgY2hhcHRlciAyIGZvciBkZXRhaWxlZCBkZXNjcmlwdGlvbi4gQXQgbGVhc3QsIHRoZSAKKyAgICAgIGRldGVjdGlvbiBzaG91bGQgbm93IHdvcmsgcmlnaHQsIGV2ZW4gb24gbW9kZWxzIG90aGVyIHRoYW4gOTUuIFRoZSA5NWVycworICAgICAgY2FtZSBoYXBwaWx5IGFyb3VuZCB0aGUgYnVnLCBhcyB0aGVpciBwb3MyIHJlZ2lzdGVyIGNvbnRhaW5zIGFsd2F5cyAwIAorICAgICAgaW4gdGhlIGNyaXRpY2FsIGFyZWEuIFJlc2VydmVkIGJpdHMgYXJlIG5vdCBhbGxvd2VkIHRvIGJlIGludGVycHJldGVkLCAKKyAgICAgIHRoZXJlZm9yZSwgSUJNIGlzIGFsbG93ZWQgdG8gc2V0IHRob3NlIGJpdHMgYXMgdGhleSBsaWtlIGFuZCB0aGV5IG1heSAKKyAgICAgIHJlYWxseSB2YXJ5IGJldHdlZW4gZGlmZmVyZW50IFBTLzIgbW9kZWxzLiBTbywgbm93LCBubyBpbnRlcnByZXRhdGlvbiAKKyAgICAgIG9mIHJlc2VydmVkIGJpdHMgLSBob3BlZnVsbHkgbm8gdHJvdWJsZSBoZXJlIGFueW1vcmUuCisgICAzKSBUaGUgY29tbWFuZCBlcnJvciwgd2hpY2ggeW91IG1heSBnZXQgb24gbW9kZWxzIDU1LCA1NiwgNTcsIDcwLCA3NyBhbmQKKyAgICAgIFA3MCBtYXkgaGF2ZSBiZWVuIGNhdXNlZCBieSB0aGUgZmFjdCwgdGhhdCBhZGFwdGVycyBvZiBvbGRlciBkZXNpZ24gZG8KKyAgICAgIG5vdCBsaWtlIHNlbmRpbmcgY29tbWFuZHMgdG8gbm9uLWV4aXN0aW5nIFNDU0ktZGV2aWNlcyBhbmQgd2lsbCByZWFjdAorICAgICAgd2l0aCBhIGNvbW1hbmQgZXJyb3IgYXMgYSBzaWduIG9mIHByb3Rlc3QuIFdoaWxlIHRoaXMgZXJyb3IgaXMgbm90CisgICAgICBwcmVzZW50IG9uIElCTSBTQ1NJIEFkYXB0ZXIgdy9jYWNoZSwgaXQgYXBwZWFycyBvbiBJQk0gSW50ZWdyYXRlZCBTQ1NJCisgICAgICBBZGFwdGVycy4gVGhlcmVmb3JlLCBJIGltcGxlbWVudGVkIGEgd29ya2Fycm91bmQgdG8gZm9yZ2l2ZSB0aG9zZSAKKyAgICAgIGFkYXB0ZXJzIHRoZWlyIHByb3Rlc3RzLCBidXQgaXQgaXMgbWFya2VkIHVwIGluIHRoZSBzdGF0aXNjdGlzLCBzbworICAgICAgYWZ0ZXIgYSBzdWNjZXNzZnVsIGJvb3QsIHlvdSBjYW4gc2VlIGluIC9wcm9jL3Njc2kvaWJtbWNhLzxob3N0X251bWJlcj4KKyAgICAgIGhvdyBvZnRlbiB0aGUgY29tbWFuZCBlcnJvcnMgaGF2ZSBiZWVuIGZvcmdpdmVuIHRvIHRoZSBTQ1NJLXN1YnN5c3RlbS4KKyAgICAgIElmIHRoZSBudW1iZXIgaXMgYmlnZ2VyIHRoYW4gMCwgeW91IGhhdmUgYSBTQ1NJIHN1YnN5c3RlbSBvZiBvbGRlcgorICAgICAgZGVzaWduLCB3aGF0IHNob3VsZCBubyBsb25nZXIgbWF0dGVyLgorICAgNCkgaWJtbWNhX2dldGluZm8oKSBoYXMgYmVlbiBhZGFwdGVkIHZlcnkgY2FyZWZ1bGx5LCBzbyBpdCBzaG93cyBpbiB0aGUgCisgICAgICBzbG90biBmaWxlIHJlYWxseSwgd2hhdCBpcyBzZW5zZWZ1bCB0byBiZSBwcmVzZW50ZWQuCisgICA1KSBpYm1tY2FfcmVnaXN0ZXIoKSBoYXMgYmVlbiBleHRlbmRlZCBpbiBpdHMgcGFyYW1ldGVyIGxpc3QgaW4gb3JkZXIgdG8KKyAgICAgIHBhc3MgdGhlIHJpZ2h0IG5hbWUgb2YgdGhlIFNDU0ktYWRhcHRlciB0byBMaW51eC4KKyAgIC0gTWljaGFlbCBMYW5nCisKKyAgIEZlYiA2LCAxOTk5OiAodjMuMSkKKyAgIDEpIEZpbmFsbHksIGFmdGVyIHNvbWUgMy4xQmV0YS1yZWxlYXNlcywgdGhlIDMuMSByZWxlYXNlLiBTb3JyeSwgZm9yIAorICAgICAgdGhlIGRlbGF5ZWQgcmVsZWFzZSwgYnV0IGl0IHdhcyBub3QgZmluaXNoZWQgd2l0aCB0aGUgcmVsZWFzZSBvZiAKKyAgICAgIEtlcm5lbCAyLjIuMC4KKyAgIC0gTWljaGFlbCBMYW5nCisgICAKKyAgIEZlYiAxMCwgMTk5OSAodjMuMSkKKyAgIDEpIEFkZGVkIGEgbmV3IGNvbW1hbmRsaW5lIHBhcmFtZXRlciBjYWxsZWQgJ2J5cGFzcycgaW4gb3JkZXIgdG8gYnlwYXNzCisgICAgICBldmVyeSBpbnRlZ3JhdGVkIHN1YnN5c3RlbSBTQ1NJLWNvbW1hbmQgY29uc2VxdWVudGx5IGluIGNhc2Ugb2YKKyAgICAgIHRyb3VibGVzLgorICAgMikgQ29uY2F0ZW5hdGVkIHJlYWRfY2FwYWNpdHkgcmVxdWVzdHMgdG8gdGhlIGhhcmRkaXNrcy4gSXQgZ2F2ZSBhIGxvdAorICAgICAgb2YgdHJvdWJsZXMgd2l0aCBzb21lIGNvbnRyb2xsZXJzIGFuZCBhZnRlciBJIHdhbnRlZCB0byBhcHBseSBzb21lCisgICAgICBleHRlbnNpb25zLCBpdCBqdW1wZWQgb3V0IGluIHRoZSBzYW1lIHNpdHVhdGlvbiwgb24gbXkgdy9jYWNoZSwgYXMgbGlrZSAKKyAgICAgIG9uIEQuIFdlaW5laGFsbHMnIE1vZGVsIDU2LCBoYXZpbmcgaW50ZWdyYXRlZCBTQ1NJLiBUaGlzIGdhdmUgbWUgdGhlIAorICAgICAgZGVzY2lzc2l2ZSBoaW50IHRvIG1vdmUgdGhlIGNvZGUtcGFydCBvdXQgYW5kIGRlY2xhcmUgaXQgZ2xvYmFsLiBOb3csCisgICAgICBpdCBzZWVtcyB0byB3b3JrIGJ5IGZhciBtdWNoIGJldHRlciBhbiBtb3JlIHN0YWJsZS4gTGV0IHVzIHNlZSwgd2hhdAorICAgICAgdGhlIHdvcmxkIHRoaW5rcyBvZiBpdC4uLgorICAgMykgQnkgdGhlIHdheSwgb25seSBTb255IERBVC1kcml2ZXMgc2VlbSB0byBzaG93IGRlbnNpdHkgY29kZSAweDEzLiBBCisgICAgICB0ZXN0IHdpdGggYSBIUCBkcml2ZSBnYXZlIHJpZ2h0IHJlc3VsdHMsIHNvIHRoZSBwcm9ibGVtIGlzIHZlbmRvci0KKyAgICAgIHNwZWNpZmljIGFuZCBub3QgYSBwcm9ibGVtIG9mIHRoZSBPUyBvciB0aGUgZHJpdmVyLgorICAgLSBNaWNoYWVsIExhbmcKKyAgIAorICAgRmViIDE4LCAxOTk5ICh2My4xZCkKKyAgIDEpIFRoZSBhYm9ydCBjb21tYW5kIGFuZCB0aGUgcmVzZXQgZnVuY3Rpb24gaGF2ZSBiZWVuIGNoZWNrZWQgZm9yIAorICAgICAgaW5jb25zaXN0ZW5jaWVzLiBGcm9tIHRoZSBsb2dpY2FsIHBvaW50IG9mIHRoaW5raW5nLCB0aGV5IHdvcmsKKyAgICAgIGF0IHRoZWlyIG9wdGltdW0sIG5vdywgYnV0IGFzIHRoZSBzdWJzeXN0ZW0gZG9lcyBub3QgYW5zd2VyIHdpdGggYW4KKyAgICAgIGludGVycnVwdCwgYWJvcnQgbmV2ZXIgZmluaXNoZXMsIHNpZ2guLi4KKyAgIDIpIEV2ZXJ5dGhpbmcsIHRoYXQgaXMgYWNjZXNzZWQgYnkgYSBidXNtYXN0ZXIgcmVxdWVzdCBmcm9tIHRoZSBhZGFwdGVyCisgICAgICBpcyBub3cgZGVjbGFyZWQgYXMgZ2xvYmFsIHZhcmlhYmxlLCBldmVuIHRoZSByZXR1cm4tYnVmZmVyIGluIHRoZQorICAgICAgbG9jYWwgY2hlY2tpbmcgcGhhc2UuIFRoaXMgYXNzdXJlcywgdGhhdCBubyBhY2Nlc3NlcyB0byB1bmRlZmluZWQgbWVtb3J5CisgICAgICBhcmVhcyBhcmUgcGVyZm9ybWVkLgorICAgMykgSW4gaWJtbWNhLmgsIHRoZSBsaW5lIHVuY2hlY2tlZF9pc2FfZG1hIGlzIGFkZGVkIHdpdGggMSBpbiBvcmRlciB0bworICAgICAgYXZvaWQgbWVtb3J5LXBvaW50ZXJzIGZvciB0aGUgYXJlYXMgaGlnaGVyIHRoYW4gMTZNQnl0ZSBpbiBvcmRlciB0bworICAgICAgYmUgc3VyZSwgaXQgYWxzbyB3b3JrcyBvbiAxNi1CaXQgTWljcm9jaGFubmVsIGJ1cyBzeXN0ZW1zLgorICAgNCkgQSBsb3Qgb2Ygc21hbGwgdGhpbmdzIGhhdmUgYmVlbiBmb3VuZCwgYnV0IG5vdGhpbmcgdGhhdCBlbmRhbmdlcmVkIHRoZQorICAgICAgZHJpdmVyIG9wZXJhdGlvbnMuIEp1c3QgaXQgc2hvdWxkIGJlIG1vcmUgc3RhYmxlLCBub3cuCisgICAtIE1pY2hhZWwgTGFuZworICAgICAgCisgICBGZWIgMjAsIDE5OTkgKHYzLjFlKQorICAgMSkgSSB0b29rIHRoZSB3YXJuaW5nIGZyb20gdGhlIExpbnV4IEtlcm5lbCBIYWNrZXJzIEd1aWRlIHNlcmlvdXMgYW5kIAorICAgICAgY2hlY2tlZCB0aGUgY21kLT5yZXN1bHQgcmV0dXJuIHZhbHVlIHRvIHRoZSBkb25lLWZ1bmN0aW9uIHZlcnkgY2FyZWZ1bGx5LgorICAgICAgSXQgaXMgb2J2aW91cywgdGhhdCB0aGUgSUJNIFNDU0kgb25seSBkZWxpdmVycyB0aGUgdHNiLmRldl9zdGF0dXMsIGlmCisgICAgICBzb21lIGVycm9yIGFwcGVhcmVkLCBlbHNlIGl0IGlzIHVuZGVmaW5lZC4gTm93LCB0aGlzIGlzIGZpeGVkLiBCZWZvcmUKKyAgICAgIGFueSBTQ0IgY29tbWFuZCBnZXRzIHF1ZXVlZCwgdGhlIHRzYi5kZXZfc3RhdHVzIGlzIHNldCB0byAwLCBzbyB0aGUgCisgICAgICBjbWQtPnJlc3VsdCB3b24ndCBzY3JldyB1cCBMaW51eCBoaWdoZXIgbGV2ZWwgZHJpdmVycy4KKyAgIDIpIFRoZSByZXNldC1mdW5jdGlvbiBoYXMgc2xpZ2h0bHkgaW1wcm92ZWQuIFRoaXMgaXMgc3RpbGwgcGxhbmVkIGZvciAKKyAgICAgIGFib3J0LiBEdXJpbmcgdGhlIGFib3J0IGFuZCB0aGUgcmVzZXQgZnVuY3Rpb24sIG5vIGludGVycnVwdHMgYXJlIAorICAgICAgYWxsb3dlZC4gVGhpcyBpcyBob3dldmVyIHF1aXRlIGhhcmQgdG8gY29wZSB3aXRoLCBzbyB0aGUgSU5ULXN0YXR1cworICAgICAgcmVnaXN0ZXIgaXMgcmVhZC4gV2hlbiB0aGUgaW50ZXJydXB0IGdldHMgcXVldWVkLCBvbmUgY2FuIGZpbmQgaXRzCisgICAgICBzdGF0dXMgaW1tZWRpYXRlbHkgb24gdGhhdCByZWdpc3RlciBhbmQgaXMgZW5hYmxlZCB0byBjb250aW51ZSBpbiB0aGUKKyAgICAgIHJlc2V0IGZ1bmN0aW9uLiBJIGhhZCBubyBjaGFuY2UgdG8gdGVzdCB0aGlzIHJlYWxseSwgb25seSBpbiBhIGJvZ3VzIAorICAgICAgc2l0dWF0aW9uLCBJIGdvdCB0aGlzIGZ1bmN0aW9uIHJ1bm5pbmcsIGJ1dCB0aGUgc2l0dWF0aW9uIHdhcyB0b28gbXVjaAorICAgICAgd29yc2UgZm9yIExpbnV4IDotKCwgc28gdGVzdHMgd2lsbCBjb250aW51ZS4KKyAgIDMpIEJ1ZmZlcnMgZ290IG5vdyBjb25zaXN0ZW50LiBObyBvcGVuIGFkZHJlc3MgbWFwcGluZywgYXMgYmVmb3JlIGFuZAorICAgICAgdGhlcmVmb3JlIG5vIGZ1cnRoZXIgdHJvdWJsZXMgd2l0aCB0aGUgdW5hc3NpZ25lZCBtZW1vcnkgc2VnbWVudGF0aW9uCisgICAgICBmYXVsdHMgdGhhdCBzY3JhbWJsZWQgcHJvYmVzIG9uIDk1WFggc2VyaWVzIGFuZCBldmVuIG9uIDg1WFggc2VyaWVzLAorICAgICAgd2hlbiB0aGUga2VybmVsIGlzIGRvbmUgaW4gYSBub3Qgc28gcGVyZmVjdGx5IGZpdHRpbmcgd2F5LgorICAgNCkgU3BvbnRhbmVvdXMgaW50ZXJydXB0cyBmcm9tIHRoZSBzdWJzeXN0ZW0sIGFwcGVhcmluZyB3aXRob3V0IGFueQorICAgICAgY29tbWFuZCBwcmV2aW91c2x5IHF1ZXVlZCBhcmUgYW5zd2VyZWQgd2l0aCBhIERJRF9CQURfSU5UUiByZXN1bHQuCisgICA1KSBUYWtlbiBpbnRvIGFjY291bnQgWlAgR3VzJyBwcm9wb3NhbHMgdG8gcmV2ZXJzZSB0aGUgU0NTSS1kZXZpY2UKKyAgICAgIHNjYW4gb3JkZXIuIEFzIGl0IGRvZXMgbm90IHdvcmsgb24gS2VybmVsIDIuMS54IG9yIDIuMi54LCBhcyBwcm9wb3NlZAorICAgICAgYnkgaGltLCBJIGltcGxlbWVudGVkIGl0IGluIGEgc2xpZ2h0bHkgZGVyaXZlZCB3YXksIHdoaWNoIG9mZmVycyBpbiAKKyAgICAgIGFkZGl0aW9uIG1vcmUgZmxleGliaWxpdHkuCisgICAtIE1pY2hhZWwgTGFuZworCisgICBBcHIgMjMsIDIwMDAgKHYzLjJwcmUxKQorICAgMSkgRHVyaW5nIGEgdmVyeSBsb25nIHRpbWUsIEkgY29sbGVjdGVkIGEgaHVnZSBhbW91bnQgb2YgYnVncmVwb3J0cyBmcm9tCisgICAgICB2YXJpb3VzIHBlb3BsZSwgdHJ5aW5nIHJlYWxseSBxdWl0ZSBkaWZmZXJlbnQgdGhpbmdzIG9uIHRoZWlyIFNDU0ktCisgICAgICBQUy8ycy4gVG9kYXksIGFsbCB0aGVzZSBidWdyZXBvcnRzIGFyZSB0YWtlbiBpbnRvIGFjY291bnQgYW5kIHNob3VsZCBiZQorICAgICAgbW9zdGx5IHNvbHZlZC4gVGhlIG1ham9yIHRvcGljcyB3ZXJlOgorICAgICAgLSBEcml2ZXIgY3Jhc2hlcyBkdXJpbmcgYm9vdHRpbWUgYnkgbm8gb2J2aW91cyByZWFzb24uCisgICAgICAtIERyaXZlciBwYW5pY3Mgd2hpbGUgdGhlIG1pZGxldmVsLVNDU0ktZHJpdmVyIGlzIHRyeWluZyB0byBpbnF1aXJlCisgICAgICAgIHRoZSBTQ1NJLWRldmljZSBwcm9wZXJ0aWVzLCBldmVuIHRob3VnaCBoYXJkd2FyZSBpcyBpbiBwZXJmZWN0IHN0YXRlLgorICAgICAgLSBEaXNwbGF5ZWQgaW5mbyBmb3IgdGhlIHZhcmlvdXMgc2xvdC1jYXJkcyBpcyBpbnRlcnByZXRlZCB3cm9uZy4KKyAgICAgIFRoZSBtYWluIHJlYXNvbnMgZm9yIHRoZSBjcmFzaGVzIHdlcmUgdHdvOgorICAgICAgMSkgVGhlIGNvbW1hbmRzIHRvIGNoZWNrIGZvciBkZXZpY2UgaW5mb3JtYXRpb24gbGlrZSBJTlFVSVJZLCAKKyAgICAgICAgIFRFU1RfVU5JVF9SRUFEWSwgUkVRVUVTVF9TRU5TRSBhbmQgTU9ERV9TRU5TRSBjYXVzZSB0aGUgZGV2aWNlcworCSB0byBkZWxpdmVyIGluZm9ybWF0aW9uIG9mIHVwIHRvIDI1NSBieXRlcy4gTWlkbGV2ZWwgZHJpdmVycyBvZmZlcgorCSAxMDI0IGJ5dGVzIG9mIHNwYWNlIGZvciB0aGUgYW5zd2VyLCBidXQgdGhlIElCTS1TQ1NJLWFkYXB0ZXJzIGRvCisJIG5vdCBhY2NlcHQgdGhpcywgYXMgdGhleSBzdGljayBxdWl0ZSBuZWFyIHRvIEFOU0ktU0NTSSBhbmQgcmVwb3J0CisJIGEgQ09NTUFORF9FUlJPUiBtZXNzYWdlIHdoaWNoIGNhdXNlcyB0aGUgZHJpdmVyIHRvIHBhbmljLiBUaGUgbWFpbgorCSBwcm9ibGVtIHdhcyBsb2NhdGVkIGFyb3VuZCB0aGUgSU5RVUlSWSBjb21tYW5kLiBOb3csIGZvciBhbGwgdGhlCisJIG1lbnRpb25lZCBjb21tYW5kcywgdGhlIGJ1ZmZlcnNpemUsIHNlbnQgdG8gdGhlIGFkYXB0ZXIgaXMgYXQgCisJIG1heGltdW0gMjU1IHdoaWNoIHNlZW1zIHRvIGJlIGEgcXVpdGUgcmVhc29uYWJsZSBzb2x1dGlvbi4gCisJIFRFU1RfVU5JVF9SRUFEWSBnZXRzIGEgYnVmZmVyc2l6ZSBvZiAwIHRvIG1ha2Ugc3VyZSwgdGhhdCBubyAKKwkgZGF0YSBpcyB0cmFuc2ZlcnJlZCBpbiBvcmRlciB0byBhdm9pZCBhbnkgcG9zc2libGUgY29tbWFuZCBmYWlsdXJlLgorICAgICAgMikgT24gdW5zdWNjZXNzZnVsIFRFU1RfVU5JVF9SRUFEWSwgdGhlIG1pZGxldmVsLWRyaXZlciBoYXMgdG8gc2VuZAorICAgICAgICAgYSBSRVFVRVNUX1NFTlNFIGluIG9yZGVyIHRvIHNlZSwgd2hlcmUgdGhlIHByb2JsZW0gaXMgbG9jYXRlZC4gVGhpcworCSBSRVFVRVNUX1NFTlNFIG1heSBoYXZlIHZhcmlvdXMgbGVuZ3RoIGluIGl0cyBhbnN3ZXItYnVmZmVyLiBJQk0KKwkgU0NTSS1zdWJzeXN0ZW1zIHJlcG9ydCBhIGNvbW1hbmQgZmFpbHVyZSwgaWYgdGhlIHJldHVybmVkIGJ1ZmZlcnNpemUKKwkgaXMgZGlmZmVyZW50IGZyb20gdGhlIHNlbnQgYnVmZmVyc2l6ZSwgYnV0IHRoaXMgY2FuIGJlIHN1cHJlc3NlZCBieQorCSBhIHNwZWNpYWwgYml0LCB3aGljaCBpcyBub3cgZG9uZSBhbmQgcHJvYmxlbXMgc2VlbSB0byBiZSBzb2x2ZWQuCisgICAyKSBDb2RlIGFkYXB0aW9uIHRvIGFsbCBrZXJuZWwtcmVsZWFzZXMuIE5vdywgdGhlIDMuMiBjb2RlIGNvbXBpbGVzIG9uIAorICAgICAgMi4wLngsIDIuMS54LCAyLjIueCBhbmQgMi4zLngga2VybmVsIHJlbGVhc2VzIHdpdGhvdXQgYW55IGNvZGUtY2hhbmdlcy4KKyAgIDMpIENvbW1hbmRsaW5lLXBhcmFtZXRlcnMgYXJlIHJlY29nbml6ZWQgYWdhaW4sIGV2ZW4gdW5kZXIgS2VybmVsIDIuMy54IG9yCisgICAgICBoaWdoZXIuCisgICAtIE1pY2hhZWwgTGFuZyAgIAorCisgICBBcHJpbCAyNywgMjAwMCAodjMuMnByZTIpCisgICAxKSBCeXBhc3NlZCBjb21tYW5kcyBnZXQgcmVhZCBieSB0aGUgYWRhcHRlciBieSBvbmUgY3ljbGUgaW5zdGVhZCBvZiB0d28uCisgICAgICBUaGlzIGluY3JlYXNlcyBTQ1NJLXBlcmZvcm1hbmNlLgorICAgMikgU3luY2hyb25vdXMgZGF0YXRyYW5zZmVyIGlzIHByb3ZpZGVkIGZvciBzdXJlIHRvIGJlIDUgTUh6IG9uIG9sZGVyCisgICAgICBTQ1NJIGFuZCAxMCBNSHogb24gaW50ZXJuYWwgRi9XIFNDU0ktYWRhcHRlci4KKyAgIDMpIE5ldyBjb21tYW5kbGluZSBwYXJhbWV0ZXJzIGFsbG93IHRvIGZvcmNlIHRoZSBhZGFwdGVyIHRvIHNsb3cgZG93biB3aGlsZQorICAgICAgaW4gc3luY2hyb25vdXMgdHJhbnNmZXIuIENvdWxkIGJlIGhlbHBmdWwgZm9yIHZlcnkgb2xkIGRldmljZXMuCisgICAtIE1pY2hhZWwgTGFuZworICAgCisgICBKdW5lIDIsIDIwMDAgKHYzLjJwcmU1KQorICAgMSkgQWRkZWQgSmltIFNob3JuZXkncyBjb250cmlidXRpb24gdG8gbWFrZSB0aGUgYWN0aXZpdHkgaW5kaWNhdG9yCisgICAgICBmbGFzaGluZyBpbiBhZGRpdGlvbiB0byB0aGUgTEVELWFscGhhbnVtZXJpYyBkaXNwbGF5LXBhbmVsIG9uCisgICAgICBtb2RlbHMgOTVBLiBUbyBiZSBlbmFibGVkIHRvIGNob29zZSB0aGlzIGZlYXR1cmUgZnJlZWx5LCBhIG5ldworICAgICAgY29tbWFuZGxpbmUgcGFyYW1ldGVyIGlzIGFkZGVkLCBjYWxsZWQgJ2FjdGl2aXR5Jy4KKyAgIDIpIEFkZGVkIHRoZSBSRUFEX0NPTlRST0wgYml0IGZvciB0ZXN0X3VuaXRfcmVhZHkgU0NTSS1jb21tYW5kLgorICAgMykgQWRkZWQgc29tZSBzdXBwcmVzc19leGNlcHRpb24gYml0cyB0byByZWFkX2RldmljZV9jYXBhY2l0eSBhbmQKKyAgICAgIGFsbCBkZXZpY2VfaW5xdWlyeSBvY2N1cnJlbmNlcyBpbiB0aGUgZHJpdmVyIGNvZGUuCisgICA0KSBDb21wbGFpbnRzIGFib3V0IHRoZSB2YXJpb3VzIEtFUk5FTF9WRVJTSU9OIGltcGxlbWVudGF0aW9ucyBhcmUKKyAgICAgIHRha2VuIGludG8gYWNjb3VudC4gRXZlcnkgbG9jYWxfTGludXhLZXJuZWxWZXJzaW9uIG9jY3VycmVuY2UgaXMKKyAgICAgIG5vdyByZXBsYWNlZCBieSBLRVJORUxfVkVSU0lPTiwgZGVmaW5lZCBpbiBsaW51eC92ZXJzaW9uLmguIAorICAgICAgQ29ycmVzcG9uZGluZyBjaGFuZ2VzIHdlcmUgYXBwbGllZCB0byBpYm1tY2EuaCwgdG9vLiBUaGlzIHdhcyBhCisgICAgICBjb250cmlidXRpb24gdG8gYWxsIGtlcm5lbC1wYXJ0cyBieSBQaGlsaXBwIEhhaG4uCisgICAtIE1pY2hhZWwgTGFuZworICAgCisgICBKdWx5IDE3LCAyMDAwICh2My4ycHJlOCkKKyAgIEEgbG9uZyBwZXJpb2Qgb2YgY29sbGVjdGluZyBidWdyZXBvcnRzIGZyb20gYWxsIGNvcm5lcnMgb2YgdGhlIHdvcmxkCisgICBub3cgbGVhZCB0byB0aGUgZm9sbG93aW5nIGNvcnJlY3Rpb25zIHRvIHRoZSBjb2RlOgorICAgMSkgU0NTSS0yIEYvVyBzdXBwb3J0IGNyYXNoZWQgd2l0aCBhIENPTU1BTkQgRVJST1IuIFRoZSByZWFzb24gZm9yIHRoaXMgCisgICAgICB3YXMsIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gZGlzYmFsZSBGYXN0LVNDU0kgZm9yIHRoZSBleHRlcm5hbCBidXMuCisgICAgICBUaGUgZmVhdHVyZS1jb250cm9sIGNvbW1hbmQsIHdoZXJlIHRoaXMgY3Jhc2ggYXBwZWFyZWQgcmVndWxhcmx5IHRyaWVkCisgICAgICB0byBzZXQgdGhlIG1heGltdW0gc3BlZWQgb2YgMTBNSHogc3luY2hyb25vdXMgdHJhbnNmZXIgc3BlZWQgYW5kIHRoYXQKKyAgICAgIHJlcG9ydHMgYSBDT01NQU5EIEVSUk9SLCBpZiBleHRlcm5hbCBidXMgRmFzdC1TQ1NJIGlzIGRpc2FibGVkLiBOb3csCisgICAgICB0aGUgZmVhdHVyZS1jb21tYW5kIHByb2JlcyBkb3duIGZyb20gbWF4aW11bSBzcGVlZCB1bnRpbCB0aGUgYWRhcHRlciAKKyAgICAgIHN0b3BzIHRvIGNvbXBsYWluLCB3aGljaCBpcyBhdCB0aGUgc2FtZSB0aW1lIHRoZSBtYXhpbXVtIHBvc3NpYmxlCisgICAgICBzcGVlZCBzZWxlY3RlZCBpbiB0aGUgcmVmZXJlbmNlIHByb2dyYW0uIFNvLCBGL1cgZXh0ZXJuYWwgY2FuIHJ1biBhdAorICAgICAgNSBNSHogKHNsb3ctKSBvciAxMCBNSHogKGZhc3QtU0NTSSkuIER1cmluZyBmZWF0dXJlIHByb2JpbmcsIHRoZSAKKyAgICAgIENPTU1BTkQgRVJST1IgbWVzc2FnZSBpcyB1c2VkIHRvIGRldGVjdCBpZiB0aGUgYWRhcHRlciBkb2VzIG5vdCBjb21wbGFpbi4KKyAgIDIpIFVwIHRvIG5vdywgb25seSBjb21iaW5lZCBidXNtb2RlIGlzIHN1cHBvcnRlZCwgaWYgeW91IHVzZSBleHRlcm5hbAorICAgICAgU0NTSS1kZXZpY2VzLCBhdHRhY2hlZCB0byB0aGUgRi9XLWNvbnRyb2xsZXIuIElmIGR1YWwgYnVzIGlzIHNlbGVjdGVkLAorICAgICAgb25seSB0aGUgaW50ZXJuYWwgU0NTSS1kZXZpY2VzIGdldCBhY2Nlc3NlZCBieSBMaW51eC4gRm9yIG1vc3QgCisgICAgICBhcHBsaWNhdGlvbnMsIHRoaXMgc2hvdWxkIGRvIGZpbmUuIAorICAgMykgV2lkZS1TQ1NJLWFkZHJlc3NpbmcgKDE2LUJpdCkgaXMgbm93IHBvc3NpYmxlIGZvciB0aGUgaW50ZXJuYWwgRi9XCisgICAgICBidXMgb24gdGhlIEYvVyBhZGFwdGVyLiBJZiBGL1cgYWRhcHRlciBpcyBkZXRlY3RlZCwgdGhlIGRyaXZlcgorICAgICAgYXV0b21hdGljYWxseSB1c2VzIHRoZSBleHRlbmRlZCBQVU4vTFVOIDwtPiBMRE4gbWFwcGluZyB0YWJsZXMsIHdoaWNoCisgICAgICBhcmUgbm93IG5ldyBmcm9tIDMuMnByZTguIFRoaXMgYWxsb3dzIFBVTnMgYmV0d2VlbiAwIGFuZCAxNSBhbmQgc2hvdWxkCisgICAgICBwcm92aWRlIG1vcmUgZnVuIHdpdGggdGhlIEYvVyBhZGFwdGVyLgorICAgNCkgU2V2ZXJhbCBtYWNoaW5lcyB1c2UgdGhlIFNDU0k6IFBPUyByZWdpc3RlcnMgZm9yIGludGVybmFsL3VuZG9jdW1lbnRlZAorICAgICAgc3RvcmFnZSBvZiBzeXN0ZW0gcmVsZXZhbnQgaW5mby4gVGhpcyBjb25mdXNlZCB0aGUgZHJpdmVyLCBtYWlubHkgb24KKyAgICAgIG1vZGVscyA5NTk1LCBhcyBpdCBleHBlY3RlZCBubyBvbmJvYXJkIFNDU0kgb25seSwgaWYgYWxsIFBPUyBpbgorICAgICAgdGhlIGludGVncmF0ZWQgU0NTSS1hcmVhIGFyZSBzZXQgdG8gMHgwMCBvciAweGZmLiBOb3csIHRoZSBtZWNoYW5pc20KKyAgICAgIHRvIGNoZWNrIGZvciBpbnRlZ3JhdGVkIFNDU0kgaXMgbXVjaCBtb3JlIHJlc3RyaWN0aXZlIGFuZCB0aGVzZSBwcm9ibGVtcworICAgICAgc2hvdWxkIGJlIGhpc3RvcnkuCisgICAtIE1pY2hhZWwgTGFuZyAgICAgICAgICAKKworICAgSnVseSAxOCwgMjAwMCAodjMuMnByZTkpCisgICBUaGlzIGRldmVsb3AgcmF0aGVyIHF1aWNrbHkgYXQgdGhlIG1vbWVudC4gVHdvIG1ham9yIHRoaW5ncyB3ZXJlIHN0aWxsCisgICBtaXNzaW5nIGluIDMuMnByZTg6CisgICAxKSBUaGUgYWRhcHRlciBQVU4gZm9yIEYvVyBhZGFwdGVycyBoYXMgNC1iaXRzLCB3aGlsZSBhbGwgb3RoZXIgYWRhcHRlcnMKKyAgICAgIGhhdmUgMy1iaXRzLiBUaGlzIGlzIG5vdyB0YWtlbiBpbnRvIGFjY291bnQgZm9yIEYvVy4KKyAgIDIpIFdoZW4geW91IHNlbGVjdCBDT05GSUdfSUJNTUNBX1NDU0lfT1JERVJfU1RBTkRBUkQsIHlvdSBzaG91bGQgCisgICAgICBub3JtYWxseSBnZXQgdGhlIGludmVyc2UgcHJvYmluZyBvcmRlciBvZiB5b3VyIGRldmljZXMgb24gdGhlIFNDU0ktYnVzLgorICAgICAgVGhlIEFOU0kgZGV2aWNlIG9yZGVyIGdldHMgc2NyYW1ibGVkIGluIHZlcnNpb24gMy4ycHJlOCEhIE5vdywgYSBuZXcKKyAgICAgIGFuZCB0ZXN0ZWQgYWxnb3JpdGhtIGludmVydHMgdGhlIGRldmljZS1vcmRlciBvbiB0aGUgU0NTSS1idXMgYW5kCisgICAgICBhdXRvbWF0aWNhbGx5IGF2b2lkcyBhY2NpZGVudGFsIGFjY2VzcyB0byB3aGF0ZXZlciBTQ1NJIFBVTiB0aGUgYWRhcHRlciAKKyAgICAgIGlzIHNldCBhbmQgd29ya3Mgd2l0aCBTQ1NJLSBhbmQgV2lkZS1TQ1NJLWFkZHJlc3NpbmcuCisgICAtIE1pY2hhZWwgTGFuZworCisgICBKdWx5IDIzLCAyMDAwICh2My4ycHJlMTAgdW5wdWJsaXNoZWQpIAorICAgMSkgTEVEIHBhbmVsIGRpc3BsYXkgc3VwcG9ydHMgd2lkZS1hZGRyZXNzaW5nIGluIGlibW1jYT1kaXNwbGF5IG1vZGUuCisgICAyKSBBZGFwdGVyLWluZm9ybWF0aW9uIGFuZCBhdXRvYWRhcHRpb24gdG8gYWRkcmVzcy1zcGFjZSBpcyBkb25lLgorICAgMykgQXV0by1wcm9iaW5nIGZvciBtYXhpbXVtIHN5bmNocm9ub3VzIFNDU0kgdHJhbnNmZXIgcmF0ZSBpcyB3b3JraW5nLgorICAgNCkgT3B0aW1pemF0aW9uIHRvIHNvbWUgZW1iZWRkZWQgZnVuY3Rpb24gY2FsbHMgaXMgYXBwbGllZC4KKyAgIDUpIEFkZGVkIHNvbWUgY29tbWVudCBmb3IgdGhlIHVzZXIgdG8gd2FpdCBmb3IgU0NTSS1kZXZpY2VzIGJlaW5nIHByb2JlZC4KKyAgIDYpIEZpbmlzaGVkIHZlcnNpb24gMy4yIGZvciBLZXJuZWwgMi40LjAuIEl0IGxlYXN0LCBJIHRob3VnaHQgaXQgaXMgYnV0Li4uCisgICAtIE1pY2hhZWwgTGFuZworICAgCisgICBKdWx5IDI2LCAyMDAwICh2My4ycHJlMTEpCisgICAxKSBJIHBhc3NlZCBhIGhvcnJpYmxlIHdlZWtlbmQgZ2V0dGluZyBtYWQgd2l0aCBOTUlzIG9uIGtlcm5lbCAyLjIuMTQgYW5kCisgICAgICBhIG1vZGVsIDk1OTUuIEFza2luZyBhcm91bmQgaW4gdGhlIGNvbW11bml0eSwgbm9ib2R5IGV4Y2VwdCBvZiBtZSBoYXMKKyAgICAgIHNlZW4gc3VjaCBlcnJvcnMuIFdlaXJlZCwgYnV0IEkgYW0gdHJ5aW5nIHRvIHJlY29tcGlsZSBldmVyeXRoaW5nIG9uCisgICAgICB0aGUgbW9kZWwgOTU5NS4gTWF5YmUsIGFzIEkgdXNlIGEgc3BlY2lhbGx5IG1vZGlmaWVkIGdjYywgdGhhdCBjb3VsZAorICAgICAgY2F1c2UgcHJvYmxlbXMuIEJ1dCwgaXQgd2FzIG5vdCB0aGUgcmVhc29uLiBUaGUgdHJ1ZSBiYWNrZ3JvdW5kIHdhcywKKyAgICAgIHRoYXQgdGhlIGtlcm5lbCB3YXMgY29tcGlsZWQgZm9yIGkzODYgYW5kIHRoZSA5NTk1IGhhcyBhIDQ4NkRYLTIuIAorICAgICAgTm9ybWFsbHksIG5vIHRyb3VibGVzIHNob3VsZCBhcHBlYXIsIGJ1dCBmb3IgdGhpcyBzcGVjaWFsIG1hY2hpbmUsCisgICAgICBvbmx5IHRoZSByaWdodCBwcm9jZXNzb3Igc3VwcG9ydCBpcyB3b3JraW5nIGZpbmUhCisgICAyKSBQcmV2aW91cyBwcm9ibGVtcyB3aXRoIHN5bmNocm9ub3VzIHNwZWVkLCBzbG93aW5nIGRvd24gZnJvbSBvbmUgYWRhcHRlciAKKyAgICAgIHRvIHRoZSBuZXh0IGR1cmluZyBwcm9iaW5nIGFyZSBjb3JyZWN0ZWQuIE5vdywgbG9jYWwgdmFyaWFibGVzIHN0b3JlCisgICAgICB0aGUgc3luY2hyb25vdXMgYml0bWFzayBmb3IgZXZlcnkgc2luZ2xlIGFkYXB0ZXIgZm91bmQgb24gdGhlIE1DQSBidXMuCisgICAzKSBMRUQgYWxwaGFudW1lcmljIHBhbmVsIHN1cHBvcnQgZm9yIFhYOTUgc3lzdGVtcyBpcyBub3cgc2hvd2luZyBzb21lCisgICAgICBhbGl2ZSByb3RhdG9yIGR1cmluZyBib290dGltZS4gVGhpcyBtYWtlcyBzZW5zZSwgd2hlbiBubyBtb25pdG9yIGlzIAorICAgICAgY29ubmVjdGVkIHRvIHRoZSBzeXN0ZW0uIFlvdSBjYW4gZ2V0IHJpZCBvZiBhbGwgZGlzcGxheSBhY3Rpdml0eSwgaWYKKyAgICAgIHlvdSBkbyBub3QgdXNlIGFueSBwYXJhbWV0ZXIgb3IganVzdCBpYm1tY2FzY3NpPWFjdGl2aXR5LCBmb3IgdGhlIAorICAgICAgaGFyZGRyaXZlIGFjdGl2aXR5IExFRCwgZXhpc3RhbnQgb24gYWxsIFBTLzIsIGV4Y2VwdCBtb2RlbHMgODU5NS1YWFguCisgICAgICBJZiBubyBtb25pdG9yIGlzIGF2YWlsYWJsZSwgcGxlYXNlIHVzZSBpYm1tY2FzY3NpPWRpc3BsYXksIHdoaWNoIHdvcmtzCisgICAgICBmaW5lIHRvZ2V0aGVyIHdpdGggdGhlIGxpbnV4aW5mbyB1dGlsaXR5IGZvciB0aGUgTEVELXBhbmVsLgorICAgLSBNaWNoYWVsIExhbmcKKyAgIAorICAgSnVseSAyOSwgMjAwMCAodjMuMikKKyAgIDEpIFN1Ym1pc3Npb24gb2YgdGhpcyBkcml2ZXIgZm9yIGtlcm5lbCAyLjR0ZXN0LVhYIGFuZCAyLjIuMTcuCisgICAtIE1pY2hhZWwgTGFuZworICAgCisgICBEZWNlbWJlciAyOCwgMjAwMCAodjMuMmQgLyB2NC4wKQorICAgMSkgVGhlIGludGVycnVwdCBoYW5kbGVyIGhhZCBzb21lIHdyb25nIHN0YXRlbWVudCB0byB3YWl0IGZvci4gVGhpcworICAgICAgd2FzIGRvbmUgZHVlIHRvIGV4cGVyaW1lbnRhbCByZWFzb25zIGR1cmluZyAzLjIgZGV2ZWxvcG1lbnQgYnV0IGl0CisgICAgICBoYXMgc2hvd24gdGhhdCB0aGlzIGlzIG5vdCBzdGFibGUgZW5vdWdoLiBHb2luZyBiYWNrIHRvIHdhaXQgZm9yIHRoZQorICAgICAgYWRhcHRlciB0byBiZSBub3QgYnVzeSBpcyBiZXN0LgorICAgMikgSW5xdWlyeSByZXF1ZXN0cyBjYW4gYmUgc2hvcnRlciB0aGFuIDI1NSBieXRlcyBvZiByZXR1cm4gYnVmZmVyLiBEdWUKKyAgICAgIHRvIGEgYnVnIGluIHRoZSBpYm1tY2FfcXVldWVjb21tYW5kIHJvdXRpbmUsIHRoaXMgYnVmZmVyIHdhcyBmb3JjZWQKKyAgICAgIHRvIDI1NSBhdCBtaW5pbXVtLiBJZiB0aGUgbWVtb3J5IGFkZHJlc3MsIHRoaXMgcmV0dXJuIGJ1ZmZlciBpcyBwb2ludGluZworICAgICAgdG8gZG9lcyBub3Qgb2ZmZXIgbW9yZSBzcGFjZSwgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgZGVzdGFiaWxpemVkIHRoZQorICAgICAga2VybmVsLgorICAgMykgdmVyc2lvbiA0LjAgaXMgb25seSB2YWxpZCBmb3Iga2VybmVsIDIuNC4wIG9yIGxhdGVyLiBUaGlzIGlzIG5lY2Vzc2FyeQorICAgICAgdG8gcmVtb3ZlIG9sZCBrZXJuZWwgdmVyc2lvbiBkZXBlbmRlbnQgd2FzdGUgZnJvbSB0aGUgZHJpdmVyLiAzLjJkIGlzCisgICAgICBvbmx5IGRpc3RyaWJ1dGVkIHdpdGggb2xkZXIga2VybmVscyBidXQga2VlcHMgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyCisgICAgICBrZXJuZWwgdmVyc2lvbnMuIDQuMCBhbmQgaGlnaGVyIHZlcnNpb25zIGNhbm5vdCBiZSB1c2VkIHdpdGggb2xkZXIgCisgICAgICBrZXJuZWxzIGFueW1vcmUhISBZb3UgbXVzdCBoYXZlIGF0IGxlYXN0IGtlcm5lbCAyLjQuMCEhCisgICA0KSBUaGUgY29tbWFuZGxpbmUgYXJndW1lbnQgJ2J5cGFzcycgYW5kIGFsbCBpdHMgZnVuY3Rpb25hbGl0eSBnb3QgcmVtb3ZlZAorICAgICAgaW4gdmVyc2lvbiA0LjAuIFRoaXMgd2FzIG5ldmVyIHJlYWxseSBuZWNlc3NhcnksIGFzIGFsbCB0cm91YmxlcyB3ZXJlCisgICAgICBiYXNlZCBvbiBub24tY29tbWFuZCByZWxhdGVkIHJlYXNvbnMgdXAgdG8gbm93LCBzbyBieXBhc3NpbmcgY29tbWFuZHMKKyAgICAgIGRpZCBub3QgaGVscCB0byBhdm9pZCBhbnkgYnVncy4gSXQgaXMga2VwdCBpbiAzLjJYIGZvciBkZWJ1Z2dpbmcgcmVhc29ucy4KKyAgIDUpIER5bmFtaWNhbCByZWFzc2lnbm1lbnQgb2YgbGRucyB3YXMgYWdhaW4gdmVyaWZpZWQgYW5kIGFuYWx5emVkIHRvIGJlCisgICAgICBjb21wbGV0ZWx5IGlub3BlcmF0aW9uYWwuIFRoaXMgaXMgY29ycmVjdGVkIGFuZCBzaG91bGQgd29yayBub3cuCisgICA2KSBBbGwgY29tbWFuZHMgdGhhdCBnZXQgc2VudCB0byB0aGUgU0NTSSBhZGFwdGVyIHdlcmUgdmVyaWZpZWQgYW5kCisgICAgICBjb21wbGV0ZWQgaW4gc3VjaCBhIHdheSwgdGhhdCB0aGV5IGFyZSBub3cgY29tcGxldGVseSBjb25mb3JtIHRvIHRoZQorICAgICAgZGVtYW5kcyBpbiB0aGUgdGVjaG5pY2FsIGRlc2NyaXB0aW9uIG9mIElCTS4gTWFpbiBjYW5kaWRhdGVzIHdlcmUgdGhlCisgICAgICBERVZJQ0VfSU5RVUlSWSwgUkVRVUVTVF9TRU5TRSBhbmQgREVWSUNFX0NBUEFDSVRZIGNvbW1hbmRzLiBUaGV5IG11c3QKKyAgICAgIGJlIHRyYW5mZXJyZWQgYnkgYnlwYXNzaW5nIHRoZSBpbnRlcm5hbCBjb21tYW5kIGJ1ZmZlciBvZiB0aGUgYWRhcHRlcgorICAgICAgb3IgZWxzZSB0aGUgcmVzcG9uc2UgY2FuIGJlIGEgcmFuZG9tIHJlc3VsdC4gR0VUX1BPU19JTkZPIHdvdWxkIGJlIG1vcmUKKyAgICAgIHNhZmUgaW4gdXNhZ2UsIGlmIG9uZSBjb3VsZCB1c2UgdGhlIFNVUFJFU1NfRVhDRVBUSU9OX1NIT1JULCBidXQgdGhpcworICAgICAgaXMgbm90IGFsbG93ZWQgYnkgdGhlIHRlY2huaWNhbCByZWZlcmVuY2VzIG9mIElCTS4gKFNvcnJ5LCBmb2xrcywgdGhlCisgICAgICBtb2RlbCA4MCBwcm9ibGVtIGlzIHN0aWxsIGEgdGFzayB0byBiZSBzb2x2ZWQgaW4gYSBkaWZmZXJlbnQgd2F5LikKKyAgIDcpIHYzLjJkIGlzIHN0aWxsIGhvbGQgYmFjayBmb3Igc29tZSBkYXlzIGZvciB0ZXN0aW5nLCB3aGlsZSA0LjAgaXMgCisgICAgICByZWxlYXNlZC4KKyAgIC0gTWljaGFlbCBMYW5nCisgICAKKyAgIEphbnVhcnkgMywgMjAwMSAodjQuMGEpCisgICAxKSBBIGxvdCBvZiBjb21wbGFpbnMgYWZ0ZXIgdGhlIDIuNC4wLXByZXJlbGVhc2Uga2VybmVsIGNhbWUgaW4gYWJvdXQKKyAgICAgIHRoZSBpbXBvc3NpYmlsaXR5IHRvIGNvbXBpbGUgdGhlIGRyaXZlciBhcyBhIG1vZHVsZS4gVGhpcyBwcm9ibGVtIGlzCisgICAgICBzb2x2ZWQuIEluIGNvbWJpbmF0aW9uIHdpdGggdGhhdCBwcm9ibGVtLCBzb21lIHVucHJlY2lzZSBkZWNsYXJhdGlvbgorICAgICAgb2YgdGhlIGZ1bmN0aW9uIG9wdGlvbl9zZXR1cCgpIGdhdmUgc29tZSB3YXJuaW5ncyBkdXJpbmcgY29tcGlsYXRpb24uCisgICAgICBUaGlzIGlzIHNvbHZlZCwgdG9vIGJ5IGEgZm9yd2FyZCBkZWNsYXJhdGlvbiBpbiBpYm1tY2EuYy4KKyAgIDIpICNpZmRlZiBhcmd1bWVudCBjb25jZXJuaW5nIENPTkZJR19TQ1NJX0lCTU1DQSBpcyBubyBsb25nZXIgbmVlZGVkIGFuZAorICAgICAgd2FzIGVudGlyZWx5IHJlbW92ZWQuCisgICAzKSBTb21lIHN3aXRjaCBzdGF0ZW1lbnRzIGdvdCBvcHRpbWl6ZWQgaW4gY29kZSwgYXMgc29tZSBtaW5vciB2YXJpYWJsZXMKKyAgICAgIGluIGludGVybmFsIFNDU0ktY29tbWFuZCBoYW5kbGVycy4KKyAgIC0gTWljaGFlbCBMYW5nCisKKyAgIDQgVG8gZG8KKyAgIC0tLS0tLS0KKyAgICAgICAgLSBJQk0gU0NTSS0yIEYvVyBleHRlcm5hbCBTQ1NJIGJ1cyBzdXBwb3J0IGluIHNlcGFyYXRlIG1vZGUhCisJLSBJdCBzZWVtcyB0aGF0IHRoZSBoYW5kbGluZyBvZiBiYWQgZGlza3MgaXMgcmVhbGx5IGJhZCAtCisJICBub24tZXhpc3RlbnQsIGluIGZhY3QuIEhvd2V2ZXIsIGEgbG93LWxldmVsIGRyaXZlciBjYW5ub3QgaGVscAorCSAgbXVjaCwgaWYgc3VjaCB0aGluZ3MgaGFwcGVuLgorCisgICA1IFVzZXJzJyBNYW51YWwKKyAgIC0tLS0tLS0tLS0tLS0tLQorICAgNS4xIENvbW1hbmRsaW5lIFBhcmFtZXRlcnMKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBUaGVyZSBleGlzdCBzZXZlcmFsIGZlYXR1cmVzIGZvciB0aGUgSUJNIFNDU0ktc3Vic3lzdGVtIGRyaXZlci4KKyAgIFRoZSBjb21tYW5kbGluZSBwYXJhbWV0ZXIgZm9ybWF0IGlzOgorICAgCisgICAgICAgICBpYm1tY2FzY3NpPTxjb21tYW5kMT4sPGNvbW1hbmQyPiw8Y29tbWFuZDM+LC4uLgorCSAKKyAgIHdoZXJlIGNvbW1hbmROIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAgIAorICAgICAgICAgZGlzcGxheSAgICBPd25lcnMgb2YgYSBtb2RlbCA5NSBvciBvdGhlciBQUy8yIHN5c3RlbXMgd2l0aCBhbgorCSAgICAgICAgICAgIGFscGhhbnVtZXJpYyBMRUQgZGlzcGxheSBtYXkgc2V0IHRoaXMgdG8gaGF2ZSB0aGVpcgorCQkgICAgZGlzcGxheSBzaG93aW5nIHRoZSBmb2xsb3dpbmcgb3V0cHV0IG9mIHRoZSA4IGRpZ2l0czoKKwkJICAgICAgCisJCSAgICAgICAgICAgICAgICAtLS0tLS1EQQorCQkJCQorCQkgICAgd2hlcmUgJy0nIHN0YXlzIGRhcmssICdEJyBzaG93cyB0aGUgU0NTSS1kZXZpY2UgaWQKKwkJICAgIGFuZCAnQScgc2hvd3MgdGhlIFNDU0kgaG9zdGluZGV4LCBiZWluZyBjdXJyZW50bHkgCisJCSAgICBhY2Nlc3NlZC4gRHVyaW5nIGJvb3R0aW1lLCB0aGlzIHdpbGwgZ2l2ZSB0aGUgbWVzc2FnZQorCQkgICAgCisJCSAgICAgICAgICAgICAgICBTQ1NJaW5pKgorCQkJCQorICAgICAgICAgICAgICAgICAgICBvbiB0aGUgTEVELXBhbmVsLCB3aGVyZSB0aGUgKiByZXByZXNlbnRzIGEgcm90YXRvciwgCisJCSAgICBzaG93aW5nIHRoZSBhY3Rpdml0eSBkdXJpbmcgdGhlIHByb2JpbmcgcGhhc2Ugb2YgdGhlCisJCSAgICBkcml2ZXIgd2hpY2ggY2FuIHRha2UgdXAgdG8gdHdvIG1pbnV0ZXMgcGVyIFNDU0ktYWRhcHRlci4KKwkgYWRpc3BsYXkgICBUaGlzIHdvcmtzIGxpa2UgZGlzcGxheSwgYnV0IGdpdmVzIG1vcmUgb3B0aWNhbCBvdmVydmlldyAKKwkgICAgICAgICAgICBvZiB0aGUgYWN0aXZpdGllcyBvbiB0aGUgU0NTSS1idXMuIFRoZSBkaXNwbGF5IHdpbGwgaGF2ZQorCQkgICAgdGhlIGZvbGxvd2luZyBvdXRwdXQ6CisJCSAgICAKKwkJICAgICAgICAgICAgICAgIDY1NDMyMTBBCisJCQkJCisJCSAgICB3aGVyZSB0aGUgbnVtYmVycyAwIHRvIDYgbGlnaHQgdXAgYXQgdGhlIHNob3duIHBvc2l0aW9uLAorCQkgICAgd2hlbiB0aGUgU0NTSS1kZXZpY2UgaXMgYWNjZXNzZWQuICdBJyBzaG93cyBhZ2FpbiB0aGUgU0NTSQorCQkgICAgaG9zdGluZGV4LiBJZiBkaXNwbGF5IG5vciBhZGlzcGxheSBpcyBzZXQsIHRoZSBpbnRlcm5hbAorCQkgICAgUFMvMiBoYXJkZGlzayBMRUQgaXMgdXNlZCBmb3IgbWVkaWEtYWN0aXZpdGllcy4gU28sIGlmCisJCSAgICB5b3UgcmVhbGx5IGRvIG5vdCBoYXZlIGEgc3lzdGVtIHdpdGggYSBMRUQtZGlzcGxheSwgeW91CisJCSAgICBzaG91bGQgbm90IHNldCBkaXNwbGF5IG9yIGFkaXNwbGF5LiBLZWVwIGluIG1pbmQsIHRoYXQKKwkJICAgIGRpc3BsYXkgYW5kIGFkaXNwbGF5IGNhbiBvbmx5IGJlIHVzZWQgYWx0ZXJuYXRpdmVseS4gSXQKKwkJICAgIGlzIG5vdCByZWNvbW1lbmRlZCB0byB1c2UgdGhpcyBvcHRpb24sIGlmIHlvdSBoYXZlIHNvbWUKKwkJICAgIHdpZGUtYWRkcmVzc2VkIGRldmljZXMgZS5nLiBhdCB0aGUgU0NTSS0yIEYvVyBhZGFwdGVyIGluCisJCSAgICB5b3VyIHN5c3RlbS4gSW4gYWRkaXRpb24sIHRoZSB1c2FnZSBvZiB0aGUgZGlzcGxheSBmb3IKKwkJICAgIG90aGVyIHRhc2tzIGluIHBhcmFsbGVsLCBsaWtlIHRoZSBsaW51eGluZm8tdXRpbGl0eSBtYWtlcyAKKwkJICAgIG5vIHNlbnNlIHdpdGggdGhpcyBvcHRpb24uCisJIGFjdGl2aXR5ICAgVGhpcyBlbmFibGVzIHRoZSBQUy8yIGhhcmRkaXNrIExFRCBhY3Rpdml0eSBpbmRpY2F0b3IuCisJICAgICAgICAgICAgTW9zdCBQUy8yIGhhdmUgbm8gYWxwaGFudW1lcmljIExFRCBkaXNwbGF5LCBidXQgc29tZQorCQkgICAgaW5kaWNhdG9yLiBTbyB5b3Ugc2hvdWxkIHVzZSB0aGlzIHBhcmFtZXRlciB0byBhY3RpdmF0ZSBpdC4KKwkJICAgIElmIHlvdSBvd24gbW9kZWwgOTU5NSAoU2VydmVyOTUpLCB5b3UgY2FuIGhhdmUgYm90aCwgdGhlIAorCQkgICAgTEVEIHBhbmVsIGFuZCB0aGUgYWN0aXZpdHkgaW5kaWNhdG9yIGluIHBhcmFsbGVsLiBIb3dldmVyLAorCQkgICAgc29tZSBQUy8ycywgbGlrZSB0aGUgODU5NSBkbyBub3QgaGF2ZSBhbnkgaGFyZGRpc2sgTEVEIAorCQkgICAgYWN0aXZpdHkgaW5kaWNhdG9yLCB3aGljaCBtZWFucywgdGhhdCB5b3UgbXVzdCB1c2UgdGhlCisJCSAgICBhbHBoYW51bWVyaWMgTEVEIGRpc3BsYXkgaWYgeW91IHdhbnQgdG8gbW9uaXRvciBTQ1NJLQorCQkgICAgYWN0aXZpdHkuCisJIGJ5cGFzcyAgICAgVGhpcyBpcyBvYnNvbGV0ZSBmcm9tIGRyaXZlciB2ZXJzaW9uIDQuMCwgYXMgdGhlIGFkYXB0ZXJzCisJICAgICAgICAgICAgZ290IHRoYXQgZmFyIHVuZGVyc3Rvb2QsIHRoYXQgdGhlIHNlbGVjdGlvbiBiZXR3ZWVuIAorCQkgICAgaW50ZWdyYXRlZCBhbmQgYnlwYXNzZWQgY29tbWFuZHMgc2hvdWxkIG5vdyB3b3JrIGNvbXBsZXRlbHkKKwkJICAgIGNvcnJlY3QhIEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIHRoZSBvbGQgZGVzY3JpcHRpb24gaXMKKwkJICAgIGtlcHQgaGVyZToKKwkgICAgICAgICAgICBUaGlzIGNvbW1hbmRsaW5lIHBhcmFtZXRlciBmb3JjZXMgdGhlIGRyaXZlciBuZXZlciB0byB1c2UKKwkgICAgICAgICAgICBTQ1NJLXN1YnN5c3RlbXMnIGludGVncmF0ZWQgU0NTSS1jb21tYW5kIHNldC4gRXhjZXB0IG9mCisJCSAgICB0aGUgaW1tZWRpYXRlIGFzc2lnbiwgd2hpY2ggaXMgb2Ygdml0YWwgaW1wb3J0YW5jZSBmb3IKKwkJICAgIGV2ZXJ5IElCTSBTQ1NJLXN1YnN5c3RlbSB0byBzZXQgaXRzIGxkbnMgcmlnaHQuIEluc3RlYWQsCisJCSAgICB0aGUgb3JkaW5hcnkgQU5TSS1TQ1NJLWNvbW1hbmRzIGFyZSB1c2VkIGFuZCBwYXNzZWQgYnkgdGhlCisJCSAgICBjb250cm9sbGVyIHRvIHRoZSBTQ1NJLWRldmljZXMsIHRoZXJlZm9yZSAnYnlwYXNzJy4gVGhlCisJCSAgICBlZmZvcnQsIGRvbmUgYnkgdGhlIHN1YnN5c3RlbSBpcyBxdWl0ZSBib2d1cyBhbmQgYXQgYQorCQkgICAgbWluaW11bSBhbmQgdGhlcmVmb3JlIGl0IHNob3VsZCB3b3JrIGV2ZXJ5d2hlcmUuIFRoaXMKKwkJICAgIGNvdWxkIG1heWJlIHNvbHZlIHRyb3VibGVzIHdpdGggb2xkIG9yIGludGVncmF0ZWQgU0NTSS0KKwkJICAgIGNvbnRyb2xsZXJzIGFuZCBuYXN0eSBoYXJkZGlza3MuIEtlZXAgaW4gbWluZCwgdGhhdCB1c2luZyAKKwkJICAgIHRoaXMgZmxhZyB3aWxsIHNsb3ctZG93biBTQ1NJLWFjY2Vzc2VzIHNsaWdodGx5LCBhcyB0aGUgCisJCSAgICBzb2Z0d2FyZSBnZW5lcmF0ZWQgY29tbWFuZHMgYXJlIGFsd2F5cyBzbG93ZXIgdGhhbiB0aGUgCisJCSAgICBoYXJkd2FyZS4gTm9uLWhhcmRkaXNrIGRldmljZXMgYWx3YXlzIGdldCByZWFkL3dyaXRlLQorCQkgICAgY29tbWFuZHMgaW4gYnlwYXNzIG1vZGUuIE9uIHRoZSBtb3N0IHJlY2VudCByZWxlYXNlcyBvZiAKKwkJICAgIHRoZSBMaW51eCBJQk0tU0NTSS1kcml2ZXIsIHRoZSBieXBhc3MgY29tbWFuZCBzaG91bGQgYmUKKwkJICAgIG5vIGxvbmdlciBhIG5lY2Vzc2FyeSB0aGluZywgaWYgeW91IGFyZSBzdXJlIGFib3V0IHlvdXIKKwkJICAgIFNDU0ktaGFyZHdhcmUhCisJIG5vcm1hbCAgICAgVGhpcyBpcyB0aGUgcGFyYW1ldGVyLCBpbnRyb2R1Y2VkIG9uIHRoZSAyLjAueCBkZXZlbG9wbWVudAorCSAgICAgICAgICAgIHJhaWwgYnkgWlAgR3UuIFRoaXMgcGFyYW1ldGVyIGRlZmluZXMgdGhlIFNDU0ktZGV2aWNlCisJCSAgICBzY2FuIG9yZGVyIGluIHRoZSBuZXcgaW5kdXN0cnkgc3RhbmRhcmQuIFRoaXMgbWVhbnMsIHRoYXQKKwkJICAgIHRoZSBmaXJzdCBTQ1NJLWRldmljZSBpcyB0aGUgb25lIHdpdGggdGhlIGxvd2VzdCBwdW4uCisJCSAgICBFLmcuIGhhcmRkaXNrIGF0IHB1bj0wIGlzIHNjYW5uZWQgYmVmb3JlIGhhcmRkaXNrIGF0CisJCSAgICBwdW49Niwgd2hpY2ggbWVhbnMsIHRoYXQgaGFyZGRpc2sgYXQgcHVuPTAgZ2V0cyBzZGEKKwkJICAgIGFuZCB0aGUgb25lIGF0IHB1bj02IGdldHMgc2RiLgorCSBhbnNpICAgICAgIFRoZSBBTlNJLXN0YW5kYXJkIGZvciB0aGUgcmlnaHQgc2NhbiBvcmRlciwgYXMgZG9uZSBieQorCSAgICAgICAgICAgIElCTSwgTWljcm93YXJlIGFuZCBNaWNyb3NvZnQsIHNjYW5zIFNDU0ktZGV2aWNlcyBzdGFydGluZworCQkgICAgYXQgdGhlIGhpZ2hlc3QgcHVuLCB3aGljaCBtZWFucywgdGhhdCBlLmcuIGhhcmRkaXNrIGF0CisJCSAgICBwdW49NiBnZXRzIHNkYSBhbmQgYSBoYXJkZGlzayBhdCBwdW49MCBnZXRzIHNkYi4gSWYgeW91CisJCSAgICBsaWtlIHRvIGhhdmUgdGhlIHNhbWUgU0NTSS1kZXZpY2Ugb3JkZXIsIGFzIGluIERPUywgT1MtOQorCQkgICAgb3IgT1MvMiwganVzdCB1c2UgdGhpcyBwYXJhbWV0ZXIuCisgICAgICAgICBmYXN0ICAgICAgIFNDU0ktSS9PIGluIHN5bmNocm9ub3VzIG1vZGUgaXMgZG9uZSBhdCA1IE1IeiBmb3IgSUJNLQorICAgICAgICAgICAgICAgICAgICBTQ1NJLWRldmljZXMuIFNDU0ktMiBGYXN0L1dpZGUgQWRhcHRlci9BIGV4dGVybmFsIGJ1cworICAgICAgICAgICAgICAgICAgICBzaG91bGQgdGhlbiBydW4gYXQgMTAgTUh6IGlmIEZhc3QtU0NTSSBpcyBlbmFibGVkLAorICAgICAgICAgICAgICAgICAgICBhbmQgYXQgNSBNSHogaWYgRmFzdC1TQ1NJIGlzIGRpc2FibGVkIG9uIHRoZSBleHRlcm5hbAorICAgICAgICAgICAgICAgICAgICBidXMuIFRoaXMgaXMgdGhlIGRlZmF1bHQgc2V0dGluZyB3aGVuIG5vdGhpbmcgaXMgCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBoZXJlLgorICAgICAgICAgbWVkaXVtICAgICBTeW5jaHJvbm91cyByYXRlIGlzIGF0IDUwJSBhcHByb3hpbWF0ZWx5LCB3aGljaCBtZWFucworICAgICAgICAgICAgICAgICAgICAyLjUgTUh6IGZvciBJQk0gU0NTSS1hZGFwdGVycyBhbmQgNS4wIE1IeiBmb3IgRi9XIGV4dC4KKyAgICAgICAgICAgICAgICAgICAgU0NTSS1idXMgKHdoZW4gRmFzdC1TQ1NJIHNwZWVkIGVuYWJsZWQgb24gZXh0ZXJuYWwgYnVzKS4KKyAgICAgICAgIHNsb3cgICAgICAgVGhlIHNsb3dlc3QgcG9zc2libGUgc3luY2hyb25vdXMgdHJhbnNmZXIgcmF0ZSBpcyBzZXQuIAorICAgICAgICAgICAgICAgICAgICBUaGlzIG1lYW5zIDEuODIgTUh6IGZvciBJQk0gU0NTSS1hZGFwdGVycyBhbmQgMi4wIE1IegorICAgICAgICAgICAgICAgICAgICBmb3IgRi9XIGV4dGVybmFsIGJ1cyBhdCBGYXN0LVNDU0kgc3BlZWQgb24gdGhlIGV4dGVybmFsCisJCSAgICBidXMuCisJCSAgICAKKyAgIEEgZnVydGhlciBvcHRpb24gaXMgdGhhdCB5b3UgY2FuIGZvcmNlIHRoZSBTQ1NJLWRyaXZlciB0byBhY2NlcHQgYSBTQ1NJLQorICAgc3Vic3lzdGVtIGF0IGEgY2VydGFpbiBJL08tYWRkcmVzcyB3aXRoIGEgcHJlZGVmaW5lZCBhZGFwdGVyIFBVTi4gVGhpcworICAgaXMgZG9uZSBieSBlbnRlcmluZyAKKworICAgICAgICAgICAgICAgICAgY29tbWFuZE4gICA9IEkvTy1iYXNlCisJCSAgY29tbWFuZE4rMSA9IGFkYXB0ZXIgUFVOCisJCSAgCisgICBlLmcuIGlibW1jYXNjc2k9MHgzNTQwLDcgd2lsbCBmb3JjZSB0aGUgZHJpdmVyIHRvIGRldGVjdCBhIFNDU0ktc3Vic3lzdGVtIAorICAgYXQgSS9PLWFkZHJlc3MgMHgzNTQwIHdpdGggYWRhcHRlciBQVU4gNy4gUGxlYXNlIG9ubHkgdXNlIHRoaXMgbWV0aG9kLCBpZgorICAgdGhlIGRyaXZlciBkb2VzIHJlYWxseSBub3QgcmVjb2duaXplIHlvdXIgU0NTSS1hZGFwdGVyISBXaXRoIGRyaXZlciB2ZXJzaW9uCisgICAzLjIsIHRoaXMgcmVjb2duaXRpb24gb2YgdmFyaW91cyBhZGFwdGVycyB3YXMgaHVnZWx5IGltcHJvdmVkIGFuZCB5b3UKKyAgIHNob3VsZCB0cnkgZmlyc3QgdG8gcmVtb3ZlIHlvdXIgY29tbWFuZGxpbmUgYXJndW1lbnRzIG9mIHN1Y2ggdHlwZSB3aXRoIGEgCisgICBuZXdlciBkcml2ZXIuIEkgYmV0LCBpdCB3aWxsIGJlIHJlY29nbml6ZWQgY29ycmVjdGx5LiBFdmVuIG11bHRpcGxlIGFuZCAKKyAgIGRpZmZlcmVudCB0eXBlcyBvZiBJQk0gU0NTSS1hZGFwdGVycyBzaG91bGQgYmUgcmVjb2duaXplZCBjb3JyZWN0bHksIHRvby4KKyAgIFVzZSB0aGUgZm9yY2VkIGRldGVjdGlvbiBtZXRob2Qgb25seSBhcyBsYXN0IHNvbHV0aW9uIQorICAgCisgICBFeGFtcGxlczoKKyAgIAorICAgICAgICBpYm1tY2FzY3NpPWFkaXNwbGF5CisJCisgICBUaGlzIHdpbGwgdXNlIHRoZSBhZHZhbmNlZCBkaXNwbGF5IG1vZGUgZm9yIHRoZSBtb2RlbCA5NSBMRUQgYWxwaGFudW1lcmljCisgICBkaXNwbGF5LgorICAgCisgICAgICAgIGlibW1jYXNjc2k9ZGlzcGxheSwweDM1NTgsNworCQorICAgVGhpcyB3aWxsIGFjdGl2YXRlIHRoZSBkZWZhdWx0IGRpc3BsYXkgbW9kZSBmb3IgdGhlIG1vZGVsIDk1IExFRCBkaXNwbGF5CisgICBhbmQgd2lsbCBmb3JjZSB0aGUgZHJpdmVyIHRvIGFjY2VwdCBhIFNDU0ktc3Vic3lzdGVtIGF0IEkvTy1iYXNlIDB4MzU1OAorICAgd2l0aCBhZGFwdGVyIFBVTiA3LgorICAgCisgICA1LjIgVHJvdWJsZXNob290aW5nCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tCisgICBUaGUgZm9sbG93aW5nIEZBUXMgc2hvdWxkIGhlbHAgeW91IHRvIHNvbHZlIHNvbWUgbWFqb3IgcHJvYmxlbXMgd2l0aCB0aGlzCisgICBkcml2ZXIuCisgICAKKyAgICAgUTogIlJlc2V0IFNDU0ktZGV2aWNlcyBhdCBib290dGltZSIgaGFsdHMgdGhlIHN5c3RlbSBhdCBib290dGltZSwgd2h5PworICAgICBBOiBUaGlzIGlzIG9ubHkgdGVzdGVkIHdpdGggdGhlIElCTSBTQ1NJIEFkYXB0ZXIgdy9jYWNoZS4gSXQgaXMgbm90CisgICAgICAgIHlldCBwcm9vdmVkIHRvIHJ1biBvbiBvdGhlciBhZGFwdGVycywgaG93ZXZlciB5b3UgbWF5IGJlIGx1Y2t5LgorCUluIHZlcnNpb24gMy4xZCB0aGlzIGhhcyBiZWVuIGh1Z2VseSBpbXByb3ZlZCBhbmQgc2hvdWxkIHdvcmsgYmV0dGVyLAorCW5vdy4gTm9ybWFsbHkgeW91IHJlYWxseSB3b24ndCBuZWVkIHRvIGFjdGl2YXRlIHRoaXMgZmxhZyBpbiB0aGUKKwlrZXJuZWwgY29uZmlndXJhdGlvbiwgYXMgYWxsIHBvc3QgMTk4OSBTQ1NJLWRldmljZXMgc2hvdWxkIGFjY2VwdAorCXRoZSByZXNldC1zaWduYWwsIHdoZW4gdGhlIGNvbXB1dGVyIGlzIHN3aXRjaGVkIG9uLiBUaGUgU0NTSS0KKwlzdWJzeXN0ZW0gZ2VuZXJhdGVzIHRoaXMgcmVzZXQgd2hpbGUgYmVpbmcgaW5pdGlhbGl6ZWQuIFRoaXMgZmxhZworCWlzIHJlYWxseSByZXNlcnZlZCBmb3IgdXNlcnMgd2l0aCB2ZXJ5IG9sZCwgdmVyeSBzdHJhbmdlIG9yIHNlbGYtbWFkZQorCVNDU0ktZGV2aWNlcy4KKyAgICAgUTogV2h5IGlzIHRoZSBTQ1NJLW9yZGVyIG9mIG15IGRyaXZlcyBtaXJyb3JlZCB0byB0aGUgZGV2aWNlLW9yZGVyCisgICAgICAgIHNlZW4gZnJvbSBPUy8yIG9yIERPUyA/CisgICAgIEE6IEl0IGRlcGVuZHMgb24gdGhlIG9wZXJhdGluZyBzeXN0ZW0sIGlmIGl0IGxvb2tzIGF0IHRoZSBkZXZpY2VzIGluCisgICAgICAgIEFOU0ktU0NTSS1zdGFuZGFyZCAoc3RhcnRpbmcgZnJvbSBwdW4gNiBhbmQgZ29pbmcgZG93biB0byBwdW4gMCkgb3IKKwlpZiBpdCBqdXN0IHN0YXJ0cyBhdCBwdW4gMCBhbmQgY291bnRzIHVwLiBJZiB5b3Ugd2FudCB0byBiZSBjb25mb3JtCisJd2l0aCBPUy8yIGFuZCBET1MsIHlvdSBoYXZlIHRvIGFjdGl2YXRlIHRoaXMgZmxhZyBpbiB0aGUga2VybmVsCisJY29uZmlndXJhdGlvbiBvciB5b3Ugc2hvdWxkIHNldCAnYW5zaScgYXMgcGFyYW1ldGVyIGZvciB0aGUga2VybmVsLgorCVRoZSBwYXJhbWV0ZXIgJ25vcm1hbCcgc2V0cyB0aGUgbmV3IGluZHVzdHJ5IHN0YW5kYXJkLCBzdGFydGluZworCWZyb20gcHVuIDAsIHNjYW5uaW5nIHVwIHRvIHB1biA2LiBUaGlzIGFsbG93cyB5b3UgdG8gY2hhbmdlIHlvdXIgCisJb3BpbmlvbiBzdGlsbCBhZnRlciBoYXZpbmcgYWxyZWFkeSBjb21waWxlZCB0aGUga2VybmVsLgorICAgICBROiBXaHkgSSBjYW5ub3QgZmluZCB0aGUgSUJNIE1DQSBTQ1NJIHN1cHBvcnQgaW4gdGhlIGNvbmZpZyBtZW51ZT8KKyAgICAgQTogWW91IGhhdmUgdG8gYWN0aXZhdGUgTUNBIGJ1cyBzdXBwb3J0LCBmaXJzdC4KKyAgICAgUTogV2hlcmUgY2FuIEkgZmluZCB0aGUgbGF0ZXN0IGluZm8gYWJvdXQgdGhpcyBkcml2ZXI/CisgICAgIEE6IFNlZSB0aGUgZmlsZSBNQUlOVEFJTkVSUyBmb3IgdGhlIGN1cnJlbnQgV1dXLWFkZHJlc3MsIHdoaWNoIG9mZmVycworICAgICAgICB1cGRhdGVzLCBpbmZvIGFuZCBRL0EgbGlzdHMuIEF0IHRoaXMgZmlsZXMnIG9yaWdpbiwgdGhlIHdlYmFkZHJlc3MKKwl3YXM6IGh0dHA6Ly93d3cudW5pLW1haW56LmRlL35sYW5nbTAwMC9saW51eC5odG1sCisgICAgIFE6IE15IFNDU0ktYWRhcHRlciBpcyBub3QgcmVjb2duaXplZCBieSB0aGUgZHJpdmVyLCB3aGF0IGNhbiBJIGRvPworICAgICBBOiBKdXN0IGZvcmNlIGl0IHRvIGJlIHJlY29nbml6ZWQgYnkga2VybmVsIHBhcmFtZXRlcnMuIFNlZSBzZWN0aW9uIDUuMS4KKyAgICAgICAgSWYgdGhpcyByZWFsbHkgaGFwcGVucywgZG8gYWxzbyBzZW5kIGUtbWFpbCB0byB0aGUgbWFpbnRhaW5lciwgYXMKKwlmb3JjZWQgZGV0ZWN0aW9uIHNob3VsZCBiZSBuZXZlciBuZWNlc3NhcnkuIEZvcmNlZCBkZXRlY3Rpb24gaXMgaW4KKwlwcmluY2lwYWwgc29tZSBmbGF3IG9mIHRoZSBkcml2ZXIgYWRhcHRlciBkZXRlY3Rpb24gYW5kIGdvZXMgaW50byAKKwlidWdyZXBvcnRzLgorICAgICBROiBUaGUgZHJpdmVyIHNjcmV3cyB1cCwgaWYgaXQgc3RhcnRzIHRvIHByb2JlIFNDU0ktZGV2aWNlcywgaXMgdGhlcmUKKyAgICAgICAgc29tZSB3YXkgb3V0IG9mIGl0PworICAgICBBOiBZZXMsIHRoYXQgd2FzIHNvbWUgcmVjb2duaXRpb24gcHJvYmxlbSBvZiB0aGUgY29ycmVjdCBTQ1NJLWFkYXB0ZXIKKyAgICAgICAgYW5kIGl0cyBJL08gYmFzZSBhZGRyZXNzZXMuIFVwZ3JhZGUgeW91ciBkcml2ZXIgdG8gdGhlIGxhdGVzdCByZWxlYXNlCisJYW5kIGl0IHNob3VsZCBiZSBmaW5lIGFnYWluLgorICAgICBROiBJIGdldCBhIG1lc3NhZ2U6IHBhbmljIElCTSBNQ0EgU0NTSTogY29tbWFuZCBlcnJvciAuLi4uICwgd2hhdCBjYW4KKyAgICAgICAgSSBkbyBhZ2FpbnN0IHRoaXM/CisgICAgIEE6IFByZXZpb3VzbHksIEkgZm9sbG93ZWQgdGhlIHdheSBieSBpZ25vcmluZyBjb21tYW5kIGVycm9ycyBieSB1c2luZworICAgICAgICBpYm1tY2FzY3NpPWZvcmdpdmVhbGwsIGJ1dCB0aGlzIGNvbW1hbmQgbm8gbG9uZ2VyIGV4aXN0cyBhbmQgaXMKKwlvYnNvbGV0ZS4gSWYgc3VjaCBhIHByb2JsZW0gYXBwZWFycywgaXQgaXMgY2F1c2VkIGJ5IHNvbWUgc2VnbWVudGF0aW9uCisJZmF1bHQgb2YgdGhlIGRyaXZlciwgd2hpY2ggbWFwcyB0byBzb21lIHVuYWxsb3dlZCBhcmVhLiBUaGUgbGF0ZXN0IAorCXZlcnNpb24gb2YgdGhlIGRyaXZlciBzaG91bGQgYmUgb2ssIGFzIG1vc3QgYnVncyBoYXZlIGJlZW4gc29sdmVkLgorICAgICBROiBUaGVyZSBhcmUgc3RpbGwga2VybmVsIHBhbmljcywgZXZlbiBhZnRlciBoYXZpbmcgc2V0IAorICAgICAgICBpYm1tY2FzY3NpPWZvcmdpdmVhbGwuIEFyZSB0aGVyZSBvdGhlciBwb3NzaWJpbGl0aWVzIHRvIHByZXZlbnQKKwlzdWNoIHBhbmljcz8KKyAgICAgQTogTm8sIGdldCBqdXN0IHRoZSBsYXRlc3QgcmVsZWFzZSBvZiB0aGUgZHJpdmVyIGFuZCBpdCBzaG91bGQgd29yayAKKyAgICAgICAgYmV0dGVyIGFuZCBiZXR0ZXIgd2l0aCBpbmNyZWFzaW5nIHZlcnNpb24gbnVtYmVyLiBGb3JnZXQgYWJvdXQgdGhpcworCWlibW1jYXNjc2k9Zm9yZ2l2ZWFsbCwgYXMgYWxzbyBpZ25vcmVjbWQgYXJlIG9ic29sZXRlLiEKKyAgICAgUTogTGludXggcGFuaWNzIG9yIHN0b3BzIHdpdGhvdXQgYW55IGNvbW1lbnQsIGJ1dCBpdCBpcyBwcm9iYWJsZSwgdGhhdCBteQorICAgICAgICBoYXJkZGlzayhzKSBoYXZlIGJhZCBibG9ja3MuCisgICAgIEE6IFNvcnJ5LCB0aGUgYmFkLWJsb2NrIGhhbmRsaW5nIGlzIHN0aWxsIGEgZmVlYmxlIHBvaW50IG9mIHRoaXMgZHJpdmVyLAorICAgICAgICBidXQgaXMgb24gdGhlIHNjaGVkdWxlIGZvciBkZXZlbG9wbWVudCBpbiB0aGUgbmVhciBmdXR1cmUuCisgICAgIFE6IExpbnV4IHBhbmljcyB3aGlsZSBkeW5hbWljYWxseSBhc3NpZ25pbmcgU0NTSS1pZHMgb3IgbGRucy4KKyAgICAgQTogSWYgeW91IGRpc2Nvbm5lY3QgYSBTQ1NJLWRldmljZSBmcm9tIHRoZSBtYWNoaW5lLCB3aGlsZSBMaW51eCBpcyB1cAorICAgICAgICBhbmQgdGhlIGRyaXZlciB1c2VzIGR5bmFtaWNhbCByZWFzc2lnbm1lbnQgb2YgbG9naWNhbCBkZXZpY2UgbnVtYmVycworCShsZG4pLCBpdCByZWFsbHkgZ2V0cyAiYW5ncnkiIGlmIGl0IHdvbid0IGZpbmQgZGV2aWNlcywgdGhhdCB3ZXJlIHN0aWxsCisJcHJlc2VudCBhdCBib290dGltZSBhbmQgc3RvcHMgTGludXguCisgICAgIFE6IFRoZSBzeXN0ZW0gZG9lcyBub3QgcmVjb3ZlciBhZnRlciBhbiBhYm9ydC1jb21tYW5kIGhhcyBiZWVuIGdlbmVyYXRlZC4KKyAgICAgQTogVGhpcyBpcyByZWdyZXR0YWJseSB0cnVlLCBhcyBpdCBpcyBub3QgeWV0IHVuZGVyc3Rvb2QsIHdoeSB0aGUgCisgICAgICAgIFNDU0ktYWRhcHRlciBkb2VzIHJlYWxseSBOT1QgZ2VuZXJhdGUgYW55IGludGVycnVwdCBhdCB0aGUgZW5kIG9mCisJdGhlIGFib3J0LWNvbW1hbmQuIEFzIG5vIGludGVycnVwdCBpcyBnZW5lcmF0ZWQsIHRoZSBhYm9ydCBjb21tYW5kCisJY2Fubm90IGdldCBmaW5pc2hlZCBhbmQgdGhlIHN5c3RlbSBoYW5ncywgc29ycnksIGJ1dCBjaGVja3MgYXJlIAorCXJ1bm5pbmcgdG8gaHVudCBkb3duIHRoaXMgcHJvYmxlbS4gSWYgdGhlcmUgaXMgYSByZWFsIHBlbmRpbmcgY29tbWFuZCwKKwl0aGUgaW50ZXJydXB0IE1VU1QgZ2V0IGdlbmVyYXRlZCBhZnRlciBhYm9ydC4gSW4gdGhpcyBjYXNlLCBpdAorCXNob3VsZCBmaW5pc2ggd2VsbC4KKyAgICAgUTogVGhlIHN5c3RlbSBnZXRzIGluIGJhZCBzaGFwZSBhZnRlciBhIFNDU0ktcmVzZXQsIGlzIHRoaXMga25vd24/CisgICAgIEE6IFllcywgYXMgdGhlcmUgYXJlIGEgbG90IG9mIHByZXNjcmlwdGlvbnMgKHNlZSB0aGUgTGludXggSGFja2VycycKKyAgICAgICAgR3VpZGUpIHdoYXQgaGFzIHRvIGJlIGRvbmUgZm9yIHJlc2V0LCB3ZSBzdGlsbCBzaGFyZSB0aGUgYmFkIHNoYXBlIG9mCisJdGhlIHJlc2V0IGZ1bmN0aW9ucyB3aXRoIGFsbCBvdGhlciBsb3cgbGV2ZWwgU0NTSS1kcml2ZXJzLiAKKwlBc3RvbmlzaGluZ2x5LCByZXNldCB3b3JrcyBpbiBtb3N0IGNhc2VzIHF1aXRlIG9rLCBidXQgdGhlIGhhcmRkaXNrcworCXdvbid0IHJ1biBpbiBzeW5jaG9ub3VzIG1vZGUgYW55bW9yZSBhZnRlciBhIHJlc2V0LCB1bnRpbCB5b3UgcmVib290LgorICAgICBROiBXaHkgZG9lcyBteSBYWFggdy9DYWNoZSBhZGFwdGVyIG5vdCB1c2UgcmVhZC1wcmVmZXRjaD8KKyAgICAgQTogT2ssIHRoYXQgaXMgbm90IGNvbXBsZXRlbHkgcG9zc2libGUuIElmIGEgY2FjaGUgaXMgcHJlc2VudCwgdGhlIAorICAgICAgICBhZGFwdGVyIHRyaWVzIHRvIHVzZSBpdCBpbnRlcm5hbGx5LiBFeHBsaWNpdGx5LCBvbmUgY2FuIHVzZSB0aGUgY2FjaGUKKwl3aXRoIGEgcmVhZCBwcmVmZXRjaCBjb21tYW5kLCBtYXliZSBpbiBmdXR1cmUsIGJ1dCB0aGlzIHJlcXVpcmVzCisJc29tZSBtYWpvciBvdmVyaGVhZCBvZiBTQ1NJLWNvbW1hbmRzIHRoYXQgcmlza3MgdGhlIHBlcmZvcm1hbmNlIHRvCisJZ28gZG93biBtb3JlIHRoYW4gaXQgZ2V0cyBpbXByb3ZlZC4gVGVzdHMgd2l0aCB0aGF0IGFyZSBydW5uaW5nLgorICAgICBROiBJIGhhdmUgYSBJQk0gU0NTSS0yIEZhc3QvV2lkZSBhZGFwdGVyLCBpdCBib290cyBpbiBzb21lIHdheSBhbmQgaGFuZ3MuCisgICAgIEE6IFllcywgdGhhdCBpcyB1bmRlcnN0b29kLCBhcyBmb3Igc3VyZSwgeW91ciBTQ1NJLTIgRmFzdC9XaWRlIGFkYXB0ZXIKKyAgICAgICAgd2FzIGluIHN1Y2ggYSBjYXNlIHJlY29nbml6ZWQgYXMgaW50ZWdyYXRlZCBTQ1NJLWFkYXB0ZXIgb3Igc29tZXRoaW5nIAorCWVsc2UsIGJ1dCBub3QgYXMgdGhlIGNvcnJlY3QgYWRhcHRlci4gQXMgdGhlIEkvTy1wb3J0cyBnZXQgYXNzaWduZWQgCisJd3JvbmdseSBieSB0aGF0IHJlYXNvbiwgdGhlIHN5c3RlbSBzaG91bGQgY3Jhc2ggaW4gbW9zdCBjYXNlcy4gWW91IAorCXNob3VsZCB1cGdyYWRlIHRvIHRoZSBsYXRlc3QgcmVsZWFzZSBvZiB0aGUgU0NTSS1kcml2ZXIuIFRoZSAKKwlyZWNvbW1lbmRlZCB2ZXJzaW9uIGlzIDMuMiBvciBsYXRlci4gSGVyZSwgdGhlIEYvVyBzdXBwb3J0IGlzIGluCisJYSBzdGFibGUgYW5kIHJlbGlhYmxlIGNvbmRpdGlvbi4gV2lkZS1hZGRyZXNzaW5nIGlzIGluIGFkZGl0aW9uIAorCXN1cHBvcnRlZC4KKyAgICAgUTogSSBnZXQgYSBPb29wcyBtZXNzYWdlIGFuZCBzb21ldGhpbmcgbGlrZSAia2lsbGluZyBpbnRlcnJ1cHQiLgorICAgICBBOiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRoYXQgdGhlIElCTSBTQ1NJLXN1YnN5c3RlbSBvbmx5IHNlbmRzIGEgCisgICAgICAgIHRlcm1pbmF0aW9uIHN0YXR1cyBiYWNrLCBpZiBzb21lIGVycm9yIGFwcGVhcmVkLiBJbiBmb3JtZXIgcmVsZWFzZXMKKwlvZiB0aGUgZHJpdmVyLCBpdCB3YXMgbm90IGNoZWNrZWQsIGlmIHRoZSB0ZXJtaW5hdGlvbiBzdGF0dXMgYmxvY2sKKwlpcyBOVUxMLiBGcm9tIHZlcnNpb24gMy4yLCBpdCBpcyB0YWtlbiBjYXJlIG9mIHRoaXMuCisgICAgIFE6IEkgaGF2ZSBhIEYvVyBhZGFwdGVyIGFuZCB0aGUgZHJpdmVyIHNlZXMgbXkgaW50ZXJuYWwgU0NTSS1kZXZpY2VzLAorICAgICAgICBidXQgaWdub3JlcyB0aGUgZXh0ZXJuYWwgb25lcy4KKyAgICAgQTogU2VsZWN0IGNvbWJpbmVkIGJ1c21vZGUgaW4gdGhlIElCTSBjb25maWctcHJvZ3JhbSBhbmQgY2hlY2sgZm9yIHRoYXQKKyAgICAgICAgbm8gU0NTSS1pZCBvbiB0aGUgZXh0ZXJuYWwgZGV2aWNlcyBhcHBlYXJzIG9uIGludGVybmFsIGRldmljZXMuCisgICAgICAgIFJlYm9vdCBhZnRlcndhcmRzLiBEdWFsIGJ1c21vZGUgaXMgc3VwcG9ydGVkLCBidXQgd29ya3Mgb25seSBmb3IgdGhlCisJaW50ZXJuYWwgYnVzLCB5ZXQuIEV4dGVybmFsIGJ1cyBpcyBzdGlsbCBpZ25vcmVkLiBUYWtlIGNhcmUgZm9yIHlvdXIKKwlTQ1NJLWlkcy4gSWYgY29tYmluZWQgYnVzLW1vZGUgaXMgYWN0aXZhdGVkLCBvbiBzb21lIGFkYXB0ZXJzLCAKKwl0aGUgd2lkZS1hZGRyZXNzaW5nIGlzIG5vdCBwb3NzaWJsZSwgc28gZGV2aWNlcyB3aXRoIGlkcyBiZXR3ZWVuIDggCisJYW5kIDE1IGdldCBpZ25vcmVkIGJ5IHRoZSBkcml2ZXIgJiBhZGFwdGVyIQorICAgICBROiBJIGhhdmUgYSA5NTk1IGFuZCBJIGdldCBhIE5NSSBkdXJpbmcgaGVhdnkgU0NTSSBJL08gZS5nLiBkdXJpbmcgZnNjay4KKyAgICAgICAgQSBDT01NQU5EIEVSUk9SIGlzIHJlcG9ydGVkIGFuZCBjaGFyYWN0ZXJzIG9uIHRoZSBzY3JlZW4gYXJlIG1pc3NpbmcuCisJV2FybSByZWJvb3QgaXMgbm90IHBvc3NpYmxlLiBUaGluZ3MgbG9vayBsaWtlIHF1aXRlIHdlaXJlZC4KKyAgICAgQTogQ2hlY2sgdGhlIHByb2Nlc3NvciB0eXBlIG9mIHlvdXIgOTU5NS4gSWYgeW91IGhhdmUgYW4gODA0ODYgb3IgNDg2RFgtMgorICAgICAgICBwcm9jZXNzb3IgY29tcGxleCBvbiB5b3VyIG1haW5ib2FyZCBhbmQgeW91IGNvbXBpbGVkIGEga2VybmVsIHRoYXQKKwlzdXBwb3J0cyA4MDM4NiBwcm9jZXNzb3JzLCBpdCBpcyBwb3NzaWJsZSwgdGhhdCB0aGUga2VybmVsIGNhbm5vdAorCWtlZXAgdHJhY2sgb2YgdGhlIFBTLzIgaW50ZXJydXB0IGhhbmRsaW5nIGFuZCBzdG9wcyBvbiBhbiBOTUkuIEp1c3QKKwljb21waWxlIGEga2VybmVsIGZvciB0aGUgY29ycmVjdCBwcm9jZXNzb3IgdHlwZSBvZiB5b3VyIFBTLzIgYW5kCisJZXZlcnl0aGluZyBzaG91bGQgYmUgZmluZS4gVGhpcyBpcyBuZWNlc3NhcnkgZXZlbiBpZiBvbmUgYXNzdW1lcywKKwl0aGF0IHNvbWUgODA0ODYgc3lzdGVtIHNob3VsZCBiZSBkb3dud2FyZCBjb21wYXRpYmxlIHRvIDgwMzg2CisJc29mdHdhcmUuCisgICAgIFE6IFNvbWUgY29tbWFuZHMgaGFuZyBhbmQgaW50ZXJydXB0cyBibG9jayB0aGUgbWFjaGluZS4gQWZ0ZXIgc29tZQorICAgICAgICB0aW1lb3V0LCB0aGUgc3lzbG9nIHJlcG9ydHMgdGhhdCBpdCB0cmllcyB0byBjYWxsIGFib3J0LCBidXQgdGhlCisJbWFjaGluZSBpcyBmcm96ZW4uCisgICAgIEE6IFRoaXMgY2FuIGJlIGEgYnVzeSB3YWl0IGJ1ZyBpbiB0aGUgaW50ZXJydXB0IGhhbmRsZXIgb2YgZHJpdmVyIAorICAgICAgICB2ZXJzaW9uIDMuMi4gWW91IHNob3VsZCBhdCBsZWFzdCB1cGdyYWRlIHRvIDMuMmMgaWYgeW91IHVzZSAKKwlrZXJuZWwgPCAyLjQuMCBhbmQgZHJpdmVyIHZlcnNpb24gNC4wIGlmIHlvdSB1c2Uga2VybmVsIDIuNC4wIG9yIAorCWxhdGVyIChpbmNsdWRpbmcgYWxsIHRlc3QgcmVsZWFzZXMpLgorICAgICBROiBJIGhhdmUgYSBQUy8yIG1vZGVsIDgwIGFuZCBtb3JlIHRoYW4gMTYgTUJ5dGVzIG9mIFJBTS4gVGhlIGRyaXZlcgorICAgICAgICBjb21wbGV0ZWx5IHJlZnVzZXMgdG8gd29yaywgcmVwb3J0cyBOTUlzLCBDT01NQU5EIEVSUk9ScyBvciBvdGhlcgorCWFtYmlndW91cyBzdHVmZi4gV2hlbiByZWR1Y2luZyB0aGUgUkFNIHNpemUgZG93biBiZWxvdyAxNiBNQiwgCisJZXZlcnl0aGluZyBpcyBydW5uaW5nIHNtb290aGx5LgorICAgICBBOiBObyByZWFsIGFuc3dlciwgeWV0LiBJbiBhbnkgY2FzZSwgb25lIHNob3VsZCBmb3JjZSB0aGUga2VybmVsIHRvCisgICAgICAgIHByZXNlbnQgU0NCcyBvbmx5IGJlbG93IHRoZSAxNiBNQnl0ZXMgYmFycmllci4gTWF5YmUgdGhpcyBzb2x2ZXMgdGhlCisJcHJvYmxlbS4gTm90IHlldCB0cmllZCwgYnV0IGd1ZXNzaW5nIHRoYXQgaXQgY291bGQgd29yay4gVG8gZ2V0IHRoaXMsCisJc2V0IHVuY2hlY2tlZF9pc2FfZG1hIGFyZ3VtZW50IG9mIGlibW1jYS5oIGZyb20gMCB0byAxLgorCisgICA1LjMgQnVncmVwb3J0cworICAgLS0tLS0tLS0tLS0tLS0KKyAgIElmIHlvdSByZWFsbHkgZmluZCBidWdzIGluIHRoZSBzb3VyY2Vjb2RlIG9yIHRoZSBkcml2ZXIgd2lsbCBzdWNjZXNzZnVsbHkKKyAgIHJlZnVzZSB0byB3b3JrIG9uIHlvdXIgbWFjaGluZSwgeW91IHNob3VsZCBzZW5kIGEgYnVnIHJlcG9ydCB0byBtZS4gVGhlCisgICBiZXN0IGZvciB0aGlzIGlzIHRvIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIG9uIHRoZSBXV1ctcGFnZSBmb3IgdGhpcworICAgZHJpdmVyLiBGaWxsIG91dCB0aGUgYnVnLXJlcG9ydCBmb3JtLCBwbGFjZWQgb24gdGhlIFdXVy1wYWdlIGFuZCBzaGlwIGl0LAorICAgc28gdGhlIGJ1Z3MgY2FuIGJlIHRha2VuIGludG8gYWNjb3VudCB3aXRoIG1heGltdW0gZWZmb3J0cy4gQnV0LCBwbGVhc2UKKyAgIGRvIG5vdCBzZW5kIGJ1ZyByZXBvcnRzIGFib3V0IHRoaXMgZHJpdmVyIHRvIExpbnVzIFRvcnZhbGRzIG9yIExlb25hcmQKKyAgIFp1YmtvZmYsIGFzIExpbnVzIGlzIGJ1cnJpZWQgaW4gRS1NYWlsIGFuZCBMZW9uYXJkIGlzIHN1cGVydmlzaW5nIGFsbAorICAgU0NTSS1kcml2ZXJzIGFuZCB3b24ndCBoYXZlIHRoZSB0aW1lIGxlZnQgdG8gbG9vayBpbnNpZGUgZXZlcnkgc2luZ2xlCisgICBkcml2ZXIgdG8gZml4IGEgYnVnIGFuZCBlc3BlY2lhbGx5IERPIE5PVCBzZW5kIG1vZGlmaWVkIGNvZGUgdG8gTGludXMKKyAgIFRvcnZhbGRzIG9yIEFsYW4gSi4gQ294IHdoaWNoIGhhcyBub3QgYmVlbiBjaGVja2VkIGhlcmUhISEgVGhleSBhcmUgYm90aAorICAgcXVpdGUgYnVycmllZCBpbiBFLW1haWwgKGFzIG1lLCBzb21ldGltZXMsIHRvbykgYW5kIG9uZSBzaG91bGQgZmlyc3QgY2hlY2sKKyAgIGZvciBwcm9ibGVtcyBvbiBteSBsb2NhbCB0ZXN0c3RhbmQuIFJlY2VudGx5LCBJIGdvdCBhIGxvdCBvZiAKKyAgIGJ1Z3JlcG9ydHMgZm9yIGVycm9ycyBpbiB0aGUgaWJtbWNhLmMgY29kZSwgd2hpY2ggSSBjb3VsZCBub3QgaW1hZ2luZSwgYnV0CisgICBhIGxvb2sgaW5zaWRlIHNvbWUgTGludXgtZGlzdHJpYnV0aW9uIHNob3dlZCBtZSBxdWl0ZSBvZnRlbiBzb21lIG1vZGlmaWVkCisgICBjb2RlLCB3aGljaCBkaWQgbm8gbG9uZ2VyIHdvcmsgb24gbW9zdCBvdGhlciBtYWNoaW5lcyB0aGFuIHRoZSBvbmUgb2YgdGhlCisgICBtb2RpZmllci4gT2ssIHNvIG5vdyB0aGF0IHRoZXJlIGlzIG1haW50ZW5hbmNlIHNlcnZpY2UgYXZhaWxhYmxlIGZvciB0aGlzCisgICBkcml2ZXIsIHBsZWFzZSB1c2UgdGhpcyBhZGRyZXNzIGZpcnN0IGluIG9yZGVyIHRvIGtlZXAgdGhlIGxldmVsIG9mCisgICBjb25mdXNpb24gbG93LiBUaGFuayB5b3UhCisgICAKKyAgIFdoZW4geW91IGdldCBhIFNDU0ktZXJyb3IgbWVzc2FnZSB0aGF0IHBhbmljcyB5b3VyIHN5c3RlbSwgYSBsaXN0IG9mCisgICByZWdpc3Rlci1lbnRyaWVzIG9mIHRoZSBTQ1NJLXN1YnN5c3RlbSBpcyBzaG93biAoZnJvbSBWZXJzaW9uIDMuMWQpLiBXaXRoIAorICAgdGhpcyBsaXN0LCBpdCBpcyB2ZXJ5IGVhc3kgZm9yIHRoZSBtYWludGFpbmVyIHRvIGxvY2FsaXplIHRoZSBwcm9ibGVtIGluIAorICAgdGhlIGRyaXZlciBvciBpbiB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgdXNlci4gUGxlYXNlIHdyaXRlIGRvd24gYWxsIHRoZSAKKyAgIHZhbHVlcyBmcm9tIHRoaXMgcmVwb3J0IGFuZCBzZW5kIHRoZW0gdG8gdGhlIG1haW50YWluZXIuIFRoaXMgd291bGQgcmVhbGx5IAorICAgaGVscCBhIGxvdCBhbmQgbWFrZXMgbGlmZSBlYXNpZXIgY29uY2VybmluZyBtaXN1bmRlcnN0YW5kaW5ncy4KKyAgIAorICAgVXNlIHRoZSBidWctcmVwb3J0IGZvcm0gKHNlZSA1LjQgZm9yIGl0cyBhZGRyZXNzKSB0byBzZW5kIGFsbCB0aGUgYnVnLQorICAgc3R1ZmYgdG8gdGhlIG1haW50YWluZXIgb3Igd3JpdGUgZS1tYWlsIHdpdGggdGhlIHZhbHVlcyBmcm9tIHRoZSB0YWJsZS4gCisgICAKKyAgIDUuNCBTdXBwb3J0IFdXVy1wYWdlCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVGhlIGFkZHJlc3Mgb2YgdGhlIElCTSBTQ1NJLXN1YnN5c3RlbSBzdXBwb3J0aW5nIFdXVy1wYWdlIGlzOgorICAgCisgICAgICAgIGh0dHA6Ly93d3cudW5pLW1haW56LmRlL35sYW5nbTAwMC9saW51eC5odG1sCisJCisgICBIZXJlIHlvdSBjYW4gZmluZCBpbmZvIGFib3V0IHRoZSBiYWNrZ3JvdW5kIG9mIHRoaXMgZHJpdmVyLCBwYXRjaGVzLAorICAgdHJvdWJsZXNob290aW5nIHN1cHBvcnQsIG5ld3MgYW5kIGEgYnVncmVwb3J0IGZvcm0uIFBsZWFzZSBjaGVjayB0aGF0CisgICBXV1ctcGFnZSByZWd1bGFybHkgZm9yIGxhdGVzdCBoaW50cy4gSWYgZXZlciB0aGlzIFVSTCBjaGFuZ2VzLCBwbGVhc2UgCisgICByZWZlciB0byB0aGUgTUFJTlRBSU5FUlMgZmlsZSBpbiBvcmRlciB0byBnZXQgdGhlIGxhdGVzdCBhZGRyZXNzLgorICAgCisgICBGb3IgdGhlIGJ1Z3JlcG9ydCwgcGxlYXNlIGZpbGwgb3V0IHRoZSBmb3JtdWxhciBvbiB0aGUgY29ycmVzcG9uZGluZworICAgV1dXLXBhZ2UuIFJlYWQgdGhlIGRlZGljYXRlZCBpbnN0cnVjdGlvbnMgYW5kIHdyaXRlIGFzIG11Y2ggYXMgeW91CisgICBrbm93IGFib3V0IHlvdXIgcHJvYmxlbS4gSWYgeW91IGRvIG5vdCBsaWtlIHN1Y2ggZm9ybXVsYXJzLCBwbGVhc2Ugc2VuZAorICAgc29tZSBlLW1haWwgZGlyZWN0bHksIGJ1dCBhdCBsZWFzdCB3aXRoIHRoZSBzYW1lIGluZm9ybWF0aW9uIGFzIHJlcXVpcmVkIGJ5CisgICB0aGUgZm9ybXVsYXIuCisgICAKKyAgIElmIHlvdSBoYXZlIGV4dGVuc2l2ZSBidWdyZXBvcnRzLCBpbmNsdWRpbmcgT29vcHMgbWVzc2FnZXMgYW5kIAorICAgc2NyZWVuLXNob3RzLCBwbGVhc2UgZmVlbCBmcmVlIHRvIHNlbmQgaXQgZGlyZWN0bHkgdG8gdGhlIGFkZHJlc3MKKyAgIG9mIHRoZSBtYWludGFpbmVyLCB0b28uIFRoZSBjdXJyZW50IGFkZHJlc3Mgb2YgdGhlIG1haW50YWluZXIgaXM6CisgICAKKyAgICAgICAgICAgIE1pY2hhZWwgTGFuZyA8bGFuZ2EyQGtwaC51bmktbWFpbnouZGU+CisgICAKKyAgIDYgUmVmZXJlbmNlcworICAgLS0tLS0tLS0tLS0tCisgICBJQk0gQ29ycC4sICJVcGRhdGUgZm9yIHRoZSBQUy8yIEhhcmR3YXJlIEludGVyZmFjZSBUZWNobmljYWwgUmVmZXJlbmNlLCAKKyAgIENvbW1vbiBJbnRlcmZhY2VzIiwgQXJtb25rLCBTZXB0ZW1iZXIgMTk5MSwgUE4gMDRHMzI4MSwgCisgICAoYXZhaWxhYmxlIGluIHRoZSBVLlMuIGZvciAkMjEuNzUgYXQgMS04MDAtSUJNLVBDVEIgb3IgaW4gR2VybWFueSBmb3IKKyAgIGFyb3VuZCA0MCwtRE0gYXQgIkhhbGxvIElCTSIpLgorICAKKyAgIElCTSBDb3JwLiwgIlBlcnNvbmFsIFN5c3RlbS8yIE1pY3JvIENoYW5uZWwgU0NTSQorICAgQWRhcHRlciB3aXRoIENhY2hlIFRlY2huaWNhbCBSZWZlcmVuY2UiLCBBcm1vbmssIE1hcmNoIDE5OTAsIFBOIDY4WDIzNjUuCisKKyAgIElCTSBDb3JwLiwgIlBlcnNvbmFsIFN5c3RlbS8yIE1pY3JvIENoYW5uZWwgU0NTSQorICAgQWRhcHRlciBUZWNobmljYWwgUmVmZXJlbmNlIiwgQXJtb25rLCBNYXJjaCAxOTkwLCBQTiA2OFgyMzk3LgorCisgICBJQk0gQ29ycC4sICJTQ1NJLTIgRmFzdC9XaWRlIEFkYXB0ZXIvQSBUZWNobmljYWwgUmVmZXJlbmNlIC0gRHVhbCBCdXMiLAorICAgQXJtb25rLCBNYXJjaCAxOTk0LCBQTiA4M0c3NTQ1LgorIAorICAgRnJpZWRoZWxtIFNjaG1pZHQsICJTQ1NJLUJ1cyB1bmQgSURFLVNjaG5pdHRzdGVsbGUgLSBNb2Rlcm5lIFBlcmlwaGVyaWUtCisgICBTY2huaXR0c3RlbGxlbjogSGFyZHdhcmUsIFByb3Rva29sbGJlc2NocmVpYnVuZyB1bmQgQW53ZW5kdW5nIiwgMi4gQXVmbC4KKyAgIEFkZGlzb24gV2VzbGV5LCAxOTk2LgorICAgCisgICBNaWNoYWVsIEsuIEpvaG5zb24sICJUaGUgTGludXggS2VybmVsIEhhY2tlcnMnIEd1aWRlIiwgVmVyc2lvbiAwLjYsIENoYXBlbAorICAgSGlsbCAtIE5vcnRoIENhcm9saW5hLCAxOTk1CisgICAKKyAgIEFuZHJlYXMgS2Fpc2VyLCAiU0NTSSBUQVBFIEJBQ0tVUCBmb3IgT1MvMiAyLjAiLCBWZXJzaW9uIDIuMTIsIFN0dXR0Z2FydAorICAgMTk5MworICAgCisgICBIZWxtdXQgUm9tcGVsLCAiSUJNIENvbXB1dGVyd2VsdCBHVUlERSIsIFdoYXQgaXMgd2hhdCBiZWkgSUJNLiwgU3lzdGVtZSAqCisgICBQcm9ncmFtbWUgKiBCZWdyaWZmZSwgSVdULVZlcmxhZyBHbWJIIC0gTXVlbmNoZW4sIDE5ODgKKyAgIAorICAgNyBDcmVkaXRzIHRvCisgICAtLS0tLS0tLS0tLS0KKyAgIDcuMSBQZW9wbGUKKyAgIC0tLS0tLS0tLS0KKyAgIEtsYXVzIEdyaW1tCisgICAgICAgICAgICAgICAgd2hvIGFscmVhZHkgYSBsb25nIHRpbWUgYWdvIGdhdmUgbWUgdGhlIG9sZCBjb2RlIGZyb20gdGhlCisJCVNDU0ktZHJpdmVyIGluIG9yZGVyIHRvIGdldCBpdCBydW5uaW5nIGZvciBzb21lIG9sZCBtYWNoaW5lCisJCWluIG91ciBpbnN0aXR1dGUuCisgICBNYXJ0aW4gS29saW5laworICAgICAgICAgICAgICAgIHdobyB3cm90ZSB0aGUgZmlyc3QgcmVsZWFzZSBvZiB0aGUgSUJNIFNDU0ktc3Vic3lzdGVtIGRyaXZlci4KKyAgIENocmlzIEJlYXVyZWdhcmQKKyAgICAgICAgICAgICAgICB3aG8gZm9yIGEgbG9uZyB0aW1lIG1haW50YWluZWQgTUNBLUxpbnV4IGFuZCB0aGUgU0NTSS1kcml2ZXIKKwkJaW4gdGhlIGJlZ2lubmluZy4gQ2hyaXMsIHdoZXJldmVyIHlvdSBhcmU6IENoZWVycyB0byB5b3UhCisgICBLbGF1cyBLdWRpZWxrYQorICAgICAgICAgICAgICAgIHdpdGggd2hvbSBpbiB0aGUgMi4xLnggdGltZXMsIEkgaGFkIGEgcXVpdGUgZnJ1aXRmdWwKKyAgICAgICAgICAgICAgICBjb29wZXJhdGlvbiB0byBnZXQgdGhlIGRyaXZlciBydW5uaW5nIGFzIGEgbW9kdWxlIGFuZCB0byBnZXQKKwkJaXQgcnVubmluZyB3aXRoIG11bHRpcGxlIFNDU0ktYWRhcHRlcnMuCisgICBEYXZpZCBXZWluZWhhbGwKKyAgICAgICAgICAgICAgICBmb3IgaGlzIGV4Y2VsbGVudCBtYWludGVuYW5jZSBvZiB0aGUgTUNBLXN0dWZmIGFuZCB0aGUgcXVpdGUgCisJCWRldGFpbGVkIGJ1ZyByZXBvcnRzIGFuZCBpZGVhcyBmb3IgdGhpcyBkcml2ZXIgKGFuZCBoaXMgCisJCXBhdGllbmNlIDstKSkuCisgICBBbGFuIEouIENveCAgCisgICAgICAgICAgICAgICAgZm9yIGhpcyBidWdyZXBvcnRzIGFuZCBoaXMgYm9sZCBhY3Rpdml0aWVzIGluIGNyb3NzLWNoZWNraW5nCisJCXRoZSBkcml2ZXItY29kZSB3aXRoIGhpcyB0ZXN0c3RhbmQuCisJCQorICAgNy4yIFNwb25zb3JzICYgU3VwcG9ydGVycworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIkhhbGxvIElCTSIsCisgICBJQk0tRGV1dHNjaGxhbmQgR21iSAorICAgICAgICAgICAgICAgIHRoZSBzZXJ2aWNlIG9mIElCTS1EZXV0c2NobGFuZCBmb3IgY3VzdG9tZXJzLiBUaGVpciBFLU1haWwKKwkJc2VydmljZSBpcyB1bmJlYXRhYmxlLiBXaGF0ZXZlciBvbGQgc3R1ZmYgSSBhc2tlZCBmb3IsIEkgCisJCWFsd2F5cyBnb3Qgc29tZSBoZWxwZnVsIGFuc3dlcnMuCisgICBLYXJsLU90dG8gUmVpbWVycywKKyAgIElCTSBLbHViIC0gU3BhcnRlIElCTSBHZXNjaGljaHRlLCBTaW5kZWxmaW5nZW4KKyAgICAgICAgICAgICAgICBmb3Igc2VuZGluZyBtZSBhIGNvcHkgb2YgdGhlIHcvQ2FjaGUgbWFudWFsIGZyb20gdGhlIAorCQlJQk0tRGV1dHNjaGxhbmQgYXJjaGl2ZXMuCisgICBIYXJhbGQgU3RhaWdlcgorICAgICAgICAgICAgICAgIGZvciBoaXMgZXh0ZW5zaXZlIGhhcmR3YXJlIGRvbmF0aW9ucyB3aGljaCBhbGxvd3MgbWUgdG9kYXkKKwkJc3RpbGwgdG8gdGVzdCB0aGUgZHJpdmVyIGluIHZhcmlvdXMgY29uc3RlbGxhdGlvbnMuCisgICBFcmljaCBGcml0c2NoZXIKKyAgICAgICAgICAgICAgICBmb3IgaGlzIHZlcnkga2luZCBzcG9uc29yaW5nLgorICAgTG91aXMgT2hsYW5kLAorICAgQ2hhcmxlcyBMYXNpdHRlcgorICAgICAgICAgICAgICAgIGZvciBzdXBwb3J0IGJ5IHNoaXBwaW5nIG1lIGFuIElCTSBTQ1NJLTIgRmFzdC9XaWRlIG1hbnVhbC4KKyAgICAgICAgICAgICAgICBJbiBhZGRpdGlvbiwgdGhlIGNvbnRyaWJ1dGlvbiBvZiB2YXJpb3VzIGhhcmR3YXJlIGlzIHF1aXRlIAorICAgICAgICAgICAgICAgIGRlY2Vzc2l2ZSBhbmQgd2lsbCBtYWtlIGl0IHBvc3NpYmxlIHRvIGFkZCBGV1NSIChSQUlEKQorICAgICAgICAgICAgICAgIGFkYXB0ZXIgc3VwcG9ydCB0byB0aGUgZHJpdmVyIGluIHRoZSBuZWFyIGZ1dHVyZSEgU28sCisgICAgICAgICAgICAgICAgY29tcGxhaW50cyBhYm91dCBubyBSQUlEIHN1cHBvcnQgd29uJ3QgcmVtYWluIGZvcmV2ZXIuCisgICAgICAgICAgICAgICAgWWVzLCBmb2xrcywgdGhhdCBpcyBubyBqb2tlLCBSQUlEIHN1cHBvcnQgaXMgZ29pbmcgdG8gcmlzZSEKKyAgIEVyaWsgV2ViZXIKKyAgICAgICAgICAgICAgICBmb3IgdGhlIGdyZWF0IGRlYWwgd2UgbWFkZSBhYm91dCBhIG1vZGVsIDk1OTUgYW5kIHRoZSBuaWNlCisgICAgICAgICAgICAgICAgc3Vycm91bmRpbmcgZXF1aXBtZW50IGFuZCB0aGUgY29vbCB0cmlwIHRvIE1hbm5oZWltCisgICAgICAgICAgICAgICAgc2Vjb25kLWhhbmQgY29tcHV0ZXIgbWFya2V0LiBJbiBhZGRpdGlvbiwgSSB3b3VsZCBsaWtlCisJCXRvIHRoYW5rIGhpbSBmb3IgaGlzIGV4aGF1c3RpdmUgU0NTSS1kcml2ZXIgdGVzdGluZyBvbiBoaXMgCisJCTk1ZXIgUFMvMiBwYXJrLgorICAgQW50aG9ueSBIb2diaW4KKyAgICAgICAgICAgICAgICBmb3IgaGlzIGRpcmVjdCBzaGlwbWVudCBvZiBhIFNDU0kgRi9XIGFkYXB0ZXIsIHdoaWNoIGFsbG93ZWQKKyAgICAgICAgICAgICAgICBtZSBpbW1lZGlhdGVseSBvbiB0aGUgZmlyc3Qgc3RhZ2UgdG8gdHJ5IGl0IG9uIG1vZGVsIDg1NTcKKyAgICAgICAgICAgICAgICB0b2dldGhlciB3aXRoIG9uYm9hcmQgU0NTSSBhZGFwdGVyIGFuZCBzb21lIFNDU0kgdy9DYWNoZS4KKyAgIEFuZHJlYXMgSG90egorICAgICAgICAgICAgICAgIGZvciBoaXMgc3VwcG9ydCBieSBtZW1vcnkgYW5kIGFuIElCTSBTQ1NJLWFkYXB0ZXIuIENvbGxlY3RpbmcKKyAgICAgICAgICAgICAgICBhbGwgdGhpcyB0b2dldGhlciBub3cgYWxsb3dzIG1lIHRvIHRyeSByZWFsbHkgdGhpbmdzIHdpdGgKKyAgICAgICAgICAgICAgICB0aGUgZHJpdmVyIGF0IG1heGltdW0gbG9hZCBhbmQgdmFyaWV0eSBvbiB2YXJpb3VzIG1vZGVscyBpbgorICAgICAgICAgICAgICAgIGEgdmVyeSBxdWljayBhbmQgZWZmaWNpZW50IHdheS4KKyAgIFBldGVyIEplbm5ld2VpbgorICAgICAgICAgICAgICAgIGZvciBoaXMgbW9kZWwgMzAsIHdoaWNoIHNlcnZlcyBtZSBhcyBwYXJ0IG9mIG15IHRlc3RzdGFuZAorCQlhbmQgaGlzIGNvb2wgcmVtYXJrIGFib3V0IGhvdyB5b3UgbWFrZSBhbiBvcmRpbmFyeSBkaXNrZXR0ZQorCQlkcml2ZSB3b3JraW5nIGFuZCBob3cgdG8gY29ubmVjdCBpdCB0byBhbiBJQk0tZGlza2V0dGUgcG9ydC4KKyAgIEpvaGFubmVzIEd1dGVuYmVyZy1Vbml2ZXJzaXRhZXQsIE1haW56ICYKKyAgIEluc3RpdHV0IGZ1ZXIgS2VybnBoeXNpaywgTWFpbnogTWljcm90cm9uIChNQU1JKQorICAgICAgICAgICAgICAgIGZvciB0aGUgb2ZmZXJlZCBzcGFjZSwgdGhlIGxpbmssIHBsYWNlZCBvbiB0aGUgY2VudHJhbAorICAgICAgICAgICAgICAgIGhvbWVwYWdlIGFuZCB0aGUgc3BhY2UgdG8gc3RvcmUgYW5kIG9mZmVyIHRoZSBkcml2ZXIgYW5kIAorCQlyZWxhdGVkIG1hdGVyaWFsIGFuZCB0aGUgZnJlZSB3b3JraW5nIHRpbWVzLCB3aGljaCBhbGxvdworICAgICAgICAgICAgICAgIG1lIHRvIGFuc3dlciBhbGwgeW91ciBlLW1haWwuCisgICAgICAgICAgICAgICAgICAgCisgICA4IFRyYWRlbWFya3MKKyAgIC0tLS0tLS0tLS0tLQorICAgSUJNLCBQUy8yLCBPUy8yLCBNaWNyb2NoYW5uZWwgYXJlIHJlZ2lzdGVyZWQgdHJhZGVtYXJrcyBvZiBJbnRlcm5hdGlvbmFsIAorICAgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24KKyAgIAorICAgTVMtRE9TIGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgTWljcm9zb2Z0IENvcnBvcmF0aW9uCisgICAKKyAgIE1pY3Jvd2FyZSwgT1MtOSBhcmUgcmVnaXN0ZXJlZCB0cmFkZW1hcmtzIG9mIE1pY3Jvd2FyZSBTeXN0ZW1zCisgICAKKyAgIDkgRGlzY2xhaW1lcgorICAgLS0tLS0tLS0tLS0tCisgICBCZXNpZGUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0aGUgZGVwZW5kZW50IGRpc2NsYWltZXJzIGFuZCBkaXNjbGFpbWVycworICAgY29uY2VybmluZyB0aGUgTGludXgta2VybmVsIGluIHNwZWNpYWwsIHRoaXMgU0NTSS1kcml2ZXIgY29tZXMgd2l0aG91dCBhbnkKKyAgIHdhcnJhbnR5LiBJdHMgZnVuY3Rpb25hbGl0eSBpcyB0ZXN0ZWQgYXMgZ29vZCBhcyBwb3NzaWJsZSBvbiBjZXJ0YWluIAorICAgbWFjaGluZXMgYW5kIGNvbWJpbmF0aW9ucyBvZiBjb21wdXRlciBoYXJkd2FyZSwgd2hpY2ggZG9lcyBub3QgZXhjbHVkZSwKKyAgIHRoYXQgZGF0YWxvc3Mgb3Igc2V2ZXJlIGRhbWFnZSBvZiBoYXJkd2FyZSBpcyBwb3NzaWJsZSB3aGlsZSB1c2luZyB0aGlzCisgICBwYXJ0IG9mIHNvZnR3YXJlIG9uIHNvbWUgYXJiaXRyYXJ5IGNvbXB1dGVyIGhhcmR3YXJlIG9yIGluIGNvbWJpbmF0aW9uIAorICAgd2l0aCBvdGhlciBzb2Z0d2FyZSBwYWNrYWdlcy4gSXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRvIG1ha2UgYmFja3VwCisgICBjb3BpZXMgb2YgeW91ciBkYXRhIGJlZm9yZSB1c2luZyB0aGlzIHNvZnR3YXJlLiBGdXJ0aGVybW9yZSwgcGVyc29uYWwKKyAgIGluanVyaWVzIGJ5IGhhcmR3YXJlIGRlZmVjdHMsIHRoYXQgY291bGQgYmUgY2F1c2VkIGJ5IHRoaXMgU0NTSS1kcml2ZXIgYXJlCisgICBub3QgZXhjbHVkZWQgYW5kIGl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0byBoYW5kbGUgdGhpcyBkcml2ZXIgd2l0aCBhCisgICBtYXhpbXVtIG9mIGNhcmVmdWxuZXNzLgorICAgCisgICBUaGlzIGRyaXZlciBzdXBwb3J0cyBoYXJkd2FyZSwgcHJvZHVjZWQgYnkgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworICAgQ29ycG9yYXRpb24gKElCTSkuCisgICAKKy0tLS0tLQorTWljaGFlbCBMYW5nIAorKGxhbmdhMkBrcGgudW5pLW1haW56LmRlKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL2luMjAwMC50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvaW4yMDAwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGYxMDQwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL2luMjAwMC50eHQKQEAgLTAsMCArMSwyMDIgQEAKKworVVBEQVRFIE5FV1M6IHZlcnNpb24gMS4zMyAtIDI2IEF1ZyA5OAorCisgICBJbnRlcnJ1cHQgbWFuYWdlbWVudCBpbiB0aGlzIGRyaXZlciBoYXMgYmVjb21lLCBvdmVyCisgICB0aW1lLCBpbmNyZWFzaW5nbHkgb2RkIGFuZCBkaWZmaWN1bHQgdG8gZXhwbGFpbiAtIHRoaXMKKyAgIGhhcyBiZWVuIG1vc3RseSBkdWUgdG8gbXkgb3duIG1lbnRhbCBpbmFkZXF1YWNpZXMuIEluCisgICByZWNlbnQga2VybmVscywgaXQgaGFzIGZhaWxlZCB0byBmdW5jdGlvbiBhdCBhbGwgd2hlbgorICAgY29tcGlsZWQgZm9yIFNNUC4gSSd2ZSBmaXhlZCB0aGF0IHByb2JsZW0sIGFuZCBhZnRlcgorICAgdGFraW5nIGEgZnJlc2ggbG9vayBhdCBpbnRlcnJ1cHRzIGluIGdlbmVyYWwsIGdyZWF0bHkKKyAgIHJlZHVjZWQgdGhlIG51bWJlciBvZiBwbGFjZXMgd2hlcmUgdGhleSdyZSBmaWRkbGVkCisgICB3aXRoLiBEb25lIHNvbWUgaGVhdnkgdGVzdGluZyBhbmQgaXQgbG9va3MgdmVyeSBnb29kLgorICAgVGhlIGRyaXZlciBub3cgbWFrZXMgdXNlIG9mIHRoZSBfX2luaXRmdW5jKCkgYW5kCisgICBfX2luaXRkYXRhIG1hY3JvcyB0byBzYXZlIGFib3V0IDRrIG9mIGtlcm5lbCBtZW1vcnkuCisgICBPbmNlIGFnYWluLCB0aGUgc2FtZSBjb2RlIHdvcmtzIGZvciBib3RoIDIuMC54eCBhbmQKKyAgIDIuMS54eCBrZXJuZWxzLgorCitVUERBVEUgTkVXUzogdmVyc2lvbiAxLjMyIC0gMjggTWFyIDk4CisKKyAgIFJlbW92ZWQgdGhlIGNoZWNrIGZvciBsZWdhbCBJTjIwMDAgaGFyZHdhcmUgdmVyc2lvbnM6CisgICBJdCBhcHBlYXJzIHRoYXQgdGhlIGRyaXZlciB3b3JrcyBmaW5lIHdpdGggc2VyaWFsCisgICBFUFJPTXMgKHRoZSA4LXBpbiBjaGlwIHRoYXQgZGVmaW5lcyBoYXJkd2FyZSByZXYpIGFzCisgICBvbGQgYXMgMi4xLCBzbyB3ZSdsbCBhc3N1bWUgdGhhdCBhbGwgY2FyZHMgYXJlIE9LLgorCitVUERBVEUgTkVXUzogdmVyc2lvbiAxLjMxIC0gNiBKdWwgOTcKKworICAgRml4ZWQgYSBidWcgdGhhdCBjYXVzZWQgaW5jb3JyZWN0IFNDU0kgc3RhdHVzIGJ5dGVzIHRvIGJlCisgICByZXR1cm5lZCBmcm9tIGNvbW1hbmRzIHNlbnQgdG8gTFVOJ3MgZ3JlYXRlciB0aGFuIDAuIFRoaXMKKyAgIG1lYW5zIHRoYXQgQ0RST00gY2hhbmdlcnMgd29yayBub3chIEZpeGVkIGEgYnVnIGluIHRoZQorICAgaGFuZGxpbmcgb2YgY29tbWFuZC1saW5lIGFyZ3VtZW50cyB3aGVuIGxvYWRlZCBhcyBhIG1vZHVsZS4KKyAgIEFsc28gcHV0IGFsbCB0aGUgaGVhZGVyIGRhdGEgaW4gaW4yMDAwLmggd2hlcmUgaXQgYmVsb25ncy4KKyAgIFRoZXJlIGFyZSBubyBsb25nZXIgYW55IGRpZmZlcmVuY2VzIGJldHdlZW4gdGhpcyBkcml2ZXIgaW4KKyAgIHRoZSAyLjEueHggc291cmNlIHRyZWUgYW5kIHRoZSAyLjAueHggdHJlZSwgYXMgb2YgMi4wLjMxCisgICBhbmQgMi4xLjQ1IChvciBpcyBpdCAuNDY/KSAtIHRoaXMgbWFrZXMgdGhpbmdzIG11Y2ggZWFzaWVyCisgICBmb3IgbWUuLi4KKworVVBEQVRFIE5FV1M6IHZlcnNpb24gMS4zMCAtIDE0IE9jdCA5NgorCisgICBGaXhlZCBhIGJ1ZyBpbiB0aGUgY29kZSB0aGF0IHNldHMgdGhlIHRyYW5zZmVyIGRpcmVjdGlvbgorICAgYml0IChERVNUSURfRFBEIGluIHRoZSBXRF9ERVNUSU5BVElPTl9JRCByZWdpc3RlcikuIFRoZXJlCisgICBhcmUgcXVpdGUgYSBmZXcgU0NTSSBjb21tYW5kcyB0aGF0IGRvIGEgd3JpdGUtdG8tZGV2aWNlOworICAgbm93IHdlIGRlYWwgd2l0aCBhbGwgb2YgdGhlbSBjb3JyZWN0bHkuIFRoYW5rcyB0byBKb2VyZworICAgRG9yY2hhaW4gZm9yIGNhdGNoaW5nIHRoaXMgb25lLgorCitVUERBVEUgTkVXUzogdmVyc2lvbiAxLjI5IC0gMjQgU2VwIDk2CisKKyAgIFRoZSBtZW1vcnktbWFwcGVkIGhhcmR3YXJlIG9uIHRoZSBjYXJkIGlzIG5vdyBhY2Nlc3NlZCB2aWEKKyAgIHRoZSAncmVhZGIoKScgYW5kICdyZWFkbCgpJyBtYWNyb3MgLSByZXF1aXJlZCBieSB0aGUgbmV3CisgICBtZW1vcnkgbWFuYWdlbWVudCBzY2hlbWUgaW4gdGhlIDIuMS54IGtlcm5lbCBzZXJpZXMuCisgICBBcyBzdWdnZXN0ZWQgYnkgQW5kcmllcyBCcm91d2VyLCAnYmlvc19wYXJhbSgpJyBubyBsb25nZXIKKyAgIGZvcmNlcyBhbiBhcnRpZmljaWFsIDEwMjMgdHJhY2sgbGltaXQgb24gZHJpdmVzLiBBbHNvCisgICByZW1vdmVkIHNvbWUga2x1ZGdlLWNvZGUgbGVmdCBvdmVyIGZyb20gc3RydWdnbGVzIHdpdGgKKyAgIG9sZGVyIChidWdneSkgY29tcGlsZXJzLgorCitVUERBVEUgTkVXUzogdmVyc2lvbiAxLjI4IC0gMDcgTWF5IDk2CisKKyAgIFRpZ2h0ZW5lZCB1cCB0aGUgImludGVycnVwdHMgZW5hYmxlZC9kaXNhYmxlZCIgZGlzY2lwbGluZQorICAgaW4gJ2luMjAwMF9xdWV1ZWNvbW1hbmQoKScgYW5kIG1heWJlIDEgb3IgMiBvdGhlciBwbGFjZXMuCisgICBJIF90aGlua18gaXQgbWF5IGhhdmUgYmVlbiBhIGxpdHRsZSB0b28gbGF4LCBjYXVzaW5nIGFuCisgICBvY2Nhc2lvbmFsIGNyYXNoIGR1cmluZyBmdWxsIG1vb24uIEEgZnVsbHkgZnVuY3Rpb25hbAorICAgL3Byb2MgaW50ZXJmYWNlIGlzIG5vdyBpbiBwbGFjZSAtIGlmIHlvdSB3YW50IHRvIHBsYXkKKyAgIHdpdGggaXQsIHN0YXJ0IGJ5IGRvaW5nICdjYXQgL3Byb2Mvc2NzaS9pbjIwMDAvMCcuIFlvdQorICAgY2FuIGFsc28gdXNlIGl0IHRvIGNoYW5nZSBhIGZldyBydW4tdGltZSBwYXJhbWV0ZXJzIG9uCisgICB0aGUgZmx5LCBidXQgaXQncyBtb3N0bHkgZm9yIGRlYnVnZ2luZy4gVGhlIGN1cmlvdXMKKyAgIHNob3VsZCB0YWtlIGEgZ29vZCBsb29rIGF0ICdpbjIwMDBfcHJvY19pbmZvKCknIGluIHRoZQorICAgaW4yMDAwLmMgZmlsZSB0byBnZXQgYW4gdW5kZXJzdGFuZGluZyBvZiB3aGF0IGl0J3MgYWxsCisgICBhYm91dDsgSSBmaWd1cmUgdGhhdCBwZW9wbGUgd2hvIGFyZSByZWFsbHkgaW50byBpdCB3aWxsCisgICB3YW50IHRvIGFkZCBmZWF0dXJlcyBzdWl0ZWQgdG8gdGhlaXIgb3duIG5lZWRzLi4uCisgICBBbHNvLCBzeW5jIGlzIG5vdyBESVNBQkxFRCBieSBkZWZhdWx0LgorCitVUERBVEUgTkVXUzogdmVyc2lvbiAxLjI3IC0gMTAgQXByIDk2CisKKyAgIEZpeGVkIGEgd2VsbC1oaWRkZW4gYnVnIGluIHRoZSBhZGFwdGl2ZS1kaXNjb25uZWN0IGNvZGUKKyAgIHRoYXQgd291bGQgc2hvdyB1cCBldmVyeSBub3cgYW5kIHRoZW4gZHVyaW5nIGV4dHJlbWUKKyAgIGhlYXZ5IGxvYWRzIGludm9sdmluZyAyIG9yIG1vcmUgc2ltdWx0YW5lb3VzbHkgYWN0aXZlCisgICBkZXZpY2VzLiBUaGFua3MgdG8gSm9lIE1hY2sgZm9yIGtlZXBpbmcgbXkgbm9zZSB0byB0aGUKKyAgIGdyaW5kc3RvbmUgb24gdGhpcyBvbmUuCisKK1VQREFURSBORVdTOiB2ZXJzaW9uIDEuMjYgLSAwNyBNYXIgOTYKKworICAgMS4yNSBoYWQgYSBuYXN0eSBidWcgdGhhdCBiaXQgcGVvcGxlIHdpdGggc3dhcCBwYXJ0aXRpb25zCisgICBhbmQgdGFwZSBkcml2ZXMuIEFsc28sIGluIG15IGF0dGVtcHQgdG8gZ3Vlc3MgbXkgd2F5CisgICB0aHJvdWdoIEludGVsIGFzc2VtYmx5IGxhbmd1YWdlLCBJIG1hZGUgYW4gZXJyb3IgaW4gdGhlCisgICBpbmxpbmUgY29kZSBmb3IgSU8gd3JpdGVzLiBNYWRlIGEgZmV3IG90aGVyIGNoYW5nZXMgYW5kCisgICByZXBhaXJzIC0gdGhpcyB2ZXJzaW9uIChmaW5nZXJzIGNyb3NzZWQpIHNob3VsZCB3b3JrIHdlbGwuCisKK1VQREFURSBORVdTOiB2ZXJzaW9uIDEuMjUgLSAwNSBNYXIgOTYKKworICAgS2VybmVsIDEuMy43MCBpbnRlcnJ1cHQgbW9kcyBhZGRlZDsgb2xkIGtlcm5lbHMgc3RpbGwgT0suCisgICBCaWcgaGVscCBmcm9tIEJpbGwgRWFybmVzdCBhbmQgRGF2aWQgV2lsbG1vcmUgb24gc3BlZWQKKyAgIHRlc3RpbmcgYW5kIG9wdGltaXppbmc6IEkgdGhpbmsgdGhlcmUncyBhIHJlYWwgaW1wcm92ZW1lbnQKKyAgIGluIHRoaXMgYXJlYS4KKyAgIE5ldyEgVXNlci1mcmllbmRseSBjb21tYW5kLWxpbmUgaW50ZXJmYWNlIGZvciBMSUxPIGFuZAorICAgbW9kdWxlIGxvYWRpbmcgLSB0aGUgb2xkIG1ldGhvZCBpcyBnb25lLCBzbyB5b3UnbGwgbmVlZAorICAgdG8gcmVhZCB0aGUgY29tbWVudHMgZm9yICdzZXR1cF9zdHJpbmdzJyBuZWFyIHRoZSB0b3AKKyAgIG9mIGluMjAwMC5jLiBGb3IgcGVvcGxlIHdpdGggQ0RST00ncyBvciBvdGhlciBkZXZpY2VzCisgICB0aGF0IGhhdmUgYSB0b3VnaCB0aW1lIHdpdGggc3luYyBuZWdvdGlhdGlvbiwgeW91IGNhbgorICAgbm93IHNlbGVjdGl2ZWx5IGRpc2FibGUgc3luYyBvbiBpbmRpdmlkdWFsIGRldmljZXMgLQorICAgc2VhcmNoIGZvciB0aGUgJ25vc3luYycga2V5d29yZCBpbiB0aGUgY29tbWFuZC1saW5lCisgICBjb21tZW50cy4gU29tZSBvZiB5b3UgZGlzYWJsZSB0aGUgQklPUyBvbiB0aGUgY2FyZCwgd2hpY2gKKyAgIGNhdXNlZCB0aGUgYXV0by1kZXRlY3QgZnVuY3Rpb24gdG8gZmFpbDsgdGhlcmUgaXMgbm93IGEKKyAgIGNvbW1hbmQtbGluZSBvcHRpb24gdG8gZm9yY2UgZGV0ZWN0aW9uIG9mIGEgUk9NLWxlc3MgY2FyZC4KKworVVBEQVRFIE5FV1M6IHZlcnNpb24gMS4yNGEgLSAyNCBGZWIgOTYKKworICAgVGhlcmUgd2FzIGEgYnVnIGluIHRoZSBzeW5jaHJvbm91cyB0cmFuc2ZlciBjb2RlLiBPbmx5CisgICBhIGZldyBwZW9wbGUgZG93bmxvYWRlZCBiZWZvcmUgSSBjYXVnaHQgaXQgLSBjb3VsZCBoYXZlCisgICBiZWVuIHdvcnNlLgorCitVUERBVEUgTkVXUzogdmVyc2lvbiAxLjI0IC0gMjMgRmViIDk2CisKKyAgIExvdHMgb2YgZ29vZCBjaGFuZ2VzLiBBZHZpY2UgZnJvbSBCaWxsIEVhcm5lc3QgcmVzdWx0ZWQKKyAgIGluIG11Y2ggYmV0dGVyIGRldGVjdGlvbiBvZiBjYXJkcywgbW9yZSBlZmZpY2llbnQgdXNhZ2UKKyAgIG9mIHRoZSBmaWZvLCBhbmQgKGhvcGVmdWxseSkgZmFzdGVyIGRhdGEgdHJhbnNmZXJzLiBUaGUKKyAgIGp1cnkgaXMgc3RpbGwgb3V0IG9uIHNwZWVkIC0gSSBob3BlIGl0J3MgaW1wcm92ZWQgc29tZS4KKyAgIE9uZSBuaWZ0eSBuZXcgZmVhdHVyZSBpcyBhIGNvb2wgd2F5IG9mIGRvaW5nIGRpc2Nvbm5lY3QvCisgICByZXNlbGVjdC4gVGhlIGRyaXZlciBkZWZhdWx0cyB0byB3aGF0IEknbSBjYWxsaW5nCisgICAnYWRhcHRpdmUgZGlzY29ubmVjdCcgLSBtZWFuaW5nIHRoYXQgZWFjaCBjb21tYW5kIGlzCisgICBldmFsdWF0ZWQgaW5kaXZpZHVhbGx5IGFzIHRvIHdoZXRoZXIgb3Igbm90IGl0IHNob3VsZCBiZQorICAgcnVuIHdpdGggdGhlIG9wdGlvbiB0byBkaXNjb25uZWN0L3Jlc2VsZWN0IChpZiB0aGUgZGV2aWNlCisgICBjaG9vc2VzKSwgb3IgYXMgYSAiU0NTSS1idXMtaG9nIi4gV2hlbiBzZXZlcmFsIGRldmljZXMKKyAgIGFyZSBvcGVyYXRpbmcgc2ltdWx0YW5lb3VzbHksIGRpc2Nvbm5lY3RzIGFyZSB1c3VhbGx5IGFuCisgICBhZHZhbnRhZ2UuIEluIGEgc2luZ2xlIGRldmljZSBzeXN0ZW0sIG9yIGlmIG9ubHkgMSBkZXZpY2UKKyAgIGlzIGJlaW5nIGFjY2Vzc2VkLCB0cmFuc2ZlcnMgdXN1YWxseSBnbyBmYXN0ZXIgaWYgZGlzY29ubmVjdHMKKyAgIGFyZSBub3QgYWxsb3dlZC4KKworCisKK1RoZSBkZWZhdWx0IGFyZ3VtZW50cyAoeW91IGdldCB0aGVzZSB3aGVuIHlvdSBkb24ndCBnaXZlIGFuICdpbjIwMDAnCitjb21tYW5kLWxpbmUgYXJndW1lbnQsIG9yIHlvdSBnaXZlIGEgYmxhbmsgYXJndW1lbnQpIHdpbGwgY2F1c2UKK3RoZSBkcml2ZXIgdG8gZG8gYWRhcHRpdmUgZGlzY29ubmVjdCwgc3luY2hyb25vdXMgdHJhbnNmZXJzLCBhbmQgYQorbWluaW11bSBvZiBkZWJ1ZyBtZXNzYWdlcy4gSWYgeW91IHdhbnQgdG8gZm9vbCB3aXRoIHRoZSBvcHRpb25zLAorc2VhcmNoIGZvciAnc2V0dXBfc3RyaW5ncycgbmVhciB0aGUgdG9wIG9mIHRoZSBpbjIwMDAuYyBmaWxlIGFuZAorY2hlY2sgdGhlICdob3N0ZGF0YS0+YXJncycgc2VjdGlvbiBpbiBpbjIwMDAuaCAtIGJ1dCBiZSB3YXJuZWQhIE5vdAorZXZlcnl0aGluZyBpcyB3b3JraW5nIHlldCAoc29tZSB0aGluZ3Mgd2lsbCBuZXZlciB3b3JrLCBwcm9iYWJseSkuCitJIGJlbGlldmUgdGhhdCBkaXNhYmxpbmcgZGlzY29ubmVjdHMgKERJU19ORVZFUikgd2lsbCBhbGxvdyB5b3UKK3RvIGNob29zZSBhIExFVkVMMiB2YWx1ZSBoaWdoZXIgdGhhbiAnTDJfQkFTSUMnLCBidXQgSSBoYXZlbid0CitzcGVudCBhIGxvdCBvZiB0aW1lIHRlc3RpbmcgdGhpcy4gWW91IG1pZ2h0IHRyeSAnRU5BQkxFX0NMVVNURVJJTkcnCit0byBzZWUgd2hhdCBoYXBwZW5zOiBteSB0ZXN0cyBzaG93ZWQgbGl0dGxlIGRpZmZlcmVuY2UgZWl0aGVyIHdheS4KK1RoZXJlJ3MgYWxzbyBhIGRlZmluZSBjYWxsZWQgJ0RFRkFVTFRfU1hfUEVSJzsgdGhpcyBzZXRzIHRoZSBkYXRhCit0cmFuc2ZlciBzcGVlZCBmb3IgdGhlIGFzeW5jaHJvbm91cyBtb2RlLiBJJ3ZlIHB1dCBpdCBhdCA1MDAgbnMKK2Rlc3BpdGUgdGhlIGZhY3QgdGhhdCB0aGUgY2FyZCBjb3VsZCBoYW5kbGUgc2V0dGluZ3Mgb2YgMzc2IG9yCisyNTIsIGJlY2F1c2UgaGlnaGVyIHNwZWVkcyBtYXkgYmUgYSBwcm9ibGVtIHdpdGggcG9vciBxdWFsaXR5CitjYWJsZXMgb3IgaW1wcm9wZXIgdGVybWluYXRpb247IDUwMCBucyBpcyBhIGNvbXByb21pc2UuIFlvdSBjYW4KK2Nob29zZSB5b3VyIG93biBkZWZhdWx0IHRocm91Z2ggdGhlIGNvbW1hbmQtbGluZSB3aXRoIHRoZQorJ3BlcmlvZCcga2V5d29yZC4KKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoqKioqKioqKioqICBESVAgc3dpdGNoIHNldHRpbmdzICAqKioqKioqKioqKioqKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIHN3MS0xIHN3MS0yICAgIEJJT1MgYWRkcmVzcyAoaGV4KQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBvZmYgICBvZmYgICAgIEM4MDAwIC0gQ0JGRjAKKyAgICBvbiAgICBvZmYgICAgIEQ4MDAwIC0gREJGRjAKKyAgICBvZmYgICBvbiAgICAgIEQwMDAwIC0gRDNGRjAKKyAgICBvbiAgICBvbiAgICAgIEJJT1MgZGlzYWJsZWQKKworICAgc3cxLTMgc3cxLTQgICAgSU8gcG9ydCBhZGRyZXNzIChoZXgpCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBvZmYgICBvZmYgICAgIDIyMCAtIDIyRgorICAgIG9uICAgIG9mZiAgICAgMjAwIC0gMjBGCisgICAgb2ZmICAgb24gICAgICAxMTAgLSAxMUYKKyAgICBvbiAgICBvbiAgICAgIDEwMCAtIDEwRgorCisgICBzdzEtNSBzdzEtNiBzdzEtNyAgICBJbnRlcnJ1cHQKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIG9mZiAgIG9mZiAgIG9mZiAgICAgMTUKKyAgICBvZmYgICBvbiAgICBvZmYgICAgIDE0CisgICAgb2ZmICAgb2ZmICAgb24gICAgICAxMQorICAgIG9mZiAgIG9uICAgIG9uICAgICAgMTAKKyAgICBvbiAgICAtICAgICAtICAgICAgIGRpc2FibGVkCisKKyAgIHN3MS04IGZ1bmN0aW9uIGRlcGVuZHMgb24gQklPUyB2ZXJzaW9uLiBJbiBlYXJsaWVyIHZlcnNpb25zIHRoaXMKKyAgIGNvbnRyb2xsZWQgc3luY2hyb25vdXMgZGF0YSB0cmFuc2ZlciBzdXBwb3J0IGZvciBNU0RPUzoKKyAgICAgIG9mZiA9IGRpc2FibGVkCisgICAgICBvbiAgPSBlbmFibGVkCisgICBJbiBsYXRlciBST01zIChzdGFydGluZyB3aXRoIDAxLjMgaW4gQXByaWwgMTk5NCkgc3cxLTggY29udHJvbHMKKyAgIHRoZSAiZ3JlYXRlciB0aGFuIDIgZGlzayBkcml2ZSIgZmVhdHVyZSB0aGF0IGZpcnN0IGFwcGVhcmVkIGluCisgICBNU0RPUyA1LjAgKGlnbm9yZWQgYnkgTGludXgpOgorICAgICAgb2ZmID0gMiBkcml2ZXMgbWF4aW11bQorICAgICAgb24gID0gNyBkcml2ZXMgbWF4aW11bQorCisgICBzdzEtOSAgICBGbG9wcHkgY29udHJvbGxlcgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBvZmYgICAgIGRpc2FibGVkCisgICAgb24gICAgICBlbmFibGVkCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBJIHNob3VsZCBtZW50aW9uIHRoYXQgRHJldyBFY2toYXJkdCdzICdHZW5lcmljIE5DUjUzODAnIHNvdXJjZXMKKyAgIHdlcmUgbXkgbWFpbiBpbnNwaXJhdGlvbiwgd2l0aCBsb3RzIG9mIHJlZmVyZW5jZSB0byB0aGUgSU4yMDAwCisgICBkcml2ZXIgY3VycmVudGx5IGRpc3RyaWJ1dGVkIGluIHRoZSBrZXJuZWwgc291cmNlLiBJIGFsc28gb3dlCisgICBtdWNoIHRvIGEgZHJpdmVyIHdyaXR0ZW4gYnkgSGFtaXNoIE1hY2RvbmFsZCBmb3IgTGludXgtbTY4ayghKS4KKyAgIEFuZCB0byBFcmljIFdyaWdodCBmb3IgYmVpbmcgYW4gQUxQSEEgZ3VpbmVhIHBpZy4gQW5kIHRvIEJpbGwKKyAgIEVhcm5lc3QgZm9yIDIgdG9ucyBvZiBncmVhdCBpbnB1dCBhbmQgaW5mb3JtYXRpb24uIEFuZCB0byBEYXZpZAorICAgV2lsbG1vcmUgZm9yIGV4dGVuc2l2ZSAnYm9ubmllJyB0ZXN0aW5nLiBBbmQgdG8gSm9lIE1hY2sgZm9yCisgICBjb250aW51YWwgdGVzdGluZyBhbmQgZmVlZGJhY2suCisKKworICAgICAgICAgICAgSm9obiBTaGlmZmxldHQgICAganNoaWZmbGVAbmV0Y29tLmNvbQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvbWVnYXJhaWQudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL21lZ2FyYWlkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjg2NGMwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL21lZ2FyYWlkLnR4dApAQCAtMCwwICsxLDcwIEBACisJCQlOb3RlcyBvbiBNYW5hZ2VtZW50IE1vZHVsZQorCQkJfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworT3ZlcnZpZXc6CistLS0tLS0tLQorCitEaWZmZXJlbnQgY2xhc3NlcyBvZiBjb250cm9sbGVycyBmcm9tIExTSSBMb2dpYywgYWNjZXB0IGFuZCByZXNwb25kIHRvIHRoZQordXNlciBhcHBsaWNhdGlvbnMgaW4gYSBzaW1pbGFyIHdheS4gVGhleSB1bmRlcnN0YW5kIHRoZSBzYW1lIGZpcm13YXJlIGNvbnRyb2wKK2NvbW1hbmRzLiBGdXJ0aGVybW9yZSwgdGhlIGFwcGxpY2F0aW9ucyBhbHNvIGNhbiB0cmVhdCBkaWZmZXJlbnQgY2xhc3NlcyBvZgordGhlIGNvbnRyb2xsZXJzIHVuaWZvcm1seS4gSGVuY2UgaXQgaXMgbG9naWNhbCB0byBoYXZlIGEgc2luZ2xlIG1vZHVsZSB0aGF0CitpbnRlcmVmYWNlcyB3aXRoIHRoZSBhcHBsaWNhdGlvbnMgb24gb25lIHNpZGUgYW5kIGFsbCB0aGUgbG93IGxldmVsIGRyaXZlcnMKK29uIHRoZSBvdGhlci4KKworVGhlIGFkdmFudGFnZXMsIHRob3VnaCBvYnZpb3VzLCBhcmUgbGlzdGVkIGZvciBjb21wbGV0ZW5lc3M6CisKKwlpLglBdm9pZCBkdXBsaWNhdGUgY29kZSBmcm9tIHRoZSBsb3cgbGV2ZWwgZHJpdmVycy4KKwlpaS4JVW5idXJkZW4gdGhlIGxvdyBsZXZlbCBkcml2ZXJzIGZyb20gaGF2aW5nIHRvIGV4cG9ydCB0aGUKKwkJY2hhcmFjdGVyIG5vZGUgZGV2aWNlIGFuZCByZWxhdGVkIGhhbmRsaW5nLgorCWlpaS4JSW1wbGVtZW50IGFueSBwb2xpY3kgbWVjaGFuaXNtcyBpbiBvbmUgcGxhY2UuCisJaXYuCUFwcGxpY2F0aW9ucyBoYXZlIHRvIGludGVyZmFjZSB3aXRoIG9ubHkgbW9kdWxlIGluc3RlYWQgb2YKKwkJbXVsdGlwbGUgbG93IGxldmVsIGRyaXZlcnMuCisKK0N1cnJlbnRseSB0aGlzIG1vZHVsZSAoY2FsbGVkIENvbW1vbiBNYW5hZ2VtZW50IE1vZHVsZSkgaXMgdXNlZCBvbmx5IHRvIGlzc3VlCitpb2N0bCBjb21tYW5kcy4gQnV0IHRoaXMgbW9kdWxlIGlzIGVudmlzaW9uZWQgdG8gaGFuZGxlIGFsbCB1c2VyIHNwYWNlIGxldmVsCitpbnRlcmFjdGlvbnMuIFNvIGFueSAncHJvYycsICdzeXNmcycgaW1wbGVtZW50YXRpb25zIHdpbGwgYmUgbG9jYWxpemVkIGluIHRoaXMKK2NvbW1vbiBtb2R1bGUuCisKK0NyZWRpdHM6CistLS0tLS0tCisKKyJTaGFyZWQgY29kZSBpbiBhIHRoaXJkIG1vZHVsZSwgYSAibGlicmFyeSBtb2R1bGUiLCBpcyBhbiBhY2NlcHRhYmxlCitzb2x1dGlvbi4gbW9kcHJvYmUgYXV0b21hdGljYWxseSBsb2FkcyBkZXBlbmRlbnQgbW9kdWxlcywgc28gdXNlcnMKK3J1bm5pbmcgIm1vZHByb2JlIGRyaXZlcjEiIG9yICJtb2Rwcm9iZSBkcml2ZXIyIiB3b3VsZCBhdXRvbWF0aWNhbGx5Citsb2FkIHRoZSBzaGFyZWQgbGlicmFyeSBtb2R1bGUuIgorCisJCS0gSmVmZiBHYXJ6aWsgKGpnYXJ6aWtAcG9ib3guY29tKSwgMDIuMjUuMjAwNCBMS01MCisKKyJBcyBKZWZmIGhpbnRlZCwgaWYgeW91ciB1c2Vyc3BhY2U8LT5kcml2ZXIgQVBJIGlzIGNvbnNpc3RlbnQgYmV0d2VlbgoreW91ciBuZXcgTVBULWJhc2VkIFJBSUQgY29udHJvbGxlcnMgYW5kIHlvdXIgZXhpc3RpbmcgbWVnYXJhaWQgZHJpdmVyLAordGhlbiBwZXJoYXBzIHlvdSBuZWVkIGEgc2luZ2xlIHNtYWxsIGhlbHBlciBtb2R1bGUgKGxzaWlvY3RsIG9yIHNvbWUKK2JldHRlciBuYW1lKSwgbG9hZGVkIGJ5IGJvdGggbXB0cmFpZCBhbmQgbWVnYXJhaWQgYXV0b21hdGljYWxseSwgd2hpY2gKK2hhbmRsZXMgcmVnaXN0ZXJpbmcgdGhlIC9kZXYvbWVnYXJhaWQgbm9kZSBkeW5hbWljYWxseS4gSW4gdGhpcyBjYXNlLAorYm90aCBtcHRyYWlkIGFuZCBtZWdhcmFpZCB3b3VsZCByZWdpc3RlciB3aXRoIGxzaWlvY3RsIGZvciBlYWNoCithZGFwdGVyIGRpc2NvdmVyZWQsIGFuZCBsc2lpb2N0bCB3b3VsZCBlc3NlbnRpYWxseSBiZSBhIHN3aXRjaCwKK3JlZGlyZWN0aW5nIHVzZXJzcGFjZSB0b29sIGlvY3RscyB0byB0aGUgYXBwcm9wcmlhdGUgZHJpdmVyLiIKKworCQktIE1hdHQgRG9tc2NoLCAoTWF0dF9Eb21zY2hAZGVsbC5jb20pLCAwMi4yNS4yMDA0IExLTUwKKworRGVzaWduOgorLS0tLS0tCisKK1RoZSBDb21tb24gTWFuYWdlbWVudCBNb2R1bGUgaXMgaW1wbGVtZW50ZWQgaW4gbWVnYXJhaWRfbW0uW2NoXSBmaWxlcy4gVGhpcworbW9kdWxlIGFjdHMgYXMgYSByZWdpc3RyeSBmb3IgbG93IGxldmVsIGhiYSBkcml2ZXJzLiBUaGUgbG93IGxldmVsIGRyaXZlcnMKKyhjdXJyZW50bHkgb25seSBtZWdhcmFpZCkgcmVnaXN0ZXIgZWFjaCBjb250cm9sbGVyIHdpdGggdGhlIGNvbW1vbiBtb2R1bGUuCisKK1RoZSBhcHBsaWNhdGlvbnMgaW50ZXJmYWNlIHdpdGggdGhlIGNvbW1vbiBtb2R1bGUgdmlhIHRoZSBjaGFyYWN0ZXIgZGV2aWNlCitub2RlIGV4cG9ydGVkIGJ5IHRoZSBtb2R1bGUuCisKK1RoZSBsb3dlciBsZXZlbCBkcml2ZXJzIG5vdyB1bmRlcnN0YW5kIG9ubHkgYSBuZXcgaW1wcm92ZWQgaW9jdGwgcGFja2V0IGNhbGxlZAordWlvY190LiBUaGUgbWFuYWdlbWVudCBtb2R1bGUgY29udmVydHMgdGhlIG9sZGVyIGlvY3RsIHBhY2tldHMgZnJvbSB0aGUgb2xkZXIKK2FwcGxpY2F0aW9ucyBpbnRvIHVpb2NfdC4gQWZ0ZXIgZHJpdmVyIGhhbmRsZXMgdGhlIHVpb2NfdCwgdGhlIGNvbW1vbiBtb2R1bGUKK3dpbGwgY29udmVydCB0aGF0IGJhY2sgaW50byB0aGUgb2xkIGZvcm1hdCBiZWZvcmUgcmV0dXJuaW5nIHRvIGFwcGxpY2F0aW9ucy4KKworQXMgbmV3IGFwcGxpY2F0aW9ucyBldm9sdmUgYW5kIHJlcGxhY2UgdGhlIG9sZCBvbmVzLCB0aGUgb2xkIHBhY2tldCBmb3JtYXQgCit3aWxsIGJlIHJldGlyZWQuCisKK0NvbW1vbiBtb2R1bGUgZGVkaWNhdGVzIG9uZSB1aW9jX3QgcGFja2V0IHRvIGVhY2ggY29udHJvbGxlciByZWdpc3RlcmVkLiBUaGlzCitjYW4gZWFzaWx5IGJlIG1vcmUgdGhhbiBvbmUuIEJ1dCBzaW5jZSBtZWdhcmFpZCBpcyB0aGUgb25seSBsb3cgbGV2ZWwgZHJpdmVyCit0b2RheSwgYW5kIGl0IGNhbiBoYW5kbGUgb25seSBvbmUgaW9jdGwsIHRoZXJlIGlzIG5vIHJlYXNvbiB0byBoYXZlIG1vcmUuIEJ1dAorYXMgbmV3IGNvbnRyb2xsZXIgY2xhc3NlcyBnZXQgYWRkZWQsIHRoaXMgd2lsbCBiZSB0dW5lZCBhcHByb3ByaWF0ZWx5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL25jcjUzYzd4eC50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvbmNyNTNjN3h4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWU5NTUyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL25jcjUzYzd4eC50eHQKQEAgLTAsMCArMSw0MCBAQAorUkVBRE1FIGZvciBXYXJwRW5naW5lL0E0MDAwVC9BNDA5MSBTQ1NJIGtlcm5lbHMuCisKK1VzZSB0aGUgZm9sbG93aW5nIG9wdGlvbnMgdG8gZGlzYWJsZSBvcHRpb25zIGluIHRoZSBTQ1NJIGRyaXZlci4KKworVXNpbmcgYW1pYm9vdCBmb3IgZXhhbXBsZS4uLi4uCisKK1RvIGRpc2FibGUgU3luY2hyb25vdXMgTmVnb3RpYXRpb24uLi4uCisKKwlhbWlib290IC1rIGtlcm5lbCA1M2M3eHg9bm9zeW5jOjAJCisKK1RvIGRpc2FibGUgRGlzY29ubmVjdGlvbi4uLi4KKwkKKwlhbWlib290IC1rIGtlcm5lbCA1M2M3eHg9bm9kaXNjb25uZWN0OjAKKworVG8gZGlzYWJsZSBjZXJ0YWluIFNDU0kgZGV2aWNlcy4uLgorCisJYW1pYm9vdCAtayBrZXJuZWwgNTNjN3h4PXZhbGlkaWRzOjB4M0YKKworCXRoaXMgYWxsb3dzIG9ubHkgZGV2aWNlIElEJ3MgMCwxLDIsMyw0IGFuZCA1IGZvciBsaW51eCB0byBoYW5kbGUuCisJKHRoaXMgaXMgYSBiaXRtYXNrZWQgZmllbGQgLSBpLmUuIGVhY2ggYml0IHJlcHJlc2VudHMgYSBTQ1NJIElEKQorCitUaGVzZSBjb21tYW5kcyB3b3JrIG9uIGEgcGVyIGNvbnRyb2xsZXIgYmFzaXMgYW5kIHVzZSB0aGUgb3B0aW9uICduZXh0JyB0bworbW92ZSB0byB0aGUgbmV4dCBjb250cm9sbGVyIGluIHRoZSBzeXN0ZW0uCisKK2UuZy4KKwlhbWlib290IC1rIGtlcm5lbCA1M2M3eHg9bm9kaXNjb25uZWN0OjAsbmV4dCxub3N5bmM6MAorCisJdGhpcyB1c2VzIE5vIERpc2Nvbm5lY3Rpb24gb24gdGhlIGZpcnN0IGNvbnRyb2xsZXIgYW5kIEFzeW5jaHJvbm91cworCVNDU0kgb24gdGhlIHNlY29uZCBjb250cm9sbGVyLgorCitLbm93biBJc3N1ZXM6CisKK1R3byBkZXZpY2VzIGFyZSBrbm93biBub3QgdG8gZnVuY3Rpb24gd2l0aCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBvZiB1c2luZworc3luY2hyb25vdXMgU0NTSS4gVGhlc2UgYXJlIHRoZSBBcmNoaXZlIFZpcGVyIDE1MCBUYXBlIERyaXZlIGFuZCB0aGUgCitTeVF1ZXN0IFNRNTU1IHJlbW92ZWFibGUgaGFyZCBkcml2ZS4gV2hlbiB1c2luZyB0aGVzZSBkZXZpY2VzIG9uIGEgY29udHJvbGxlcgordXNlIHRoZSAnbm9zeW5jOjAnIG9wdGlvbi4KKworUGxlYXNlIHRyeSB0aGVzZSBvcHRpb25zIGFuZCBwb3N0IGFueSBwcm9ibGVtcy9zdWNjZXNzZXMgdG8gbWUuCisKK0FsYW4gSG91cmloYW5lIDxhbGFuaEBmYWlybGl0ZS5kZW1vbi5jby51az4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9uY3I1M2M4eHgudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL25jcjUzYzh4eC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIyZDJhYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9uY3I1M2M4eHgudHh0CkBAIC0wLDAgKzEsMTg1NCBAQAorVGhlIExpbnV4IE5DUjUzQzhYWC9TWU01M0M4WFggZHJpdmVycyBSRUFETUUgZmlsZQorCitXcml0dGVuIGJ5IEdlcmFyZCBSb3VkaWVyIDxncm91ZGllckBmcmVlLmZyPgorMjEgUnVlIENhcm5vdAorOTUxNzAgREVVSUwgTEEgQkFSUkUgLSBGUkFOQ0UKKworMjkgTWF5IDE5OTkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMS4gIEludHJvZHVjdGlvbgorMi4gIFN1cHBvcnRlZCBjaGlwcyBhbmQgU0NTSSBmZWF0dXJlcworMy4gIEFkdmFudGFnZXMgb2YgdGhlIGVuaGFuY2VkIDg5NiBkcml2ZXIKKyAgICAgIDMuMSBPcHRpbWl6ZWQgU0NTSSBTQ1JJUFRTCisgICAgICAzLjIgTmV3IGZlYXR1cmVzIG9mIHRoZSBTWU01M0M4OTYgKDY0IGJpdCBQQ0kgZHVhbCBMVkQgU0NTSSBjb250cm9sbGVyKQorNC4gIE1lbW9yeSBtYXBwZWQgSS9PIHZlcnN1cyBub3JtYWwgSS9PCis1LiAgVGFnZ2VkIGNvbW1hbmQgcXVldWVpbmcKKzYuICBQYXJpdHkgY2hlY2tpbmcKKzcuICBQcm9maWxpbmcgaW5mb3JtYXRpb24KKzguICBDb250cm9sIGNvbW1hbmRzCisgICAgICA4LjEgIFNldCBtaW5pbXVtIHN5bmNocm9ub3VzIHBlcmlvZAorICAgICAgOC4yICBTZXQgd2lkZSBzaXplCisgICAgICA4LjMgIFNldCBtYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IHRhZ2dlZCBjb21tYW5kcworICAgICAgOC40ICBTZXQgb3JkZXIgdHlwZSBmb3IgdGFnZ2VkIGNvbW1hbmQKKyAgICAgIDguNSAgU2V0IGRlYnVnIG1vZGUKKyAgICAgIDguNiAgQ2xlYXIgcHJvZmlsZSBjb3VudGVycworICAgICAgOC43ICBTZXQgZmxhZyAobm9fZGlzYykKKyAgICAgIDguOCAgU2V0IHZlcmJvc2UgbGV2ZWwKKyAgICAgIDguOSAgUmVzZXQgYWxsIGxvZ2ljYWwgdW5pdHMgb2YgYSB0YXJnZXQKKyAgICAgIDguMTAgQWJvcnQgYWxsIHRhc2tzIG9mIGFsbCBsb2dpY2FsIHVuaXRzIG9mIGEgdGFyZ2V0Cis5LiAgQ29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzCisxMC4gQm9vdCBzZXR1cCBjb21tYW5kcworICAgICAgMTAuMSBTeW50YXgKKyAgICAgIDEwLjIgQXZhaWxhYmxlIGFyZ3VtZW50cworICAgICAgICAgICAgIDEwLjIuMSAgTWFzdGVyIHBhcml0eSBjaGVja2luZworICAgICAgICAgICAgIDEwLjIuMiAgU2NzaSBwYXJpdHkgY2hlY2tpbmcKKyAgICAgICAgICAgICAxMC4yLjMgIFNjc2kgZGlzY29ubmVjdGlvbnMKKyAgICAgICAgICAgICAxMC4yLjQgIFNwZWNpYWwgZmVhdHVyZXMKKyAgICAgICAgICAgICAxMC4yLjUgIFVsdHJhIFNDU0kgc3VwcG9ydAorICAgICAgICAgICAgIDEwLjIuNiAgRGVmYXVsdCBudW1iZXIgb2YgdGFnZ2VkIGNvbW1hbmRzCisgICAgICAgICAgICAgMTAuMi43ICBEZWZhdWx0IHN5bmNocm9ub3VzIHBlcmlvZCBmYWN0b3IKKyAgICAgICAgICAgICAxMC4yLjggIE5lZ290aWF0ZSBzeW5jaHJvbm91cyB3aXRoIGFsbCBkZXZpY2VzCisgICAgICAgICAgICAgMTAuMi45ICBWZXJib3NpdHkgbGV2ZWwKKyAgICAgICAgICAgICAxMC4yLjEwIERlYnVnIG1vZGUKKyAgICAgICAgICAgICAxMC4yLjExIEJ1cnN0IG1heAorICAgICAgICAgICAgIDEwLjIuMTIgTEVEIHN1cHBvcnQKKyAgICAgICAgICAgICAxMC4yLjEzIE1heCB3aWRlCisgICAgICAgICAgICAgMTAuMi4xNCBEaWZmZXJlbnRpYWwgbW9kZQorICAgICAgICAgICAgIDEwLjIuMTUgSVJRIG1vZGUKKyAgICAgICAgICAgICAxMC4yLjE2IFJldmVyc2UgcHJvYmUKKyAgICAgICAgICAgICAxMC4yLjE3IEZpeCB1cCBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZQorICAgICAgICAgICAgIDEwLjIuMTggU2VyaWFsIE5WUkFNCisgICAgICAgICAgICAgMTAuMi4xOSBDaGVjayBTQ1NJIEJVUyAKKyAgICAgICAgICAgICAxMC4yLjIwIEV4Y2x1ZGUgYSBob3N0IGZyb20gYmVpbmcgYXR0YWNoZWQKKyAgICAgICAgICAgICAxMC4yLjIxIFN1Z2dlc3QgYSBkZWZhdWx0IFNDU0kgaWQgZm9yIGhvc3RzCisgICAgICAgICAgICAgMTAuMi4yMiBFbmFibGUgdXNlIG9mIElNTUVESUFURSBBUkJJVFJBVElPTgorICAgICAgMTAuMyBBZHZpc2VkIGJvb3Qgc2V0dXAgY29tbWFuZHMKKyAgICAgIDEwLjQgUENJIGNvbmZpZ3VyYXRpb24gZml4LXVwIGJvb3Qgb3B0aW9uCisgICAgICAxMC41IFNlcmlhbCBOVlJBTSBzdXBwb3J0IGJvb3Qgb3B0aW9uCisgICAgICAxMC42IFNDU0kgQlVTIGNoZWNraW5nIGJvb3Qgb3B0aW9uCisgICAgICAxMC43IElNTUVESUFURSBBUkJJVFJBVElPTiBib290IG9wdGlvbgorMTEuIFNvbWUgY29uc3RhbnRzIGFuZCBmbGFncyBvZiB0aGUgbmNyNTNjOHh4LmggaGVhZGVyIGZpbGUKKzEyLiBJbnN0YWxsYXRpb24KKzEzLiBBcmNoaXRlY3R1cmUgZGVwZW5kZW50IGZlYXR1cmVzCisxNC4gS25vd24gcHJvYmxlbXMKKyAgICAgIDE0LjEgVGFnZ2VkIGNvbW1hbmRzIHdpdGggSW9tZWdhIEpheiBkZXZpY2UKKyAgICAgIDE0LjIgRGV2aWNlIG5hbWVzIGNoYW5nZSB3aGVuIGFub3RoZXIgY29udHJvbGxlciBpcyBhZGRlZAorICAgICAgMTQuMyBVc2luZyBvbmx5IDggYml0IGRldmljZXMgd2l0aCBhIFdJREUgU0NTSSBjb250cm9sbGVyLgorICAgICAgMTQuNCBQb3NzaWJsZSBkYXRhIGNvcnJ1cHRpb24gZHVyaW5nIGEgTWVtb3J5IFdyaXRlIGFuZCBJbnZhbGlkYXRlCisgICAgICAxNC41IElSUSBzaGFyaW5nIHByb2JsZW1zCisxNS4gU0NTSSBwcm9ibGVtIHRyb3VibGVzaG9vdGluZworICAgICAgMTUuMSBQcm9ibGVtIHRyYWNraW5nCisgICAgICAxNS4yIFVuZGVyc3RhbmRpbmcgaGFyZHdhcmUgZXJyb3IgcmVwb3J0cworMTYuIFN5bmNob25vdXMgdHJhbnNmZXIgbmVnb3RpYXRpb24gdGFibGVzCisgICAgICAxNi4xIFN5bmNocm9ub3VzIHRpbWluZ3MgZm9yIDUzQzg3NSBhbmQgNTNDODYwIFVsdHJhLVNDU0kgY29udHJvbGxlcnMKKyAgICAgIDE2LjIgU3luY2hyb25vdXMgdGltaW5ncyBmb3IgZmFzdCBTQ1NJLTIgNTNDOFhYIGNvbnRyb2xsZXJzCisxNy4gU2VyaWFsIE5WUkFNIHN1cHBvcnQgKGJ5IFJpY2hhcmQgV2FsdGhhbSkKKyAgICAgIDE3LjEgRmVhdHVyZXMKKyAgICAgIDE3LjIgU3ltYmlvcyBOVlJBTSBsYXlvdXQKKyAgICAgIDE3LjMgVGVrcmFtICBOVlJBTSBsYXlvdXQKKzE4LiBTdXBwb3J0IGZvciBCaWcgRW5kaWFuCisgICAgICAxOC4xIEJpZyBFbmRpYW4gQ1BVCisgICAgICAxOC4yIE5DUiBjaGlwIGluIEJpZyBFbmRpYW4gbW9kZSBvZiBvcGVyYXRpb25zCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMS4gSW50cm9kdWN0aW9uCisKK1RoZSBpbml0aWFsIExpbnV4IG5jcjUzYzh4eCBkcml2ZXIgaGFzIGJlZW4gYSBwb3J0IG9mIHRoZSBuY3IgZHJpdmVyIGZyb20gCitGcmVlQlNEIHRoYXQgaGFzIGJlZW4gYWNoaWV2ZWQgaW4gTm92ZW1iZXIgMTk5NSBieToKKyAgICAgICAgICBHZXJhcmQgUm91ZGllciAgICAgICAgICAgICAgPGdyb3VkaWVyQGZyZWUuZnI+CisKK1RoZSBvcmlnaW5hbCBkcml2ZXIgaGFzIGJlZW4gd3JpdHRlbiBmb3IgMzg2YnNkIGFuZCBGcmVlQlNEIGJ5OgorICAgICAgICAgIFdvbGZnYW5nIFN0YW5nbG1laWVyICAgICAgICA8d29sZkBjb2xvZ25lLmRlPgorICAgICAgICAgIFN0ZWZhbiBFc3NlciAgICAgICAgICAgICAgICA8c2VAbWkuVW5pLUtvZWxuLmRlPgorCitJdCBpcyBub3cgYXZhaWxhYmxlIGFzIGEgYnVuZGxlIG9mIDIgZHJpdmVyczoKKworLSBuY3I1M2M4eHggZ2VuZXJpYyBkcml2ZXIgdGhhdCBzdXBwb3J0cyBhbGwgdGhlIFNZTTUzQzhYWCBmYW1pbHkgaW5jbHVkaW5nIAorICB0aGUgZWFsaWVzdCA4MTAgcmV2LiAxLCB0aGUgbGF0ZXN0IDg5NiAoMiBjaGFubmVsIExWRCBTQ1NJIGNvbnRyb2xsZXIpIGFuZAorICB0aGUgbmV3IDg5NUEgKDEgY2hhbm5lbCBMVkQgU0NTSSBjb250cm9sbGVyKS4KKy0gc3ltNTNjOHh4IGVuaGFuY2VkIGRyaXZlciAoYS5rLmEuIDg5NiBkcml2ZXJzKSB0aGF0IGRyb3BzIHN1cHBvcnQgb2Ygb2xkZXN0IAorICBjaGlwcyBpbiBvcmRlciB0byBnYWluIGFkdmFudGFnZSBvZiBuZXcgZmVhdHVyZXMsIGFzIExPQUQvU1RPUkUgaW50cnVjdGlvbnMgCisgIGF2YWlsYWJsZSBzaW5jZSB0aGUgODEwQSBhbmQgaGFyZHdhcmUgcGhhc2UgbWlzbWF0Y2ggYXZhaWxhYmxlIHdpdGggdGhlIAorICA4OTYgYW5kIHRoZSA4OTVBLgorCitZb3UgY2FuIGZpbmQgdGVjaG5pY2FsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBOQ1IgOHh4IGZhbWlseSBpbiB0aGUKK1BDSS1IT1dUTyB3cml0dGVuIGJ5IE1pY2hhZWwgV2lsbCBhbmQgaW4gdGhlIFNDU0ktSE9XVE8gd3JpdHRlbiBieQorRHJldyBFY2toYXJkdC4KKworSW5mb3JtYXRpb24gYWJvdXQgbmV3IGNoaXBzIGlzIGF2YWlsYWJsZSBhdCBMU0lMT0dJQyB3ZWIgc2VydmVyOgorCisgICAgICAgICAgaHR0cDovL3d3dy5sc2lsb2dpYy5jb20vCisKK1NDU0kgc3RhbmRhcmQgZG9jdW1lbnRhdGlvbnMgYXJlIGF2YWlsYWJsZSBhdCBTWU1CSU9TIGZ0cCBzZXJ2ZXI6CisKKyAgICAgICAgICBmdHA6Ly9mdHAuc3ltYmlvcy5jb20vCisKK1VzZWZ1bGwgU0NTSSB0b29scyB3cml0dGVuIGJ5IEVyaWMgWW91bmdkYWxlIGFyZSBhdmFpbGFibGUgYXQgdHN4LTExOgorCisgICAgICAgICAgZnRwOi8vdHN4LTExLm1pdC5lZHUvcHViL2xpbnV4L0FMUEhBL3Njc2kvc2NzaWluZm8tWC5ZLnRhci5negorICAgICAgICAgIGZ0cDovL3RzeC0xMS5taXQuZWR1L3B1Yi9saW51eC9BTFBIQS9zY3NpL3Njc2lkZXYtWC5ZLnRhci5negorCitUaGVzZSB0b29scyBhcmUgbm90IEFMUEhBIGJ1dCBxdWl0ZSBjbGVhbiBhbmQgd29yayBxdWl0ZSB3ZWxsLgorSXQgaXMgZXNzZW50aWFsIHlvdSBoYXZlIHRoZSAnc2NzaWluZm8nIHBhY2thZ2UuCisKK1RoaXMgc2hvcnQgZG9jdW1lbnRhdGlvbiBkZXNjcmliZXMgdGhlIGZlYXR1cmVzIG9mIHRoZSBnZW5lcmljIGFuZCBlbmhhbmNlZAorZHJpdmVycywgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFuZCBjb250cm9sIGNvbW1hbmRzIGF2YWlsYWJsZSB0aHJvdWdoIAordGhlIHByb2MgU0NTSSBmaWxlIHN5c3RlbSByZWFkIC8gd3JpdGUgb3BlcmF0aW9ucy4KKworVGhpcyBkcml2ZXIgaGFzIGJlZW4gdGVzdGVkIE9LIHdpdGggbGludXgvaTM4NiwgTGludXgvQWxwaGEgYW5kIExpbnV4L1BQQy4KKworTGF0ZXN0IGRyaXZlciB2ZXJzaW9uIGFuZCBwYXRjaGVzIGFyZSBhdmFpbGFibGUgYXQ6CisKKyAgICAgICAgICBmdHA6Ly9mdHAudHV4Lm9yZy9wdWIvcGVvcGxlL2dlcmFyZC1yb3VkaWVyCitvcgorICAgICAgICAgIGZ0cDovL2Z0cC5zeW1iaW9zLmNvbS9taXJyb3IvZnRwLnR1eC5vcmcvcHViL3R1eC9yb3VkaWVyL2RyaXZlcnMKKworSSBhbSBub3QgYSBuYXRpdmUgc3BlYWtlciBvZiBFbmdsaXNoIGFuZCB0aGVyZSBhcmUgcHJvYmFibHkgbG90cyBvZgorbWlzdGFrZXMgaW4gdGhpcyBSRUFETUUgZmlsZS4gQW55IGhlbHAgd2lsbCBiZSB3ZWxjb21lLgorCisKKzIuIFN1cHBvcnRlZCBjaGlwcyBhbmQgU0NTSSBmZWF0dXJlcworCitUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQgZm9yIGFsbCBjaGlwczoKKworCVN5bmNocm9ub3VzIG5lZ290aWF0aW9uCisJRGlzY29ubmVjdGlvbgorCVRhZ2dlZCBjb21tYW5kIHF1ZXVpbmcKKwlTQ1NJIHBhcml0eSBjaGVja2luZworCU1hc3RlciBwYXJpdHkgY2hlY2tpbmcKKworIldpZGUgbmVnb3RpYXRpb24iIGlzIHN1cHBvcnRlZCBmb3IgY2hpcHMgdGhhdCBhbGxvdyBpdC4gIFRoZQorZm9sbG93aW5nIHRhYmxlIHNob3dzIHNvbWUgY2hhcmFjdGVyaXN0aWNzIG9mIE5DUiA4eHggZmFtaWx5IGNoaXBzIAorYW5kIHdoYXQgZHJpdmVycyBzdXBwb3J0IHRoZW0uCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydGVkIGJ5ICAgU3VwcG9ydGVkIGJ5CisgICAgICAgT24gYm9hcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBnZW5lcmljICAgIHRoZSBlbmhhbmNlZCAKK0NoaXAgICBTRE1TIEJJT1MgICBXaWRlICAgU0NTSSBzdGQuICAgTWF4LiBzeW5jICAgZHJpdmVyICAgICAgICAgZHJpdmVyCistLS0tICAgLS0tLS0tLS0tICAgLS0tLSAgIC0tLS0tLS0tLSAgIC0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLSAgIC0tLS0tLS0tLS0tLS0KKzgxMCAgICAgICAgTiAgICAgICAgIE4gICAgICBGQVNUMTAgICAgMTAgTUIvcyAgICAgICAgWSAgICAgICAgICAgICBOCis4MTBBICAgICAgIE4gICAgICAgICBOICAgICAgRkFTVDEwICAgIDEwIE1CL3MgICAgICAgIFkgICAgICAgICAgICAgWQorODE1ICAgICAgICBZICAgICAgICAgTiAgICAgIEZBU1QxMCAgICAxMCBNQi9zICAgICAgICBZICAgICAgICAgICAgIE4KKzgyNSAgICAgICAgWSAgICAgICAgIFkgICAgICBGQVNUMTAgICAgMjAgTUIvcyAgICAgICAgWSAgICAgICAgICAgICBOCis4MjVBICAgICAgIFkgICAgICAgICBZICAgICAgRkFTVDEwICAgIDIwIE1CL3MgICAgICAgIFkgICAgICAgICAgICAgWQorODYwICAgICAgICBOICAgICAgICAgTiAgICAgIEZBU1QyMCAgICAyMCBNQi9zICAgICAgICBZICAgICAgICAgICAgIFkKKzg3NSAgICAgICAgWSAgICAgICAgIFkgICAgICBGQVNUMjAgICAgNDAgTUIvcyAgICAgICAgWSAgICAgICAgICAgICBZCis4NzYgICAgICAgIFkgICAgICAgICBZICAgICAgRkFTVDIwICAgIDQwIE1CL3MgICAgICAgIFkgICAgICAgICAgICAgWQorODk1ICAgICAgICBZICAgICAgICAgWSAgICAgIEZBU1Q0MCAgICA4MCBNQi9zICAgICAgICBZICAgICAgICAgICAgIFkKKzg5NUEgICAgICAgWSAgICAgICAgIFkgICAgICBGQVNUNDAgICAgODAgTUIvcyAgICAgICAgWSAgICAgICAgICAgICBZCis4OTYgICAgICAgIFkgICAgICAgICBZICAgICAgRkFTVDQwICAgIDgwIE1CL3MgICAgICAgIFkgICAgICAgICAgICAgWQorODk3ICAgICAgICBZICAgICAgICAgWSAgICAgIEZBU1Q0MCAgICA4MCBNQi9zICAgICAgICBZICAgICAgICAgICAgIFkKKzE1MTBEICAgICAgWSAgICAgICAgIFkgICAgICBGQVNUNDAgICAgODAgTUIvcyAgICAgICAgWSAgICAgICAgICAgICBZCisxMDEwICAgICAgIFkgICAgICAgICBZICAgICAgRkFTVDgwICAgMTYwIE1CL3MgICAgICAgIE4gICAgICAgICAgICAgWQorMTAxMF82NiogICBZICAgICAgICAgWSAgICAgIEZBU1Q4MCAgIDE2MCBNQi9zICAgICAgICBOICAgICAgICAgICAgIFkKKworKiBDaGlwIHN1cHBvcnRzIDMzTUh6IGFuZCA2Nk1IeiBQQ0kgYnVzZXMuCisKKworU3VtbWFyeSBvZiBvdGhlciBzdXBwb3J0ZWQgZmVhdHVyZXM6CisKK01vZHVsZTogICAgICAgICAgICAgICAgYWxsb3cgdG8gbG9hZCB0aGUgZHJpdmVyCitNZW1vcnkgbWFwcGVkIEkvTzogICAgIGluY3JlYXNlcyBwZXJmb3JtYW5jZQorUHJvZmlsaW5nIGluZm9ybWF0aW9uOiByZWFkIG9wZXJhdGlvbnMgZnJvbSB0aGUgcHJvYyBTQ1NJIGZpbGUgc3lzdGVtCitDb250cm9sIGNvbW1hbmRzOiAgICAgIHdyaXRlIG9wZXJhdGlvbnMgdG8gdGhlIHByb2MgU0NTSSBmaWxlIHN5c3RlbQorRGVidWdnaW5nIGluZm9ybWF0aW9uOiB3cml0dGVuIHRvIHN5c2xvZyAoZXhwZXJ0IG9ubHkpCitTY2F0dGVyIC8gZ2F0aGVyCitTaGFyZWQgaW50ZXJydXB0CitCb290IHNldHVwIGNvbW1hbmRzCitTZXJpYWwgTlZSQU06ICAgICAgICAgIFN5bWJpb3MgYW5kIFRla3JhbSBmb3JtYXRzCisKKworMy4gQWR2YW50YWdlcyBvZiB0aGUgZW5oYW5jZWQgODk2IGRyaXZlcgorCiszLjEgT3B0aW1pemVkIFNDU0kgU0NSSVBUUy4KKworVGhlIDgxMEEsIDgyNUEsIDg3NSwgODk1LCA4OTYgYW5kIDg5NUEgc3VwcG9ydCBuZXcgU0NTSSBTQ1JJUFRTIGluc3RydWN0aW9ucyAKK25hbWVkIExPQUQgYW5kIFNUT1JFIHRoYXQgYWxsb3cgdG8gbW92ZSB1cCB0byAxIERXT1JEIGZyb20vdG8gYW4gSU8gcmVnaXN0ZXIgCit0by9mcm9tIG1lbW9yeSBtdWNoIGZhc3RlciB0aGF0IHRoZSBNT1ZFIE1FTU9SWSBpbnN0cnVjdGlvbiB0aGF0IGlzIHN1cHBvcnRlZCAKK2J5IHRoZSA1M2M3eHggYW5kIDUzYzh4eCBmYW1pbHkuCitUaGUgTE9BRC9TVE9SRSBpbnN0cnVjdGlvbnMgc3VwcG9ydCBhYnNvbHV0ZSBhbmQgRFNBIHJlbGF0aXZlIGFkZHJlc3NpbmcgCittb2Rlcy4gIFRoZSBTQ1NJIFNDUklQVFMgaGFkIGJlZW4gZW50aXJlbHkgcmV3cml0dGVuIHVzaW5nIExPQUQvU1RPUkUgaW5zdGVhZCAKK29mIE1PVkUgTUVNT1JZIGluc3RydWN0aW9ucy4KKworMy4yIE5ldyBmZWF0dXJlcyBvZiB0aGUgU1lNNTNDODk2ICg2NCBiaXQgUENJIGR1YWwgTFZEIFNDU0kgY29udHJvbGxlcikKKworVGhlIDg5NiBhbmQgdGhlIDg5NUEgYWxsb3dzIGhhbmRsaW5nIG9mIHRoZSBwaGFzZSBtaXNtYXRjaCBjb250ZXh0IGZyb20gCitTQ1JJUFRTIChhdm9pZHMgdGhlIHBoYXNlIG1pc21hdGNoIGludGVycnVwdCB0aGF0IHN0b3BzIHRoZSBTQ1NJIHByb2Nlc3NvciAKK3VudGlsIHRoZSBDIGNvZGUgaGFzIHNhdmVkIHRoZSBjb250ZXh0IG9mIHRoZSB0cmFuc2ZlcikuCitJbXBsZW1lbnRpbmcgdGhpcyB3aXRob3V0IHVzaW5nIExPQUQvU1RPUkUgaW5zdHJ1Y3Rpb25zIHdvdWxkIGJlIHBhaW5mdWxsIAorYW5kIEkgZGlkJ250IGV2ZW4gd2FudCB0byB0cnkgaXQuCisKK1RoZSA4OTYgY2hpcCBzdXBwb3J0cyA2NCBiaXQgUENJIHRyYW5zYWN0aW9ucyBhbmQgYWRkcmVzc2luZywgd2hpbGUgdGhlIAorODk1QSBzdXBwb3J0cyAzMiBiaXQgUENJIHRyYW5zYWN0aW9ucyBhbmQgNjQgYml0IGFkZHJlc3NpbmcuCitUaGUgU0NSSVBUUyBwcm9jZXNzb3Igb2YgdGhlc2UgY2hpcHMgaXMgbm90IHRydWUgNjQgYml0LCBidXQgdXNlcyBzZWdtZW50IAorcmVnaXN0ZXJzIGZvciBiaXQgMzItNjMuIEFub3RoZXIgaW50ZXJlc3RpbmcgZmVhdHVyZSBpcyB0aGF0IExPQUQvU1RPUkUgCitpbnN0cnVjdGlvbnMgdGhhdCBhZGRyZXNzIHRoZSBvbi1jaGlwIFJBTSAoOGspIHJlbWFpbiBpbnRlcm5hbCB0byB0aGUgY2hpcC4KKworRHVlIHRvIHRoZSB1c2Ugb2YgTE9BRC9TVE9SRSBTQ1JJUFRTIGluc3RydWN0aW9ucywgdGhpcyBkcml2ZXIgZG9lcyBub3QgCitzdXBwb3J0IHRoZSBmb2xsb3dpbmcgY2hpcHM6CistIFNZTTUzQzgxMCByZXZpc2lvbiA8IDB4MTAgKDE2KQorLSBTWU01M0M4MTUgYWxsIHJldmlzaW9ucworLSBTWU01M0M4MjUgcmV2aXNpb24gPCAweDEwICgxNikKKworNC4gTWVtb3J5IG1hcHBlZCBJL08gdmVyc3VzIG5vcm1hbCBJL08KKworTWVtb3J5IG1hcHBlZCBJL08gaGFzIGxlc3MgbGF0ZW5jeSB0aGFuIG5vcm1hbCBJL08uICBTaW5jZQorbGludXgtMS4zLngsIG1lbW9yeSBtYXBwZWQgSS9PIGlzIHVzZWQgcmF0aGVyIHRoYW4gbm9ybWFsIEkvTy4gIE1lbW9yeQorbWFwcGVkIEkvTyBzZWVtcyB0byB3b3JrIGZpbmUgb24gbW9zdCBoYXJkd2FyZSBjb25maWd1cmF0aW9ucywgYnV0Citzb21lIHBvb3JseSBkZXNpZ25lZCBtb3RoZXJib2FyZHMgbWF5IGJyZWFrIHRoaXMgZmVhdHVyZS4KKworVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIENPTkZJR19TQ1NJX05DUjUzQzhYWF9JT01BUFBFRCBmb3JjZXMgdGhlCitkcml2ZXIgdG8gdXNlIG5vcm1hbCBJL08gaW4gYWxsIGNhc2VzLgorCisKKzUuIFRhZ2dlZCBjb21tYW5kIHF1ZXVlaW5nCisKK1F1ZXVpbmcgbW9yZSB0aGFuIDEgY29tbWFuZCBhdCBhIHRpbWUgdG8gYSBkZXZpY2UgYWxsb3dzIGl0IHRvIHBlcmZvcm0gCitvcHRpbWl6YXRpb25zIGJhc2VkIG9uIGFjdHVhbCBoZWFkIHBvc2l0aW9ucyBhbmQgaXRzIG1lY2hhbmljYWwgCitjaGFyYWN0ZXJpc3RpY3MuIFRoaXMgZmVhdHVyZSBtYXkgYWxzbyByZWR1Y2UgYXZlcmFnZSBjb21tYW5kIGxhdGVuY3kuCitJbiBvcmRlciB0byByZWFsbHkgZ2FpbiBhZHZhbnRhZ2Ugb2YgdGhpcyBmZWF0dXJlLCBkZXZpY2VzIG11c3QgaGF2ZSAKK2EgcmVhc29uYWJsZSBjYWNoZSBzaXplIChObyBtaXJhY2xlIGlzIHRvIGJlIGV4cGVjdGVkIGZvciBhIGxvdy1lbmQgCitoYXJkIGRpc2sgd2l0aCAxMjggS0Igb3IgbGVzcykuCitTb21lIGtvd24gU0NTSSBkZXZpY2VzIGRvIG5vdCBwcm9wZXJseSBzdXBwb3J0IHRhZ2dlZCBjb21tYW5kIHF1ZXVpbmcuCitHZW5lcmFsbHksIGZpcm13YXJlIHJldmlzaW9ucyB0aGF0IGZpeCB0aGlzIGtpbmQgb2YgcHJvYmxlbXMgYXJlIGF2YWlsYWJsZSAKK2F0IHJlc3BlY3RpdmUgdmVuZG9yIHdlYi9mdHAgc2l0ZXMuCitBbGwgSSBjYW4gc2F5IGlzIHRoYXQgdGhlIGhhcmQgZGlza3MgSSB1c2Ugb24gbXkgbWFjaGluZXMgYmVoYXZlIHdlbGwgd2l0aCAKK3RoaXMgZHJpdmVyIHdpdGggdGFnZ2VkIGNvbW1hbmQgcXVldWluZyBlbmFibGVkOgorCistIElCTSBTMTIgMDY2MgorLSBDb25uZXIgMTA4MFMKKy0gUXVhbnR1bSBBdGxhcyBJCistIFF1YW50dW0gQXRsYXMgSUkKKworSWYgeW91ciBjb250cm9sbGVyIGhhcyBOVlJBTSwgeW91IGNhbiBjb25maWd1cmUgdGhpcyBmZWF0dXJlIHBlciB0YXJnZXQgCitmcm9tIHRoZSB1c2VyIHNldHVwIHRvb2wuIFRoZSBUZWtyYW0gU2V0dXAgcHJvZ3JhbSBhbGxvd3MgdG8gdHVuZSB0aGUgCittYXhpbXVtIG51bWJlciBvZiBxdWV1ZWQgY29tbWFuZHMgdXAgdG8gMzIuIFRoZSBTeW1iaW9zIFNldHVwIG9ubHkgYWxsb3dzIAordG8gZW5hYmxlIG9yIGRpc2FibGUgdGhpcyBmZWF0dXJlLgorCitUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2ltdWx0YW5lb3VzIHRhZ2dlZCBjb21tYW5kcyBxdWV1ZWQgdG8gYSBkZXZpY2UKK2lzIGN1cnJlbnRseSBzZXQgdG8gOCBieSBkZWZhdWx0LiAgVGhpcyB2YWx1ZSBpcyBzdWl0YWJsZSBmb3IgbW9zdCBTQ1NJCitkaXNrcy4gIFdpdGggbGFyZ2UgU0NTSSBkaXNrcyAoPj0gMkdCLCBjYWNoZSA+PSA1MTJLQiwgYXZlcmFnZSBzZWVrIHRpbWUKKzw9IDEwIG1zKSwgdXNpbmcgYSBsYXJnZXIgdmFsdWUgbWF5IGdpdmUgYmV0dGVyIHBlcmZvcm1hbmNlcy4KKworVGhlIHN5bTUzYzh4eCBkcml2ZXIgc3VwcG9ydHMgdXAgdG8gMjU1IGNvbW1hbmRzIHBlciBkZXZpY2UsIGFuZCB0aGUgCitnZW5lcmljIG5jcjUzYzh4eCBkcml2ZXIgc3VwcG9ydHMgdXAgdG8gNjQsIGJ1dCB1c2luZyBtb3JlIHRoYW4gMzIgaXMgCitnZW5lcmFsbHkgbm90IHdvcnRoLXdoaWxlLCB1bmxlc3MgeW91IGFyZSB1c2luZyBhIHZlcnkgbGFyZ2UgZGlzayBvciBkaXNrIAorYXJyYXkuIEl0IGlzIG5vdGljZWFibGUgdGhhdCBtb3N0IG9mIHJlY2VudCBoYXJkIGRpc2tzIHNlZW0gbm90IHRvIGFjY2VwdCAKK21vcmUgdGhhbiA2NCBzaW11bHRhbmVvdXMgY29tbWFuZHMuIFNvLCB1c2luZyBtb3JlIHRoYW4gNjQgcXVldWVkIGNvbW1hbmRzIAoraXMgcHJvYmFibHkganVzdCByZXNvdXJjZSB3YXN0aW5nLgorCitJZiB5b3VyIGNvbnRyb2xsZXIgZG9lcyBub3QgaGF2ZSBOVlJBTSBvciBpZiBpdCBpcyBtYW5hZ2VkIGJ5IHRoZSBTRE1TIAorQklPUy9TRVRVUCwgeW91IGNhbiBjb25maWd1cmUgdGFnZ2VkIHF1ZXVlaW5nIGZlYXR1cmUgYW5kIGRldmljZSBxdWV1ZSAKK2RlcHRocyBmcm9tIHRoZSBib290IGNvbW1hbmQtbGluZS4gRm9yIGV4YW1wbGU6CisKKyAgbmNyNTNjOHh4PXRhZ3M6NC90MnQzcTE1LXQ0cTcvdDF1MHEzMgorCit3aWxsIHNldCB0YWdnZWQgY29tbWFuZHMgcXVldWUgZGVwdGhzIGFzIGZvbGxvdzoKKworLSB0YXJnZXQgMiAgYWxsIGx1bnMgIG9uIGNvbnRyb2xsZXIgMCAtLT4gMTUKKy0gdGFyZ2V0IDMgIGFsbCBsdW5zICBvbiBjb250cm9sbGVyIDAgLS0+IDE1CistIHRhcmdldCA0ICBhbGwgbHVucyAgb24gY29udHJvbGxlciAwIC0tPiAgNworLSB0YXJnZXQgMSAgbHVuIDAgICAgIG9uIGNvbnRyb2xsZXIgMSAtLT4gMzIKKy0gYWxsIG90aGVyIHRhcmdldC9sdW4gICAgICAgICAgICAgICAgLS0+ICA0CisKK0luIHNvbWUgc3BlY2lhbCBjb25kaXRpb25zLCBzb21lIFNDU0kgZGlzayBmaXJtd2FyZXMgbWF5IHJldHVybiBhCitRVUVVRSBGVUxMIHN0YXR1cyBmb3IgYSBTQ1NJIGNvbW1hbmQuIFRoaXMgYmVoYXZpb3VyIGlzIG1hbmFnZWQgYnkgdGhlCitkcml2ZXIgdXNpbmcgdGhlIGZvbGxvd2luZyBoZXVyaXN0aWM6CisKKy0gRWFjaCB0aW1lIGEgUVVFVUUgRlVMTCBzdGF0dXMgaXMgcmV0dXJuZWQsIHRhZ2dlZCBxdWV1ZSBkZXB0aCBpcyByZWR1Y2VkIAorICB0byB0aGUgYWN0dWFsIG51bWJlciBvZiBkaXNjb25uZWN0ZWQgY29tbWFuZHMuIAorCistIEV2ZXJ5IDEwMDAgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCBTQ1NJIGNvbW1hbmRzLCBpZiBhbGxvd2VkIGJ5IHRoZQorICBjdXJyZW50IGxpbWl0LCB0aGUgbWF4aW11bSBudW1iZXIgb2YgcXVldWVhYmxlIGNvbW1hbmRzIGlzIGluY3JlbWVudGVkLgorCitTaW5jZSBRVUVVRSBGVUxMIHN0YXR1cyByZWNlcHRpb24gYW5kIGhhbmRsaW5nIGlzIHJlc291cmNlIHdhc3RpbmcsIHRoZSAKK2RyaXZlciBub3RpZmllcyBieSBkZWZhdWx0IHRoaXMgcHJvYmxlbSB0byB1c2VyIGJ5IGluZGljYXRpbmcgdGhlIGFjdHVhbCAKK251bWJlciBvZiBjb21tYW5kcyB1c2VkIGFuZCB0aGVpciBzdGF0dXMsIGFzIHdlbGwgYXMgaXRzIGRlY2lzaW9uIG9uIHRoZSAKK2RldmljZSBxdWV1ZSBkZXB0aCBjaGFuZ2UuCitUaGUgaGV1cmlzdGljIHVzZWQgYnkgdGhlIGRyaXZlciBpbiBoYW5kbGluZyBRVUVVRSBGVUxMIGVuc3VyZXMgdGhhdCB0aGUgCitpbXBhY3Qgb24gcGVyZm9ybWFuY2VzIGlzIG5vdCB0b28gYmFkLiBZb3UgY2FuIGdldCByaWQgb2YgdGhlIG1lc3NhZ2VzIGJ5IAorc2V0dGluZyB2ZXJib3NlIGxldmVsIHRvIHplcm8sIGFzIGZvbGxvdzoKKworMXN0IG1ldGhvZDogYm9vdCB5b3VyIHN5c3RlbSB1c2luZyAnbmNyNTNjOHh4PXZlcmI6MCcgb3B0aW9uLgorMm5kIG1ldGhvZDogYXBwbHkgInNldHZlcmJvc2UgMCIgY29udHJvbCBjb21tYW5kIHRvIHRoZSBwcm9jIGZzIGVudHJ5IAorICAgICAgICAgICAgY29ycmVzcG9uZGluZyB0byB5b3VyIGNvbnRyb2xsZXIgYWZ0ZXIgYm9vdC11cC4KKworNi4gUGFyaXR5IGNoZWNraW5nCisKK1RoZSBkcml2ZXIgc3VwcG9ydHMgU0NTSSBwYXJpdHkgY2hlY2tpbmcgYW5kIFBDSSBidXMgbWFzdGVyIHBhcml0eQorY2hlY2tpbmcuICBUaGVzZSBmZWF0dXJlcyBtdXN0IGJlIGVuYWJsZWQgaW4gb3JkZXIgdG8gZW5zdXJlIHNhZmUgZGF0YQordHJhbnNmZXJzLiAgSG93ZXZlciwgc29tZSBmbGF3ZWQgZGV2aWNlcyBvciBtb3RoZXIgYm9hcmRzIHdpbGwgaGF2ZQorcHJvYmxlbXMgd2l0aCBwYXJpdHkuIFlvdSBjYW4gZGlzYWJsZSBlaXRoZXIgUENJIHBhcml0eSBvciBTQ1NJIHBhcml0eSAKK2NoZWNraW5nIGJ5IGVudGVyaW5nIGFwcHJvcHJpYXRlIG9wdGlvbnMgZnJvbSB0aGUgYm9vdCBjb21tYW5kIGxpbmUuCisoU2VlIDEwOiBCb290IHNldHVwIGNvbW1hbmRzKS4KKworNy4gUHJvZmlsaW5nIGluZm9ybWF0aW9uCisKK1Byb2ZpbGluZyBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgcHJvYyBTQ1NJIGZpbGUgc3lzdGVtLgorU2luY2UgZ2F0aGVyaW5nIHByb2ZpbGluZyBpbmZvcm1hdGlvbiBtYXkgaW1wYWN0IHBlcmZvcm1hbmNlcywgdGhpcyAKK2ZlYXR1cmUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBhbmQgcmVxdWlyZXMgYSBjb21waWxhdGlvbiBjb25maWd1cmF0aW9uIAorb3B0aW9uIHRvIGJlIHNldCB0byBZLgorCitUaGUgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCBhIGhvc3QgaGFzIHRoZSBmb2xsb3dpbmcgcGF0aG5hbWU6CisKKyAgICAgICAgICAvcHJvYy9zY3NpL25jcjUzYzh4eC9OICAgICAoTj0wLDEsMiAuLi4uKQorCitHZW5lcmFsbHksIG9ubHkgMSBib2FyZCBpcyB1c2VkIG9uIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGF0IGRldmljZSBpczoKKyAgICAgICAgICAvcHJvYy9zY3NpL25jcjUzYzh4eC8wCisKK0hvd2V2ZXIsIGlmIHRoZSBkcml2ZXIgaGFzIGJlZW4gbWFkZSBhcyBtb2R1bGUsIHRoZSBudW1iZXIgb2YgdGhlCitob3N0cyBpcyBpbmNyZW1lbnRlZCBlYWNoIHRpbWUgdGhlIGRyaXZlciBpcyBsb2FkZWQuCisKK0luIG9yZGVyIHRvIGRpc3BsYXkgcHJvZmlsaW5nIGluZm9ybWF0aW9uLCBqdXN0IGVudGVyOgorCisgICAgICAgICBjYXQgL3Byb2Mvc2NzaS9uY3I1M2M4eHgvMAorCithbmQgeW91IHdpbGwgZ2V0IHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcgdGV4dDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhbCBpbmZvcm1hdGlvbjoKKyAgQ2hpcCBOQ1I1M0M4MTAsIGRldmljZSBpZCAweDEsIHJldmlzaW9uIGlkIDB4MgorICBJTyBwb3J0IGFkZHJlc3MgMHg2MDAwLCBJUlEgbnVtYmVyIDEwCisgIFVzaW5nIG1lbW9yeSBtYXBwZWQgSU8gYXQgdmlydHVhbCBhZGRyZXNzIDB4MjgyYzAwMAorICBTeW5jaHJvbm91cyB0cmFuc2ZlciBwZXJpb2QgMjUsIG1heCBjb21tYW5kcyBwZXIgbHVuIDQKK1Byb2ZpbGluZyBpbmZvcm1hdGlvbjoKKyAgbnVtX3RyYW5zICAgID0gMTgwMTQKKyAgbnVtX2tieXRlcyAgID0gNjcxMzE0CisgIG51bV9kaXNjICAgICA9IDI1NzYzCisgIG51bV9icmVhayAgICA9IDE2NzMKKyAgbnVtX2ludCAgICAgID0gMTY4NQorICBudW1fZmx5ICAgICAgPSAxODAzOAorICBtc19zZXR1cCAgICAgPSA0OTQwCisgIG1zX2RhdGEgICAgICA9IDM2OTk0MAorICBtc19kaXNjICAgICAgPSAxODMwOTAKKyAgbXNfcG9zdCAgICAgID0gMTMyMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHZW5lcmFsIGluZm9ybWF0aW9uIGlzIGVhc3kgdG8gdW5kZXJzdGFuZC4gVGhlIGRldmljZSBJRCBhbmQgdGhlCityZXZpc2lvbiBJRCBpZGVudGlmeSB0aGUgU0NTSSBjaGlwIGFzIGZvbGxvd3M6CisKK0NoaXAgICAgRGV2aWNlIGlkICAgICBSZXZpc2lvbiBJZAorLS0tLSAgICAtLS0tLS0tLS0gICAgIC0tLS0tLS0tLS0tCis4MTAgICAgICAgMHgxICAgICAgICAgICAgPCAgMHgxMAorODEwQSAgICAgIDB4MSAgICAgICAgICAgID49IDB4MTAKKzgxNSAgICAgICAweDQKKzgyNSAgICAgICAweDMgICAgICAgICAgICA8ICAweDEwCis4NjAgICAgICAgMHg2Cis4MjVBICAgICAgMHgzICAgICAgICAgICAgPj0gMHgxMAorODc1ICAgICAgIDB4ZgorODk1ICAgICAgIDB4YworCitUaGUgcHJvZmlsaW5nIGluZm9ybWF0aW9uIGlzIHVwZGF0ZWQgdXBvbiBjb21wbGV0aW9uIG9mIFNDU0kgY29tbWFuZHMuCitBIGRhdGEgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCBhbmQgemVyb2VkIHdoZW4gdGhlIGhvc3QgYWRhcHRlciBpcworYXR0YWNoZWQuIFNvLCBpZiB0aGUgZHJpdmVyIGlzIGEgbW9kdWxlLCB0aGUgcHJvZmlsZSBjb3VudGVycyBhcmUKK2NsZWFyZWQgZWFjaCB0aW1lIHRoZSBkcml2ZXIgaXMgbG9hZGVkLiAgVGhlICJjbGVhcnByb2YiIGNvbW1hbmQKK2FsbG93cyB5b3UgdG8gY2xlYXIgdGhlc2UgY291bnRlcnMgYXQgYW55IHRpbWUuCisKK1RoZSBmb2xsb3dpbmcgY291bnRlcnMgYXJlIGF2YWlsYWJsZToKKworKCJudW0iIHByZWZpeCBtZWFucyAibnVtYmVyIG9mIiwKKyJtcyIgbWVhbnMgbWlsbGktc2Vjb25kcykKKworbnVtX3RyYW5zCisJTnVtYmVyIG9mIGNvbXBsZXRlZCBjb21tYW5kcworCUV4YW1wbGUgYWJvdmU6IDE4MDE0IGNvbXBsZXRlZCBjb21tYW5kcworCitudW1fa2J5dGVzCisJTnVtYmVyIG9mIGtieXRlcyB0cmFuc2ZlcnJlZAorCUV4YW1wbGUgYWJvdmU6IDY3MSBNQiB0cmFuc2ZlcnJlZAorCitudW1fZGlzYworCU51bWJlciBvZiBTQ1NJIGRpc2Nvbm5lY3Rpb25zCisJRXhhbXBsZSBhYm92ZTogMjU3NjMgU0NTSSBkaXNjb25uZWN0aW9ucworCitudW1fYnJlYWsKKwludW1iZXIgb2Ygc2NyaXB0IGludGVycnVwdGlvbnMgKHBoYXNlIG1pc21hdGNoKQorCUV4YW1wbGUgYWJvdmU6IDE2NzMgc2NyaXB0IGludGVycnVwdGlvbnMKKworbnVtX2ludAorCU51bWJlciBvZiBpbnRlcnJ1cHRzIG90aGVyIHRoYW4gIm9uIHRoZSBmbHkiCisJRXhhbXBsZSBhYm92ZTogMTY4NSBpbnRlcnJ1cHRpb25zIG5vdCAib24gdGhlIGZseSIKKworbnVtX2ZseQorCU51bWJlciBvZiBpbnRlcnJ1cHRzICJvbiB0aGUgZmx5IgorCUV4YW1wbGUgYWJvdmU6IDE4MDM4IGludGVycnVwdGlvbnMgIm9uIHRoZSBmbHkiCisKK21zX3NldHVwCisJRWxhcHNlZCB0aW1lIGZvciBTQ1NJIGNvbW1hbmRzIHNldHVwcworCUV4YW1wbGUgYWJvdmU6IDQuOTQgc2Vjb25kcworCittc19kYXRhCisJRWxhcHNlZCB0aW1lIGZvciBkYXRhIHRyYW5zZmVycworCUV4YW1wbGUgYWJvdmU6IDM2OS45NCBzZWNvbmRzIHNwZW50IGZvciBkYXRhIHRyYW5zZmVyCisKK21zX2Rpc2MKKwlFbGFwc2VkIHRpbWUgZm9yIFNDU0kgZGlzY29ubmVjdGlvbnMKKwlFeGFtcGxlIGFib3ZlOiAxODMuMDkgc2Vjb25kcyBzcGVudCBkaXNjb25uZWN0ZWQKKworbXNfcG9zdAorCUVsYXBzZWQgdGltZSBmb3IgY29tbWFuZCBwb3N0IHByb2Nlc3NpbmcKKwkodGltZSBmcm9tIFNDU0kgc3RhdHVzIGdldCB0byBjb21tYW5kIGNvbXBsZXRpb24gY2FsbCkKKwlFeGFtcGxlIGFib3ZlOiAxLjMyIHNlY29uZHMgc3BlbnQgZm9yIHBvc3QgcHJvY2Vzc2luZworCitEdWUgdG8gdGhlIDEvMTAwIHNlY29uZCB0aWNrIG9mIHRoZSBzeXN0ZW0gY2xvY2ssICJtc19wb3N0IiB0aW1lIG1heQorYmUgd3JvbmcuCisKK0luIHRoZSBleGFtcGxlIGFib3ZlLCB3ZSBnb3QgMTgwMzggaW50ZXJydXB0cyAib24gdGhlIGZseSIgYW5kIG9ubHkKKzE2NzMgc2NyaXB0IGJyZWFrcyBnZW5lcmFsbHkgZHVlIHRvIGRpc2Nvbm5lY3Rpb25zIGluc2lkZSBhIHNlZ21lbnQgCitvZiB0aGUgc2NhdHRlciBsaXN0LgorCisKKzguIENvbnRyb2wgY29tbWFuZHMKKworQ29udHJvbCBjb21tYW5kcyBjYW4gYmUgc2VudCB0byB0aGUgZHJpdmVyIHdpdGggd3JpdGUgb3BlcmF0aW9ucyB0bwordGhlIHByb2MgU0NTSSBmaWxlIHN5c3RlbS4gVGhlIGdlbmVyaWMgY29tbWFuZCBzeW50YXggaXMgdGhlCitmb2xsb3dpbmc6CisKKyAgICAgIGVjaG8gIjx2ZXJiPiA8cGFyYW1ldGVycz4iID4vcHJvYy9zY3NpL25jcjUzYzh4eC8wCisgICAgICAoYXNzdW1lcyBjb250cm9sbGVyIG51bWJlciBpcyAwKQorCitVc2luZyAiYWxsIiBmb3IgIjx0YXJnZXQ+IiBwYXJhbWV0ZXIgd2l0aCB0aGUgY29tbWFuZHMgYmVsb3cgd2lsbAorYXBwbHkgdG8gYWxsIHRhcmdldHMgb2YgdGhlIFNDU0kgY2hhaW4gKGV4Y2VwdCB0aGUgY29udHJvbGxlcikuCisKK0F2YWlsYWJsZSBjb21tYW5kczoKKworOC4xIFNldCBtaW5pbXVtIHN5bmNocm9ub3VzIHBlcmlvZCBmYWN0b3IKKworICAgIHNldHN5bmMgPHRhcmdldD4gPHBlcmlvZCBmYWN0b3I+CisKKyAgICB0YXJnZXQ6ICAgIHRhcmdldCBudW1iZXIKKyAgICBwZXJpb2Q6ICAgIG1pbmltdW0gc3luY2hyb25vdXMgcGVyaW9kLgorICAgICAgICAgICAgICAgTWF4aW11bSBzcGVlZCA9IDEwMDAvKDQqcGVyaW9kIGZhY3RvcikgZXhjZXB0IGZvciBzcGVjaWFsCisgICAgICAgICAgICAgICBjYXNlcyBiZWxvdy4KKworICAgIFNwZWNpZnkgYSBwZXJpb2Qgb2YgMjU1LCB0byBmb3JjZSBhc3luY2hyb25vdXMgdHJhbnNmZXIgbW9kZS4KKworICAgICAgMTAgbWVhbnMgMjUgbmFuby1zZWNvbmRzIHN5bmNocm9ub3VzIHBlcmlvZAorICAgICAgMTEgbWVhbnMgMzAgbmFuby1zZWNvbmRzIHN5bmNocm9ub3VzIHBlcmlvZAorICAgICAgMTIgbWVhbnMgNTAgbmFuby1zZWNvbmRzIHN5bmNocm9ub3VzIHBlcmlvZAorCis4LjIgU2V0IHdpZGUgc2l6ZQorCisgICAgc2V0d2lkZSA8dGFyZ2V0PiA8c2l6ZT4KKworICAgIHRhcmdldDogICAgdGFyZ2V0IG51bWJlcgorICAgIHNpemU6ICAgICAgMD04IGJpdHMsIDE9MTZiaXRzCisKKzguMyBTZXQgbWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCB0YWdnZWQgY29tbWFuZHMKKyAKKyAgICBzZXR0YWdzIDx0YXJnZXQ+IDx0YWdzPgorCisgICAgdGFyZ2V0OiAgICB0YXJnZXQgbnVtYmVyCisgICAgdGFnczogICAgICBudW1iZXIgb2YgY29uY3VycmVudCB0YWdnZWQgY29tbWFuZHMKKyAgICAgICAgICAgICAgIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiBTQ1NJX05DUl9NQVhfVEFHUyAoZGVmYXVsdDogOCkKKworOC40IFNldCBvcmRlciB0eXBlIGZvciB0YWdnZWQgY29tbWFuZAorCisgICAgc2V0b3JkZXIgPG9yZGVyPgorCisgICAgb3JkZXI6ICAgICAzIHBvc3NpYmxlIHZhbHVlczoKKyAgICAgICAgICAgICAgIHNpbXBsZTogdXNlIFNJTVBMRSBUQUcgZm9yIGFsbCBvcGVyYXRpb25zIChyZWFkIGFuZCB3cml0ZSkKKyAgICAgICAgICAgICAgIG9yZGVyZWQ6IHVzZSBPUkRFUkVEIFRBRyBmb3IgYWxsIG9wZXJhdGlvbnMKKyAgICAgICAgICAgICAgIGRlZmF1bHQ6IHVzZSBkZWZhdWx0IHRhZyB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgU0lNUExFICBUQUcgZm9yIHJlYWQgIG9wZXJhdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgIE9SREVSRUQgVEFHIGZvciB3cml0ZSBvcGVyYXRpb25zCisKKworOC41IFNldCBkZWJ1ZyBtb2RlCisKKyAgICBzZXRkZWJ1ZyA8bGlzdCBvZiBkZWJ1ZyBmbGFncz4KKworICAgIEF2YWlsYWJsZSBkZWJ1ZyBmbGFnczoKKyAgICAgICAgYWxsb2M6ICAgcHJpbnQgaW5mbyBhYm91dCBtZW1vcnkgYWxsb2NhdGlvbnMgKGNjYiwgbGNiKQorICAgICAgICBxdWV1ZTogICBwcmludCBpbmZvIGFib3V0IGluc2VydGlvbnMgaW50byB0aGUgY29tbWFuZCBzdGFydCBxdWV1ZQorICAgICAgICByZXN1bHQ6ICBwcmludCBzZW5zZSBkYXRhIG9uIENIRUNLIENPTkRJVElPTiBzdGF0dXMKKyAgICAgICAgc2NhdHRlcjogcHJpbnQgaW5mbyBhYm91dCB0aGUgc2NhdHRlciBwcm9jZXNzCisgICAgICAgIHNjcmlwdHM6IHByaW50IGluZm8gYWJvdXQgdGhlIHNjcmlwdCBiaW5kaW5nIHByb2Nlc3MKKwl0aW55OiAgICBwcmludCBtaW5pbWFsIGRlYnVnZ2luZyBpbmZvcm1hdGlvbgorCXRpbWluZzogIHByaW50IHRpbWluZyBpbmZvcm1hdGlvbiBvZiB0aGUgTkNSIGNoaXAKKwluZWdvOiAgICBwcmludCBpbmZvcm1hdGlvbiBhYm91dCBTQ1NJIG5lZ290aWF0aW9ucworCXBoYXNlOiAgIHByaW50IGluZm9ybWF0aW9uIG9uIHNjcmlwdCBpbnRlcnJ1cHRpb25zCisKKyAgICBVc2UgInNldGRlYnVnIiB3aXRoIG5vIGFyZ3VtZW50IHRvIHJlc2V0IGRlYnVnIGZsYWdzLgorCisKKzguNiBDbGVhciBwcm9maWxlIGNvdW50ZXJzCisKKyAgICBjbGVhcnByb2YKKworICAgIFRoZSBwcm9maWxlIGNvdW50ZXJzIGFyZSBhdXRvbWF0aWNhbGx5IGNsZWFyZWQgd2hlbiB0aGUgYW1vdW50IG9mCisgICAgZGF0YSB0cmFuc2ZlcnJlZCByZWFjaGVzIDEwMDAgR0IgaW4gb3JkZXIgdG8gYXZvaWQgb3ZlcmZsb3cuCisgICAgVGhlICJjbGVhcnByb2YiIGNvbW1hbmQgYWxsb3dzIHlvdSB0byBjbGVhciB0aGVzZSBjb3VudGVycyBhdCBhbnkgdGltZS4KKworCis4LjcgU2V0IGZsYWcgKG5vX2Rpc2MpCisgCisgICAgc2V0ZmxhZyA8dGFyZ2V0PiA8ZmxhZz4KKworICAgIHRhcmdldDogICAgdGFyZ2V0IG51bWJlcgorCisgICAgRm9yIHRoZSBtb21lbnQsIG9ubHkgb25lIGZsYWcgaXMgYXZhaWxhYmxlOgorCisgICAgICAgIG5vX2Rpc2M6ICAgbm90IGFsbG93IHRhcmdldCB0byBkaXNjb25uZWN0LgorCisgICAgRG8gbm90IHNwZWNpZnkgYW55IGZsYWcgaW4gb3JkZXIgdG8gcmVzZXQgdGhlIGZsYWcuIEZvciBleGFtcGxlOgorICAgIC0gc2V0ZmxhZyA0CisgICAgICB3aWxsIHJlc2V0IG5vX2Rpc2MgZmxhZyBmb3IgdGFyZ2V0IDQsIHNvIHdpbGwgYWxsb3cgaXQgZGlzY29ubmVjdGlvbnMuCisgICAgLSBzZXRmbGFnIGFsbAorICAgICAgd2lsbCBhbGxvdyBkaXNjb25uZWN0aW9uIGZvciBhbGwgZGV2aWNlcyBvbiB0aGUgU0NTSSBidXMuCisKKworOC44IFNldCB2ZXJib3NlIGxldmVsCisKKyAgICBzZXR2ZXJib3NlICNsZXZlbAorCisgICAgVGhlIGRyaXZlciBkZWZhdWx0IHZlcmJvc2UgbGV2ZWwgaXMgMS4gVGhpcyBjb21tYW5kIGFsbG93cyB0byBjaGFuZ2UgCisgICAgdGggZHJpdmVyIHZlcmJvc2UgbGV2ZWwgYWZ0ZXIgYm9vdC11cC4KKworOC45IFJlc2V0IGFsbCBsb2dpY2FsIHVuaXRzIG9mIGEgdGFyZ2V0CisKKyAgICByZXNldGRldiA8dGFyZ2V0PgorCisgICAgdGFyZ2V0OiAgICB0YXJnZXQgbnVtYmVyCisgICAgVGhlIGRyaXZlciB3aWxsIHRyeSB0byBzZW5kIGEgQlVTIERFVklDRSBSRVNFVCBtZXNzYWdlIHRvIHRoZSB0YXJnZXQuCisgICAgKE9ubHkgc3VwcG9ydGVkIGJ5IHRoZSBTWU01M0M4WFggZHJpdmVyIGFuZCBwcm92aWRlZCBmb3IgdGVzdCBwdXJwb3NlKQorCis4LjEwIEFib3J0IGFsbCB0YXNrcyBvZiBhbGwgbG9naWNhbCB1bml0cyBvZiBhIHRhcmdldAorCisgICAgY2xlYXJkZXYgPHRhcmdldD4KKworICAgIHRhcmdldDogICAgdGFyZ2V0IG51bWJlcgorICAgIFRoZSBkcml2ZXIgd2lsbCB0cnkgdG8gc2VuZCBhIEFCT1JUIG1lc3NhZ2UgdG8gYWxsIHRoZSBsb2dpY2FsIHVuaXRzIAorICAgIG9mIHRoZSB0YXJnZXQuCisgICAgKE9ubHkgc3VwcG9ydGVkIGJ5IHRoZSBTWU01M0M4WFggZHJpdmVyIGFuZCBwcm92aWRlZCBmb3IgdGVzdCBwdXJwb3NlKQorCisKKzkuIENvbmZpZ3VyYXRpb24gcGFyYW1ldGVycworCitJZiB0aGUgZmlybXdhcmUgb2YgYWxsIHlvdXIgZGV2aWNlcyBpcyBwZXJmZWN0IGVub3VnaCwgYWxsIHRoZQorZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgY2FuIGJlIGVuYWJsZWQgYXQgc3RhcnQtdXAuICBIb3dldmVyLAoraWYgb25seSBvbmUgaGFzIGEgZmxhdyBmb3Igc29tZSBTQ1NJIGZlYXR1cmUsIHlvdSBjYW4gZGlzYWJsZSB0aGUKK3N1cHBvcnQgYnkgdGhlIGRyaXZlciBvZiB0aGlzIGZlYXR1cmUgYXQgbGludXggc3RhcnQtdXAgYW5kIGVuYWJsZQordGhpcyBmZWF0dXJlIGFmdGVyIGJvb3QtdXAgb25seSBmb3IgZGV2aWNlcyB0aGF0IHN1cHBvcnQgaXQgc2FmZWx5LgorCitDT05GSUdfU0NTSV9OQ1I1M0M4WFhfUFJPRklMRV9TVVBQT1JUICAoZGVmYXVsdCBhbnN3ZXI6IG4pCisgICAgVGhpcyBvcHRpb24gbXVzdCBiZSBzZXQgZm9yIHByb2ZpbGluZyBpbmZvcm1hdGlvbiB0byBiZSBnYXRoZXJlZCAKKyAgICBhbmQgcHJpbnRlZCBvdXQgdGhyb3VnaCB0aGUgcHJvYyBmaWxlIHN5c3RlbS4gVGhpcyBmZWF0dXJlcyBtYXkgCisgICAgaW1wYWN0IHBlcmZvcm1hbmNlcy4KKworQ09ORklHX1NDU0lfTkNSNTNDOFhYX0lPTUFQUEVEICAgICAgIChkZWZhdWx0IGFuc3dlcjogbikKKyAgICBBbnN3ZXIgInkiIGlmIHlvdSBzdXNwZWN0IHlvdXIgbW90aGVyIGJvYXJkIHRvIG5vdCBhbGxvdyBtZW1vcnkgbWFwcGVkIEkvTy4KKyAgICBNYXkgc2xvdyBkb3duIHBlcmZvcm1hbmNlIGEgbGl0dGxlLiAgVGhpcyBvcHRpb24gaXMgcmVxdWlyZWQgYnkKKyAgICBMaW51eC9QUEMgYW5kIGlzIHVzZWQgbm8gbWF0dGVyIHdoYXQgeW91IHNlbGVjdCBoZXJlLiAgTGludXgvUFBDCisgICAgc3VmZmVycyBubyBwZXJmb3JtYW5jZSBsb3NzIHdpdGggdGhpcyBvcHRpb24gc2luY2UgYWxsIElPIGlzIG1lbW9yeQorICAgIG1hcHBlZCBhbnl3YXkuCisKK0NPTkZJR19TQ1NJX05DUjUzQzhYWF9ERUZBVUxUX1RBR1MgICAgKGRlZmF1bHQgYW5zd2VyOiA4KQorICAgIERlZmF1bHQgdGFnZ2VkIGNvbW1hbmQgcXVldWUgZGVwdGguCisKK0NPTkZJR19TQ1NJX05DUjUzQzhYWF9NQVhfVEFHUyAgICAgICAgIChkZWZhdWx0IGFuc3dlcjogOCkKKyAgICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIHNwZWNpZnkgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRhZ2dlZCBjb21tYW5kcyAKKyAgICB0aGF0IGNhbiBiZSBxdWV1ZWQgdG8gYSBkZXZpY2UuIFRoZSBtYXhpbXVtIHN1cHBvcnRlZCB2YWx1ZSBpcyAzMi4KKworQ09ORklHX1NDU0lfTkNSNTNDOFhYX1NZTkMgICAgICAgICAgICAoZGVmYXVsdCBhbnN3ZXI6IDUpCisgICAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHRoZSBmcmVxdWVuY3kgaW4gTUh6IHRoZSBkcml2ZXIgCisgICAgd2lsbCB1c2UgYXQgYm9vdCB0aW1lIGZvciBzeW5jaHJvbm91cyBkYXRhIHRyYW5zZmVyIG5lZ290aWF0aW9ucy4KKyAgICBUaGlzIGZyZXF1ZW5jeSBjYW4gYmUgY2hhbmdlZCBsYXRlciB3aXRoIHRoZSAic2V0c3luYyIgY29udHJvbCBjb21tYW5kLgorICAgIDAgbWVhbnMgImFzeW5jaHJvbm91cyBkYXRhIHRyYW5zZmVycyIuCisKK0NPTkZJR19TQ1NJX05DUjUzQzhYWF9GT1JDRV9TWU5DX05FR08gKGRlZmF1bHQgYW5zd2VyOiBuKQorICAgIEZvcmNlIHN5bmNocm9ub3VzIG5lZ290aWF0aW9uIGZvciBhbGwgU0NTSS0yIGRldmljZXMuCisgICAgU29tZSBTQ1NJLTIgZGV2aWNlcyBkbyBub3QgcmVwb3J0IHRoaXMgZmVhdHVyZSBpbiBieXRlIDcgb2YgaW5xdWlyeSAKKyAgICByZXNwb25zZSBidXQgZG8gc3VwcG9ydCBpdCBwcm9wZXJseSAoVEFNQVJBQ0sgc2Nhbm5lcnMgZm9yIGV4YW1wbGUpLgorCitDT05GSUdfU0NTSV9OQ1I1M0M4WFhfTk9fRElTQ09OTkVDVCAgIChkZWZhdWx0IGFuZCBvbmx5IHJlYXNvbmFibGUgYW5zd2VyOiBuKQorICAgIElmIHlvdSBzdXNwZWN0IGEgZGV2aWNlIG9mIHlvdXJzIGRvZXMgbm90IHByb3Blcmx5IHN1cHBvcnQgZGlzY29ubmVjdGlvbnMsCisgICAgeW91IGNhbiBhbnN3ZXIgInkiLiBUaGVuLCBhbGwgU0NTSSBkZXZpY2VzIHdpbGwgbmV2ZXIgZGlzY29ubmVjdCB0aGUgYnVzIAorICAgIGV2ZW4gd2hpbGUgcGVyZm9ybWluZyBsb25nIFNDU0kgb3BlcmF0aW9ucy4KKworQ09ORklHX1NDU0lfTkNSNTNDOFhYX1NZTUJJT1NfQ09NUEFUCisgICAgR2VudWluZSBTWU1CSU9TIGJvYXJkcyB1c2UgR1BJTzAgaW4gb3V0cHV0IGZvciBjb250cm9sbGVyIExFRCBhbmQgR1BJTzMgCisgICAgYml0IGFzIGEgZmxhZyBpbmRpY2F0aW5nIHNpbmdsZWQtZW5kZWQvZGlmZmVyZW50aWFsIGludGVyZmFjZS4KKyAgICBJZiBhbGwgdGhlIGJvYXJkcyBvZiB5b3VyIHN5c3RlbSBhcmUgZ2VudWluZSBTWU1CSU9TIGJvYXJkcyBvciB1c2UKKyAgICBCSU9TIGFuZCBkcml2ZXJzIGZyb20gU1lNQklPUywgeW91IHdvdWxkIHdhbnQgdG8gZW5hYmxlIHRoaXMgb3B0aW9uLgorICAgIFRoaXMgb3B0aW9uIG11c3QgTk9UIGJlIGVuYWJsZWQgaWYgeW91ciBzeXN0ZW0gaGFzIGF0IGxlYXN0IG9uZSA1M0M4WFggCisgICAgYmFzZWQgc2NzaSBib2FyZCB3aXRoIGEgdmVuZG9yLXNwZWNpZmljIEJJT1MuCisgICAgRm9yIGV4YW1wbGUsIFRla3JhbSBEQy0zOTAvVSwgREMtMzkwL1cgYW5kIERDLTM5MC9GIHNjc2kgY29udHJvbGxlcnMgCisgICAgdXNlIGEgdmVuZG9yLXNwZWNpZmljIEJJT1MgYW5kIGFyZSBrbm93biB0byBub3QgdXNlIFNZTUJJT1MgY29tcGF0aWJsZSAKKyAgICBHUElPIHdpcmluZy4gU28sIHRoaXMgb3B0aW9uIG11c3Qgbm90IGJlIGVuYWJsZWQgaWYgeW91ciBzeXN0ZW0gaGFzIAorICAgIHN1Y2ggYSBib2FyZCBpbnN0YWxsZWQuCisKK0NPTkZJR19TQ1NJX05DUjUzQzhYWF9OVlJBTV9ERVRFQ1QKKyAgICBFbmFibGUgc3VwcG9ydCBmb3IgcmVhZGluZyB0aGUgc2VyaWFsIE5WUkFNIGRhdGEgb24gU3ltYmlvcyBhbmQKKyAgICBzb21lIFN5bWJpb3MgY29tcGF0aWJsZSBjYXJkcywgYW5kIFRla3JhbSBEQzM5MFcvVS9GIGNhcmRzLiBVc2VmdWwgZm9yCisgICAgc3lzdGVtcyB3aXRoIG1vcmUgdGhhbiBvbmUgU3ltYmlvcyBjb21wYXRpYmxlIGNvbnRyb2xsZXIgd2hlcmUgYXQgbGVhc3QKKyAgICBvbmUgaGFzIGEgc2VyaWFsIE5WUkFNLCBvciBmb3IgYSBzeXN0ZW0gd2l0aCBhIG1peHR1cmUgb2YgU3ltYmlvcyBhbmQKKyAgICBUZWtyYW0gY2FyZHMuIEVuYWJsZXMgc2V0dGluZyB0aGUgYm9vdCBvcmRlciBvZiBob3N0IGFkYXB0b3JzCisgICAgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gdGhlIGRlZmF1bHQgb3JkZXIgb3IgInJldmVyc2UgcHJvYmUiIG9yZGVyLiAKKyAgICBBbHNvIGVuYWJsZXMgU3ltYmlvcyBhbmQgVGVrcmFtIGNhcmRzIHRvIGJlIGRpc3Rpbmd1aXNoZWQgc28KKyAgICBDT05GSUdfU0NTSV9OQ1I1M0M4WFhfU1lNQklPU19DT01QQVQgbWF5IGJlIHNldCBpbiBhIHN5c3RlbSB3aXRoIGEKKyAgICBtaXh0dXJlIG9mIFN5bWJpb3MgYW5kIFRla3JhbSBjYXJkcyBzbyB0aGUgU3ltYmlvcyBjYXJkcyBjYW4gbWFrZSB1c2Ugb2YKKyAgICB0aGUgZnVsbCByYW5nZSBvZiBTeW1iaW9zIGZlYXR1cmVzLCBkaWZmZXJlbnRpYWwsIGxlZCBwaW4sIHdpdGhvdXQKKyAgICBjYXVzaW5nIHByb2JsZW1zIGZvciB0aGUgVGVrcmFtIGNhcmQocykuCisKKzEwLiBCb290IHNldHVwIGNvbW1hbmRzCisKKzEwLjEgU3ludGF4CisKK1NldHVwIGNvbW1hbmRzIGNhbiBiZSBwYXNzZWQgdG8gdGhlIGRyaXZlciBlaXRoZXIgYXQgYm9vdCB0aW1lIG9yIGFzIGEgCitzdHJpbmcgdmFyaWFibGUgdXNpbmcgJ2luc21vZCcuCisKK0EgYm9vdCBzZXR1cCBjb21tYW5kIGZvciB0aGUgbmNyNTNjOHh4IChzeW01M2M4eHgpIGRyaXZlciBiZWdpbnMgd2l0aCB0aGUgCitkcml2ZXIgbmFtZSAibmNyNTNjOHh4PSIoc3ltNTNjOHh4KS4gVGhlIGtlcm5lbCBzeW50YXggcGFyc2VyIHRoZW4gZXhwZWN0cyAKK2FuIG9wdGlvbm5hbCBsaXN0IG9mIGludGVnZXJzIHNlcGFyYXRlZCB3aXRoIGNvbW1hIGZvbGxvd2VkIGJ5IGFuIG9wdGlvbmFsIAorbGlzdCBvZiAgY29tbWEtc2VwYXJhdGVkIHN0cmluZ3MuIEV4YW1wbGUgb2YgYm9vdCBzZXR1cCBjb21tYW5kIHVuZGVyIGxpbG8gCitwcm9tcHQ6CisKK2xpbG86IGxpbnV4IHJvb3Q9L2Rldi9oZGEyIG5jcjUzYzh4eD10YWdzOjQsc3luYzoxMCxkZWJ1ZzoweDIwMAorCistIGVuYWJsZSB0YWdnZWQgY29tbWFuZHMsIHVwIHRvIDQgdGFnZ2VkIGNvbW1hbmRzIHF1ZXVlZC4KKy0gc2V0IHN5bmNocm9ub3VzIG5lZ290aWF0aW9uIHNwZWVkIHRvIDEwIE1lZ2EtdHJhbnNmZXJzIC8gc2Vjb25kLgorLSBzZXQgREVCVUdfTkVHTyBmbGFnLgorCitTaW5jZSBjb21tYSBzZWVtcyBub3QgdG8gYmUgYWxsb3dlZCB3aGVuIGRlZmluaW5nIGEgc3RyaW5nIHZhcmlhYmxlIHVzaW5nICAKKydpbnNtb2QnLCB0aGUgZHJpdmVyIGFsc28gYWNjZXB0cyA8c3BhY2U+IGFzIG9wdGlvbiBzZXBhcmF0b3IuIAorVGhlIGZvbGxvd2luZyBjb21tYW5kIHdpbGwgaW5zdGFsbCBkcml2ZXIgbW9kdWxlIHdpdGggdGhlIHNhbWUgb3B0aW9ucyBhcyAKK2Fib3ZlLgorCisgICAgaW5zbW9kIG5jcjUzYzh4eC5vIG5jcjUzYzh4eD0idGFnczo0IHN5bmM6MTAgZGVidWc6MHgyMDAiCisKK0ZvciB0aGUgbW9tZW50LCB0aGUgaW50ZWdlciBsaXN0IG9mIGFyZ3VtZW50cyBpcyBkaXNjYXJkZWQgYnkgdGhlIGRyaXZlci4gCitJdCB3aWxsIGJlIHVzZWQgaW4gdGhlIGZ1dHVyZSBpbiBvcmRlciB0byBhbGxvdyBhIHBlciBjb250cm9sbGVyIHNldHVwLgorCitFYWNoIHN0cmluZyBhcmd1bWVudCBtdXN0IGJlIHNwZWNpZmllZCBhcyAia2V5d29yZDp2YWx1ZSIuIE9ubHkgbG93ZXItY2FzZSAKK2NoYXJhY3RlcnMgYW5kIGRpZ2l0cyBhcmUgYWxsb3dlZC4KKworSW4gYSBzeXN0ZW0gdGhhdCBjb250YWlucyBtdWx0aXBsZSA1M0M4eHggYWRhcHRlcnMgaW5zbW9kIHdpbGwgaW5zdGFsbCB0aGUgCitzcGVjaWZpZWQgZHJpdmVyIG9uIGVhY2ggYWRhcHRlci4gVG8gZXhjbHVkZSBhIGNoaXAgdXNlIHRoZSAnZXhjbCcga2V5d29yZC4KKworVGhlIHNlcXVlbmNlIG9mIGNvbW1hbmRzLCAKKworICAgIGluc21vZCBzeW01M2M4eHggc3ltNTNjOHh4PWV4Y2w6MHgxNDAwCisgICAgaW5zbW9kIG5jcjUzYzh4eAorCitpbnN0YWxscyB0aGUgc3ltNTNjOHh4IGRyaXZlciBvbiBhbGwgYWRhcHRlcnMgZXhjZXB0IHRoZSBvbmUgYXQgSU8gcG9ydCAKK2FkZHJlc3MgMHgxNDAwIGFuZCB0aGVuIGluc3RhbGxzIHRoZSBuY3I1M2M4eHggZHJpdmVyIHRvIHRoZSBhZGFwdGVyIGF0IElPIAorcG9ydCBhZGRyZXNzIDB4MTQwMC4KKworCisxMC4yIEF2YWlsYWJsZSBhcmd1bWVudHMKKworMTAuMi4xICBNYXN0ZXIgcGFyaXR5IGNoZWNraW5nCisgICAgICAgIG1wYXI6eSAgICAgZW5hYmxlZAorICAgICAgICBtcGFyOm4gICAgIGRpc2FibGVkCisKKzEwLjIuMiAgU2NzaSBwYXJpdHkgY2hlY2tpbmcKKyAgICAgICAgc3Bhcjp5ICAgICBlbmFibGVkCisgICAgICAgIHNwYXI6biAgICAgZGlzYWJsZWQKKworMTAuMi4zICBTY3NpIGRpc2Nvbm5lY3Rpb25zCisgICAgICAgIGRpc2M6eSAgICAgZW5hYmxlZAorICAgICAgICBkaXNjOm4gICAgIGRpc2FibGVkCisgCisxMC4yLjQgIFNwZWNpYWwgZmVhdHVyZXMKKyAgIE9ubHkgYXBwbHkgdG8gODEwQSwgODI1QSwgODYwLCA4NzUgYW5kIDg5NSBjb250cm9sbGVycy4KKyAgIEhhdmUgbm8gZWZmZWN0IHdpdGggb3RoZXIgb25lcy4KKyAgICAgICAgc3BlY2Y6eSAgICAob3IgMSkgZW5hYmxlZAorICAgICAgICBzcGVjZjpuICAgIChvciAwKSBkaXNhYmxlZAorICAgICAgICBzcGVjZjozICAgICAgICAgICBlbmFibGVkIGV4Y2VwdCBNZW1vcnkgV3JpdGUgQW5kIEludmFsaWRhdGUKKyAgIFRoZSBkZWZhdWx0IGRyaXZlciBzZXR1cCBpcyAnc3BlY2Y6MycuIEFzIGEgY29uc2VxdWVuY2UsIG9wdGlvbiAnc3BlY2Y6eScgCisgICBtdXN0IGJlIHNwZWNpZmllZCBpbiB0aGUgYm9vdCBzZXR1cCBjb21tYW5kIHRvIGVuYWJsZSBNZW1vcnkgV3JpdGUgQW5kIAorICAgSW52YWxpZGF0ZS4KKworMTAuMi41ICBVbHRyYSBTQ1NJIHN1cHBvcnQKKyAgIE9ubHkgYXBwbHkgdG8gODYwLCA4NzUsIDg5NSwgODk1YSwgODk2LCAxMDEwIGFuZCAxMDEwXzY2IGNvbnRyb2xsZXJzLgorICAgSGF2ZSBubyBlZmZlY3Qgd2l0aCBvdGhlciBvbmVzLgorICAgICAgICB1bHRyYTpuICAgIEFsbCB1bHRyYSBzcGVlZHMgZW5hYmxlZAorICAgICAgICB1bHRyYToyICAgIFVsdHJhMiBlbmFibGVkCisgICAgICAgIHVsdHJhOjEgICAgVWx0cmEgZW5hYmxlZAorICAgICAgICB1bHRyYTowICAgIFVsdHJhIHNwZWVkcyBkaXNhYmxlZAorCisxMC4yLjYgIERlZmF1bHQgbnVtYmVyIG9mIHRhZ2dlZCBjb21tYW5kcworICAgICAgICB0YWdzOjAgICAgIChvciB0YWdzOjEgKSB0YWdnZWQgY29tbWFuZCBxdWV1aW5nIGRpc2FibGVkCisgICAgICAgIHRhZ3M6I3RhZ3MgKCN0YWdzICA+IDEpIHRhZ2dlZCBjb21tYW5kIHF1ZXVpbmcgZW5hYmxlZAorICAjdGFncyB3aWxsIGJlIHRydW5jYXRlZCB0byB0aGUgbWF4IHF1ZXVlZCBjb21tYW5kcyBjb25maWd1cmF0aW9uIHBhcmFtZXRlci4KKyAgVGhpcyBvcHRpb24gYWxzbyBhbGxvd3MgdG8gc3BlY2lmeSBhIGNvbW1hbmQgcXVldWUgZGVwdGggZm9yIGVhY2ggZGV2aWNlIAorICB0aGF0IHN1cHBvcnQgdGFnZ2VkIGNvbW1hbmQgcXVldWVpbmcuCisgIEV4YW1wbGU6CisgICAgICBuY3I1M2M4eHg9dGFnczoxMC90MnQzcTE2LXQ1cTI0L3QxdTJxMzIKKyAgICAgICAgICAgICAgIHdpbGwgc2V0IGRldmljZXMgcXVldWUgZGVwdGggYXMgZm9sbG93OgorICAgICAgLSBjb250cm9sbGVyICMwIHRhcmdldCAjMiBhbmQgdGFyZ2V0ICMzICAgICAgICAgICAgICAgICAgLT4gMTYgY29tbWFuZHMsCisgICAgICAtIGNvbnRyb2xsZXIgIzAgdGFyZ2V0ICM1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAyNCBjb21tYW5kcywKKyAgICAgIC0gY29udHJvbGxlciAjMSB0YXJnZXQgIzEgbG9naWNhbCB1bml0ICMyICAgICAgICAgICAgICAgIC0+IDMyIGNvbW1hbmRzLAorICAgICAgLSBhbGwgb3RoZXIgbG9naWNhbCB1bml0cyAoYWxsIHRhcmdldHMsIGFsbCBjb250cm9sbGVycykgLT4gMTAgY29tbWFuZHMuCisKKzEwLjIuNyAgRGVmYXVsdCBzeW5jaHJvbm91cyBwZXJpb2QgZmFjdG9yCisgICAgICAgIHN5bmM6MjU1ICAgICBkaXNhYmxlZCAoYXN5bmNocm9ub3VzIHRyYW5zZmVyIG1vZGUpCisgICAgICAgIHN5bmM6I2ZhY3RvcgorICAjZmFjdG9yID0gMTAgICAgIFVsdHJhLTIgU0NTSSA0MCBNZWdhLXRyYW5zZmVycyAvIHNlY29uZAorICAjZmFjdG9yID0gMTEgICAgIFVsdHJhLTIgU0NTSSAzMyBNZWdhLXRyYW5zZmVycyAvIHNlY29uZAorICAjZmFjdG9yIDwgMjUgICAgIFVsdHJhICAgU0NTSSAyMCBNZWdhLXRyYW5zZmVycyAvIHNlY29uZAorICAjZmFjdG9yIDwgNTAgICAgIEZhc3QgICAgU0NTSS0yCisKKyAgSW4gYWxsIGNhc2VzLCB0aGUgZHJpdmVyIHdpbGwgdXNlIHRoZSBtaW5pbXVtIHRyYW5zZmVyIHBlcmlvZCBzdXBwb3J0ZWQgYnkgCisgIGNvbnRyb2xsZXJzIGFjY29yZGluZyB0byBOQ1I1M0M4WFggY2hpcCB0eXBlLgorCisxMC4yLjggIE5lZ290aWF0ZSBzeW5jaHJvbm91cyB3aXRoIGFsbCBkZXZpY2VzCisgICAgICAgIChmb3JjZSBzeW5jIG5lZ28pCisgICAgICAgIGZzbjp5ICAgICAgZW5hYmxlZAorICAgICAgICBmc246biAgICAgIGRpc2FibGVkCisKKzEwLjIuOSAgVmVyYm9zaXR5IGxldmVsCisgICAgICAgIHZlcmI6MCAgICAgbWluaW1hbAorICAgICAgICB2ZXJiOjEgICAgIG5vcm1hbAorICAgICAgICB2ZXJiOjIgICAgIHRvbyBtdWNoCisKKzEwLjIuMTAgRGVidWcgbW9kZQorICAgICAgICBkZWJ1ZzowCSBjbGVhciBkZWJ1ZyBmbGFncworICAgICAgICBkZWJ1ZzojeCAgIHNldCBkZWJ1ZyBmbGFncworICAjeCBpcyBhbiBpbnRlZ2VyIHZhbHVlIGNvbWJpbmluZyB0aGUgZm9sbG93aW5nIHBvd2VyLW9mLTIgdmFsdWVzOgorICBERUJVR19BTExPQyAgICAgICAweDEKKyAgREVCVUdfUEhBU0UgICAgICAgMHgyCisgIERFQlVHX1BPTEwgICAgICAgIDB4NAorICBERUJVR19RVUVVRSAgICAgICAweDgKKyAgREVCVUdfUkVTVUxUICAgICAweDEwCisgIERFQlVHX1NDQVRURVIgICAgMHgyMAorICBERUJVR19TQ1JJUFQgICAgIDB4NDAKKyAgREVCVUdfVElOWSAgICAgICAweDgwCisgIERFQlVHX1RJTUlORyAgICAweDEwMAorICBERUJVR19ORUdPICAgICAgMHgyMDAKKyAgREVCVUdfVEFHUyAgICAgIDB4NDAwCisgIERFQlVHX0ZSRUVaRSAgICAweDgwMAorICBERUJVR19SRVNUQVJUICAweDEwMDAKKworICBZb3UgY2FuIHBsYXkgc2FmZWx5IHdpdGggREVCVUdfTkVHTy4gSG93ZXZlciwgc29tZSBvZiB0aGVzZSBmbGFncyBtYXkgCisgIGdlbmVyYXRlIGJ1bmNoZXMgb2Ygc3lzbG9nIG1lc3NhZ2VzLiAKKworMTAuMi4xMSBCdXJzdCBtYXgKKyAgICAgICAgYnVyc3Q6MCAgICBidXJzdCBkaXNhYmxlZAorICAgICAgICBidXJzdDoyNTUgIGdldCBidXJzdCBsZW5ndGggZnJvbSBpbml0aWFsIElPIHJlZ2lzdGVyIHNldHRpbmdzLgorICAgICAgICBidXJzdDojeCAgIGJ1cnN0IGVuYWJsZWQgKDE8PCN4IGJ1cnN0IHRyYW5zZmVycyBtYXgpCisgICN4IGlzIGFuIGludGVnZXIgdmFsdWUgd2hpY2ggaXMgbG9nIGJhc2UgMiBvZiB0aGUgYnVyc3QgdHJhbnNmZXJzIG1heC4KKyAgVGhlIE5DUjUzQzg3NSBhbmQgTkNSNTNDODI1QSBzdXBwb3J0IHVwIHRvIDEyOCBidXJzdCB0cmFuc2ZlcnMgKCN4ID0gNykuCisgIE90aGVyIGNoaXBzIG9ubHkgc3VwcG9ydCB1cCB0byAxNiAoI3ggPSA0KS4KKyAgVGhpcyBpcyBhIG1heGltdW0gdmFsdWUuIFRoZSBkcml2ZXIgc2V0IHRoZSBidXJzdCBsZW5ndGggYWNjb3JkaW5nIHRvIGNoaXAgCisgIGFuZCByZXZpc2lvbiBpZHMuIEJ5IGRlZmF1bHQgdGhlIGRyaXZlciB1c2VzIHRoZSBtYXhpbXVtIHZhbHVlIHN1cHBvcnRlZCAKKyAgYnkgdGhlIGNoaXAuCisKKzEwLjIuMTIgTEVEIHN1cHBvcnQKKyAgICAgICAgbGVkOjEgICAgICBlbmFibGUgIExFRCBzdXBwb3J0CisgICAgICAgIGxlZDowICAgICAgZGlzYWJsZSBMRUQgc3VwcG9ydAorICBEb25ub3QgZW5hYmxlIExFRCBzdXBwb3J0IGlmIHlvdXIgc2NzaSBib2FyZCBkb2VzIG5vdCB1c2UgU0RNUyBCSU9TLgorICAoU2VlICdDb25maWd1cmF0aW9uIHBhcmFtZXRlcnMnKQorCisxMC4yLjEzIE1heCB3aWRlCisgICAgICAgIHdpZGU6MSAgICAgIHdpZGUgc2NzaSBlbmFibGVkCisgICAgICAgIHdpZGU6MCAgICAgIHdpZGUgc2NzaSBkaXNhYmxlZAorICBTb21lIHNjc2kgYm9hcmRzIHVzZSBhIDg3NSAodWx0cmEgd2lkZSkgYW5kIG9ubHkgc3VwcGx5IG5hcnJvdyBjb25uZWN0b3JzLgorICBJZiB5b3UgaGF2ZSBjb25uZWN0ZWQgYSB3aWRlIGRldmljZSB3aXRoIGEgNTAgcGlucyB0byA2OCBwaW5zIGNhYmxlIAorICBjb252ZXJ0ZXIsIGFueSBhY2NlcHRlZCB3aWRlIG5lZ290aWF0aW9uIHdpbGwgYnJlYWsgZnVydGhlciBkYXRhIHRyYW5zZmVycy4KKyAgSW4gc3VjaCBhIGNhc2UsIHVzaW5nICJ3aWRlOjAiIGluIHRoZSBib290dXAgY29tbWFuZCB3aWxsIGJlIGhlbHBmdWxsLiAKKworMTAuMi4xNCBEaWZmZXJlbnRpYWwgbW9kZQorICAgICAgICBkaWZmOjAJbmV2ZXIgc2V0IHVwIGRpZmYgbW9kZQorICAgICAgICBkaWZmOjEJc2V0IHVwIGRpZmYgbW9kZSBpZiBCSU9TIHNldCBpdAorICAgICAgICBkaWZmOjIJYWx3YXlzIHNldCB1cCBkaWZmIG1vZGUKKyAgICAgICAgZGlmZjozCXNldCBkaWZmIG1vZGUgaWYgR1BJTzMgaXMgbm90IHNldAorCisxMC4yLjE1IElSUSBtb2RlCisgICAgICAgIGlycW06MCAgICAgYWx3YXlzIG9wZW4gZHJhaW4KKyAgICAgICAgaXJxbToxICAgICBzYW1lIGFzIGluaXRpYWwgc2V0dGluZ3MgKGFzc3VtZWQgQklPUyBzZXR0aW5ncykKKyAgICAgICAgaXJxbToyICAgICBhbHdheXMgdG90ZW0gcG9sZQorICAgICAgICBpcnFtOjB4MTAgIGRyaXZlciB3aWxsIG5vdCB1c2UgU0FfU0hJUlEgZmxhZyB3aGVuIHJlcXVlc3RpbmcgaXJxCisgICAgICAgIGlycW06MHgyMCAgZHJpdmVyIHdpbGwgbm90IHVzZSBTQV9JTlRFUlJVUFQgZmxhZyB3aGVuIHJlcXVlc3RpbmcgaXJxCisKKyAgICAoQml0cyAweDEwIGFuZCAweDIwIGNhbiBiZSBjb21iaW5lZCB3aXRoIGhhcmR3YXJlIGlycSBtb2RlIG9wdGlvbikKKworMTAuMi4xNiBSZXZlcnNlIHByb2JlCisgICAgICAgIHJldnByb2I6biAgIHByb2JlIGNoaXAgaWRzIGZyb20gdGhlIFBDSSBjb25maWd1cmF0aW9uIGluIHRoaXMgb3JkZXI6CisgICAgICAgICAgICAgICAgICAgIDgxMCwgODE1LCA4MjAsIDg2MCwgODc1LCA4ODUsIDg5NSwgODk2CisgICAgICAgIHJldnByb2I6eSAgIHByb2JlIGNoaXAgaWRzIGluIHRoZSByZXZlcnNlIG9yZGVyLgorCisxMC4yLjE3IEZpeCB1cCBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZQorICAgICAgICBwY2lmaXg6PG9wdGlvbiBiaXRzPgorCisgICAgQXZhaWxhYmxlIG9wdGlvbiBiaXRzOgorICAgICAgICAweDA6ICAgTm8gYXR0ZW1wdCB0byBmaXggUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgcmVnaXN0ZXJzIHZhbHVlcy4KKyAgICAgICAgMHgxOiAgIFNldCBQQ0kgY2FjaGUtbGluZSBzaXplIHJlZ2lzdGVyIGlmIG5vdCBzZXQuCisgICAgICAgIDB4MjogICBTZXQgd3JpdGUgYW5kIGludmFsaWRhdGUgYml0IGluIFBDSSBjb21tYW5kIHJlZ2lzdGVyLgorICAgICAgICAweDQ6ICAgSW5jcmVhc2UgaWYgbmVjZXNzYXJ5IFBDSSBsYXRlbmN5IHRpbWVyIGFjY29yZGluZyB0byBidXJzdCBtYXguCisKKyAgICBVc2UgJ3BjaWZpeDo3JyBpbiBvcmRlciB0byBhbGxvdyB0aGUgZHJpdmVyIHRvIGZpeCB1cCBhbGwgUENJIGZlYXR1cmVzLgorCisxMC4yLjE4IFNlcmlhbCBOVlJBTQorICAgICAgICBudnJhbTpuICAgICBkbyBub3QgbG9vayBmb3Igc2VyaWFsIE5WUkFNCisgICAgICAgIG52cmFtOnkgICAgIHRlc3QgY29udHJvbGxlcnMgZm9yIG9uYm9hcmQgc2VyaWFsIE5WUkFNCisgICAgICAgIChhbHRlcm5hdGUgYmluYXJ5IGZvcm0pCisgICAgICAgIG12cmFtPTxiaXRzIG9wdGlvbnM+CisgICAgICAgIDB4MDEgICBsb29rIGZvciBOVlJBTSAgKGVxdWl2YWxlbnQgdG8gbnZyYW09eSkKKyAgICAgICAgMHgwMiAgIGlnbm9yZSBOVlJBTSAiU3luY2hyb25vdXMgbmVnb3RpYXRpb24iIHBhcmFtZXRlcnMgZm9yIGFsbCBkZXZpY2VzCisgICAgICAgIDB4MDQgICBpZ25vcmUgTlZSQU0gIldpZGUgbmVnb3RpYXRpb24iICBwYXJhbWV0ZXIgZm9yIGFsbCBkZXZpY2VzCisgICAgICAgIDB4MDggICBpZ25vcmUgTlZSQU0gIlNjYW4gYXQgYm9vdCB0aW1lIiBwYXJhbWV0ZXIgZm9yIGFsbCBkZXZpY2VzCisgICAgICAgIDB4ODAgICBhbHNvIGF0dGFjaCBjb250cm9sbGVycyBzZXQgdG8gT0ZGIGluIHRoZSBOVlJBTSAoc3ltNTNjOHh4IG9ubHkpCisKKzEwLjIuMTkgQ2hlY2sgU0NTSSBCVVMgCisgICAgICAgIGJ1c2Noazo8b3B0aW9uIGJpdHM+CisKKyAgICBBdmFpbGFibGUgb3B0aW9uIGJpdHM6CisgICAgICAgIDB4MDogICBObyBjaGVjay4KKyAgICAgICAgMHgxOiAgIENoZWNrIGFuZCBkbyBub3QgYXR0YWNoIHRoZSBjb250cm9sbGVyIG9uIGVycm9yLiAgCisgICAgICAgIDB4MjogICBDaGVjayBhbmQganVzdCB3YXJuIG9uIGVycm9yLgorICAgICAgICAweDQ6ICAgRGlzYWJsZSBTQ1NJIGJ1cyBpbnRlZ3JpdHkgY2hlY2tpbmcuCisKKzEwLjIuMjAgRXhjbHVkZSBhIGhvc3QgZnJvbSBiZWluZyBhdHRhY2hlZAorICAgICAgICBleGNsPTxpb19hZGRyZXNzPgorCisgICAgUHJldmVudCBob3N0IGF0IGEgZ2l2ZW4gaW8gYWRkcmVzcyBmcm9tIGJlaW5nIGF0dGFjaGVkLgorICAgIEZvciBleGFtcGxlICduY3I1M2M4eHg9ZXhjbDoweGI0MDAsZXhjbDoweGMwMDAnIGluZGljYXRlIHRvIHRoZSAKKyAgICBuY3I1M2M4eHggZHJpdmVyIG5vdCB0byBhdHRhY2ggaG9zdHMgYXQgYWRkcmVzcyAweGI0MDAgYW5kIDB4YzAwMC4KKworMTAuMi4yMSBTdWdnZXN0IGEgZGVmYXVsdCBTQ1NJIGlkIGZvciBob3N0cworICAgICAgICBob3N0aWQ6MjU1CW5vIGlkIHN1Z2dlc3RlZC4KKyAgICAgICAgaG9zdGlkOiN4ICAgKDAgPCB4IDwgNykgeCBzdWdnZXN0ZWQgZm9yIGhvc3RzIFNDU0kgaWQuCisKKyAgICBJZiBhIGhvc3QgU0NTSSBpZCBpcyBhdmFpbGFibGUgZnJvbSB0aGUgTlZSQU0sIHRoZSBkcml2ZXIgd2lsbCBpZ25vcmUgCisgICAgYW55IHZhbHVlIHN1Z2dlc3RlZCBhcyBib290IG9wdGlvbi4gT3RoZXJ3aXNlLCBpZiBhIHN1Z2dlc3RlZCB2YWx1ZSAKKyAgICBkaWZmZXJlbnQgZnJvbSAyNTUgaGFzIGJlZW4gc3VwcGxpZWQsIGl0IHdpbGwgdXNlIGl0LiBPdGhlcndpc2UsIGl0IHdpbGwgCisgICAgdHJ5IHRvIGRlZHVjZSB0aGUgdmFsdWUgcHJldmlvdXNseSBzZXQgaW4gdGhlIGhhcmR3YXJlIGFuZCB1c2UgdmFsdWUgCisgICAgNyBpZiB0aGUgaGFyZHdhcmUgdmFsdWUgaXMgemVyby4KKworMTAuMi4yMiBFbmFibGUgdXNlIG9mIElNTUVESUFURSBBUkJJVFJBVElPTgorICAgICAgICAob25seSBzdXBwb3J0ZWQgYnkgdGhlIHN5bTUzYzh4eCBkcml2ZXIuIFNlZSAxMC43IGZvciBtb3JlIGRldGFpbHMpCisgICAgICAgIGlhcmI6MCAgICBkbyBub3QgdXNlIHRoaXMgZmVhdHVyZS4KKyAgICAgICAgaWFyYjojeCAgIHVzZSB0aGlzIGZlYXR1cmUgYWNjb3JkaW5nIHRvIGJpdCBmaWVsZHMgYXMgZm9sbG93OgorCisgICAgYml0IDAgKDEpIDogZW5hYmxlIElBUkIgZWFjaCB0aW1lIHRoZSBpbml0aWF0b3IgaGFzIGJlZW4gcmVzZWxlY3RlZCAKKyAgICAgICAgICAgICAgICB3aGVuIGl0IGFyYml0cmF0ZWQgZm9yIHRoZSBTQ1NJIEJVUy4KKyAgICAoI3ggPj4gNCkgOiBtYXhpbXVtIG51bWJlciBvZiBzdWNjZXNzaXZlIHNldHRpbmdzIG9mIElBUkIgaWYgdGhlIGluaXRpYXRvciAKKyAgICAgICAgICAgICAgICB3aW4gYXJiaXRyYXRpb24gYW5kIGl0IGhhcyBvdGhlciBjb21tYW5kcyB0byBzZW5kIHRvIGEgZGV2aWNlLgorCitCb290IGZhaWwgc2FmZQorICAgIHNhZmU6eQlsb2FkIHRoZSBmb2xsb3dpbmcgYXNzdW1lZCBmYWlsIHNhZmUgaW5pdGlhbCBzZXR1cAorCisgIG1hc3RlciBwYXJpdHkJCQlkaXNhYmxlZAkJbXBhcjpuCisgIHNjc2kgcGFyaXR5CQkJZW5hYmxlZAkJCXNwYXI6eQorICBkaXNjb25uZWN0aW9ucwkJbm90IGFsbG93ZWQJCWRpc2M6bgorICBzcGVjaWFsIGZlYXR1cmVzCQlkaXNhYmxlZAkJc3BlY2Y6bgorICB1bHRyYSBzY3NpCQkJZGlzYWJsZWQJCXVsdHJhOm4KKyAgZm9yY2Ugc3luYyBuZWdvdGlhdGlvbglkaXNhYmxlZAkJZnNuOm4KKyAgcmV2ZXJzZSBwcm9iZQkJCWRpc2FibGVkCQlyZXZwcm9iOm4KKyAgUENJIGZpeCB1cCAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQgICAgICAgICAgICAgICAgcGNpZml4OjAKKyAgc2VyaWFsIE5WUkFNICAgICAgICAgICAgICAgICAgZW5hYmxlZCAgICAgICAgICAgICAgICAgbnZyYW06eQorICB2ZXJib3NpdHkgbGV2ZWwJCTIJCQl2ZXJiOjIKKyAgdGFnZ2VkIGNvbW1hbmQgcXVldWluZwlkaXNhYmxlZAkJdGFnczowCisgIHN5bmNocm9ub3VzIG5lZ290aWF0aW9uCWRpc2FibGVkCQlzeW5jOjI1NQorICBkZWJ1ZyBmbGFncwkJCW5vbmUJCQlkZWJ1ZzowCisgIGJ1cnN0IGxlbmd0aAkJCWZyb20gQklPUyBzZXR0aW5ncwlidXJzdDoyNTUKKyAgTEVEIHN1cHBvcnQJCQlkaXNhYmxlZAkJbGVkOjAKKyAgd2lkZSBzdXBwb3J0CQkJZGlzYWJsZWQJCXdpZGU6MAorICBzZXR0bGUgdGltZQkJCTEwIHNlY29uZHMJCXNldHRsZToxMAorICBkaWZmZXJlbnRpYWwgc3VwcG9ydAkJZnJvbSBCSU9TIHNldHRpbmdzCWRpZmY6MQorICBpcnEgbW9kZQkJCWZyb20gQklPUyBzZXR0aW5ncwlpcnFtOjEKKyAgU0NTSSBCVVMgY2hlY2sJCWRvIG5vdCBhdHRhY2ggb24gZXJyb3IJYnVzY2hrOjEKKyAgaW1tZWRpYXRlIGFyYml0cmF0aW9uCQlkaXNhYmxlZAkJaWFyYjowCisKKzEwLjMgQWR2aXNlZCBib290IHNldHVwIGNvbW1hbmRzCisKK0lmIHRoZSBkcml2ZXIgaGFzIGJlZW4gY29uZmlndXJlZCB3aXRoIGRlZmF1bHQgb3B0aW9ucywgdGhlIGVxdWl2YWxlbnQgCitib290IHNldHVwIGlzOgorCisgICBuY3I1M2M4eHg9bXBhcjp5LHNwYXI6eSxkaXNjOnksc3BlY2Y6Myxmc246bix1bHRyYToyLGZzbjpuLHJldnByb2I6bix2ZXJiOjFcCisgICAgICAgICAgICAgdGFnczowLHN5bmM6NTAsZGVidWc6MCxidXJzdDo3LGxlZDowLHdpZGU6MSxzZXR0bGU6MixkaWZmOjAsaXJxbTowCisKK0ZvciBhbiBpbnN0YWxsYXRpb24gZGlza2V0dGUgb3IgYSBzYWZlIGJ1dCBub3QgZmFzdCBzeXN0ZW0sCitib290IHNldHVwIGNhbiBiZToKKworICAgIG5jcjUzYzh4eD1zYWZlOnksbXBhcjp5LGRpc2M6eQorICAgIG5jcjUzYzh4eD1zYWZlOnksZGlzYzp5CisgICAgbmNyNTNjOHh4PXNhZmU6eSxtcGFyOnkKKyAgICBuY3I1M2M4eHg9c2FmZTp5CisKK015IHBlcnNvbm5hbCBzeXN0ZW0gd29ya3MgZmxhd2xlc3NseSB3aXRoIHRoZSBmb2xsb3dpbmcgZXF1aXZhbGVudCBzZXR1cDoKKworICAgbmNyNTNjOHh4PW1wYXI6eSxzcGFyOnksZGlzYzp5LHNwZWNmOjEsZnNuOm4sdWx0cmE6Mixmc246bixyZXZwcm9iOm4sdmVyYjoxXAorICAgICAgICAgICAgIHRhZ3M6MzIsc3luYzoxMixkZWJ1ZzowLGJ1cnN0OjcsbGVkOjEsd2lkZToxLHNldHRsZToyLGRpZmY6MCxpcnFtOjAKKworVGhlIGRyaXZlciBwcmludHMgaXRzIGFjdHVhbCBzZXR1cCB3aGVuIHZlcmJvc2l0eSBsZXZlbCBpcyAyLiBZb3UgY2FuIHRyeSAKKyJuY3I1M2M4eHg9dmVyYjoyIiB0byBnZXQgdGhlICJzdGF0aWMiIHNldHVwIG9mIHRoZSBkcml2ZXIsIG9yIGFkZCAidmVyYjoyIiAKK3RvIHlvdXIgYm9vdCBzZXR1cCBjb21tYW5kIGluIG9yZGVyIHRvIGNoZWNrIHRoZSBhY3R1YWwgc2V0dXAgdGhlIGRyaXZlciBpcyAKK3VzaW5nLgorCisxMC40IFBDSSBjb25maWd1cmF0aW9uIGZpeC11cCBib290IG9wdGlvbgorCitwY2lmaXg6PG9wdGlvbiBiaXRzPgorCitBdmFpbGFibGUgb3B0aW9uIGJpdHM6CisgICAgMHgxOiAgICAgU2V0IFBDSSBjYWNoZS1saW5lIHNpemUgcmVnaXN0ZXIgaWYgbm90IHNldC4KKyAgICAweDI6ICAgICBTZXQgd3JpdGUgYW5kIGludmFsaWRhdGUgYml0IGluIFBDSSBjb21tYW5kIHJlZ2lzdGVyLgorCitVc2UgJ3BjaWZpeDozJyBpbiBvcmRlciB0byBhbGxvdyB0aGUgZHJpdmVyIHRvIGZpeCBib3RoIFBDSSBmZWF0dXJlcy4KKworVGhlc2Ugb3B0aW9ucyBvbmx5IGFwcGx5IHRvIG5ldyBTWU1CSU9TIGNoaXBzIDgxMEEsIDgyNUEsIDg2MCwgODc1IAorYW5kIDg5NSBhbmQgYXJlIG9ubHkgc3VwcG9ydGVkIGZvciBQZW50aXVtIGFuZCA0ODYgY2xhc3MgcHJvY2Vzc29ycy4KK1JlY2VudCBTWU1CSU9TIDUzQzhYWCBzY3NpIHByb2Nlc3NvcnMgYXJlIGFibGUgdG8gdXNlIFBDSSByZWFkIG11bHRpcGxlIAorYW5kIFBDSSB3cml0ZSBhbmQgaW52YWxpZGF0ZSBjb21tYW5kcy4gVGhlc2UgZmVhdHVyZXMgcmVxdWlyZSB0aGUgCitjYWNoZSBsaW5lIHNpemUgcmVnaXN0ZXIgdG8gYmUgcHJvcGVybHkgc2V0IGluIHRoZSBQQ0kgY29uZmlndXJhdGlvbiAKK3NwYWNlIG9mIHRoZSBjaGlwcy4gT24gdGhlIG90aGVyIGhhbmQsIGNoaXBzIHdpbGwgdXNlIFBDSSB3cml0ZSBhbmQgCitpbnZhbGlkYXRlIGNvbW1hbmRzIG9ubHkgaWYgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGlzIHNldCB0byAxIGluIHRoZSAKK1BDSSBjb21tYW5kIHJlZ2lzdGVyLgorCitOb3QgYWxsIFBDSSBiaW9zZXMgc2V0IHRoZSBQQ0kgY2FjaGUgbGluZSByZWdpc3RlciBhbmQgdGhlIFBDSSB3cml0ZSBhbmQgCitpbnZhbGlkYXRlIGJpdCBpbiB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2Ugb2YgNTNDOFhYIGNoaXBzLgorT3B0aW1pemVkIFBDSSBhY2Nlc3NlcyBtYXkgYmUgYnJva2VuIGZvciBzb21lIFBDSS9tZW1vcnkgY29udHJvbGxlcnMgb3IgCittYWtlIHByb2JsZW1zIHdpdGggc29tZSBQQ0kgYm9hcmRzLgorCitUaGlzIGZpeC11cCB3b3JrZWQgZmxhd2xlc3NseSBvbiBteSBwcmV2aW91cyBzeXN0ZW0uCisoTUIgVHJpdG9uIEhYIC8gNTNDODc1IC8gNTNDODEwQSkKK0kgdXNlIHRoZXNlIG9wdGlvbnMgYXQgbXkgb3duIHJpc2tzIGFzIHlvdSB3aWxsIGRvIGlmIHlvdSBkZWNpZGUgdG8gCit1c2UgdGhlbSB0b28uCisKKworMTAuNSBTZXJpYWwgTlZSQU0gc3VwcG9ydCBib290IG9wdGlvbgorCitudnJhbTpuICAgICBkbyBub3QgbG9vayBmb3Igc2VyaWFsIE5WUkFNCitudnJhbTp5ICAgICB0ZXN0IGNvbnRyb2xsZXJzIGZvciBvbmJvYXJkIHNlcmlhbCBOVlJBTQorCitUaGlzIG9wdGlvbiBjYW4gYWxzbyBiZWVuIGVudGVyZWQgYXMgYW4gaGV4YWRlY2ltYWwgdmFsdWUgdGhhdCBhbGxvd3MgCit0byBjb250cm9sIHdoYXQgaW5mb3JtYXRpb24gdGhlIGRyaXZlciB3aWxsIGdldCBmcm9tIHRoZSBOVlJBTSBhbmQgd2hhdCAKK2luZm9ybWF0aW9uIGl0IHdpbGwgaWdub3JlLgorRm9yIGRldGFpbHMgc2VlICcxNy4gU2VyaWFsIE5WUkFNIHN1cHBvcnQnLgorCitXaGVuIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIHRoZSBkcml2ZXIgdHJpZXMgdG8gZGV0ZWN0IGFsbCBib2FyZHMgdXNpbmcgCithIFNlcmlhbCBOVlJBTS4gVGhpcyBtZW1vcnkgaXMgdXNlZCB0byBob2xkIHVzZXIgc2V0IHVwIHBhcmFtZXRlcnMuCisKK1RoZSBwYXJhbWV0ZXJzIHRoZSBkcml2ZXIgaXMgYWJsZSB0byBnZXQgZnJvbSB0aGUgTlZSQU0gZGVwZW5kIG9uIHRoZSAKK2RhdGEgZm9ybWF0IHVzZWQsIGFzIGZvbGxvdzoKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVrcmFtIGZvcm1hdCAgICAgIFN5bWJpb3MgZm9ybWF0CitHZW5lcmFsIGFuZCBob3N0IHBhcmFtZXRlcnMKKyAgICBCb290IG9yZGVyICAgICAgICAgICAgICAgICAgICAgICAgIE4gICAgICAgICAgICAgICAgICAgWQorICAgIEhvc3QgU0NTSSBJRCAgICAgICAgICAgICAgICAgICAgICAgWSAgICAgICAgICAgICAgICAgICBZCisgICAgU0NTSSBwYXJpdHkgY2hlY2tpbmcgICAgICAgICAgICAgICBZICAgICAgICAgICAgICAgICAgIFkKKyAgICBWZXJib3NlIGJvb3QgbWVzc2FnZXMgICAgICAgICAgICAgIE4gICAgICAgICAgICAgICAgICAgWQorU0NTSSBkZXZpY2VzIHBhcmFtZXRlcnMKKyAgICBTeW5jaHJvbm91cyB0cmFuc2ZlciBzcGVlZCAgICAgICAgIFkgICAgICAgICAgICAgICAgICAgWQorICAgIFdpZGUgMTYgLyBOYXJyb3cgICAgICAgICAgICAgICAgICAgWSAgICAgICAgICAgICAgICAgICBZCisgICAgVGFnZ2VkIENvbW1hbmQgUXVldWluZyBlbmFibGVkICAgICBZICAgICAgICAgICAgICAgICAgIFkKKyAgICBEaXNjb25uZWN0aW9ucyBlbmFibGVkICAgICAgICAgICAgIFkgICAgICAgICAgICAgICAgICAgWQorICAgIFNjYW4gYXQgYm9vdCB0aW1lICAgICAgICAgICAgICAgICAgTiAgICAgICAgICAgICAgICAgICBZCisKK0luIG9yZGVyIHRvIHNwZWVkIHVwIHRoZSBzeXN0ZW0gYm9vdCwgZm9yIGVhY2ggZGV2aWNlIGNvbmZpZ3VyZWQgd2l0aG91dCAKK3RoZSAic2NhbiBhdCBib290IHRpbWUiIG9wdGlvbiwgdGhlIGRyaXZlciBmb3JjZXMgYW4gZXJyb3Igb24gdGhlIAorZmlyc3QgVEVTVCBVTklUIFJFQURZIGNvbW1hbmQgcmVjZWl2ZWQgZm9yIHRoaXMgZGV2aWNlLgorCitTb21lIFNETVMgQklPUyByZXZpc2lvbnMgc2VlbSB0byBiZSB1bmFibGUgdG8gYm9vdCBjbGVhbmx5IHdpdGggdmVyeSBmYXN0IAoraGFyZCBkaXNrcy4gSW4gc3VjaCBhIHNpdHVhdGlvbiB5b3UgY2Fubm90IGNvbmZpZ3VyZSB0aGUgTlZSQU0gd2l0aCAKK29wdGltaXplZCBwYXJhbWV0ZXJzIHZhbHVlLgorCitUaGUgJ252cmFtJyBib290IG9wdGlvbiBjYW4gYmUgZW50ZXJlZCBpbiBoZXhhZGVjaW1hbCBmb3JtIGluIG9yZGVyIAordG8gaWdub3JlIHNvbWUgb3B0aW9ucyBjb25maWd1cmVkIGluIHRoZSBOVlJBTSwgYXMgZm9sbG93OgorCittdnJhbT08Yml0cyBvcHRpb25zPgorICAgICAgMHgwMSAgIGxvb2sgZm9yIE5WUkFNICAoZXF1aXZhbGVudCB0byBudnJhbT15KQorICAgICAgMHgwMiAgIGlnbm9yZSBOVlJBTSAiU3luY2hyb25vdXMgbmVnb3RpYXRpb24iIHBhcmFtZXRlcnMgZm9yIGFsbCBkZXZpY2VzCisgICAgICAweDA0ICAgaWdub3JlIE5WUkFNICJXaWRlIG5lZ290aWF0aW9uIiAgcGFyYW1ldGVyIGZvciBhbGwgZGV2aWNlcworICAgICAgMHgwOCAgIGlnbm9yZSBOVlJBTSAiU2NhbiBhdCBib290IHRpbWUiIHBhcmFtZXRlciBmb3IgYWxsIGRldmljZXMKKyAgICAgIDB4ODAgICBhbHNvIGF0dGFjaCBjb250cm9sbGVycyBzZXQgdG8gT0ZGIGluIHRoZSBOVlJBTSAoc3ltNTNjOHh4IG9ubHkpCisKK09wdGlvbiAweDgwIGlzIG9ubHkgc3VwcG9ydGVkIGJ5IHRoZSBzeW01M2M4eHggZHJpdmVyIGFuZCBpcyBkaXNhYmxlZCBieSAKK2RlZmF1bHQuIFJlc3VsdCBpcyB0aGF0LCBieSBkZWZhdWx0IChvcHRpb24gbm90IHNldCksIHRoZSBzeW01M2M4eHggZHJpdmVyIAord2lsbCBub3QgYXR0YWNoIGNvbnRyb2xsZXJzIHNldCB0byBPRkYgaW4gdGhlIE5WUkFNLgorCitUaGUgbmNyNTNjOHh4IGFsd2F5cyB0cmllcyB0byBhdHRhY2ggYWxsIHRoZSBjb250cm9sbGVycy4gT3B0aW9uIDB4ODAgaGFzIAorbm90IGJlZW4gYWRkZWQgdG8gdGhlIG5jcjUzYzh4eCBkcml2ZXIsIHNpbmNlIGl0IGhhcyBiZWVuIHJlcG9ydGVkIHRvIAorY29uZnVzZSB1c2VycyB3aG8gdXNlIHRoaXMgZHJpdmVyIHNpbmNlIGEgbG9uZyB0aW1lLiBJZiB5b3UgZGVzaXJlIGEgCitjb250cm9sbGVyIG5vdCB0byBiZSBhdHRhY2hlZCBieSB0aGUgbmNyNTNjOHh4IGRyaXZlciBhdCBMaW51eCBib290LCB5b3UgCittdXN0IHVzZSB0aGUgJ2V4Y2wnIGRyaXZlciBib290IG9wdGlvbi4KKworMTAuNiBTQ1NJIEJVUyBjaGVja2luZyBib290IG9wdGlvbi4KKworV2hlbiB0aGlzIG9wdGlvbiBpcyBzZXQgdG8gYSBub24temVybyB2YWx1ZSwgdGhlIGRyaXZlciBjaGVja3MgU0NTSSBsaW5lcyAKK2xvZ2ljIHN0YXRlLCAxMDAgbWljcm8tc2Vjb25kcyBhZnRlciBoYXZpbmcgYXNzZXJ0ZWQgdGhlIFNDU0kgUkVTRVQgbGluZS4KK1RoZSBkcml2ZXIganVzdCByZWFkcyBTQ1NJIGxpbmVzIGFuZCBjaGVja3MgYWxsIGxpbmVzIHJlYWQgRkFMU0UgZXhjZXB0IFJFU0VULgorU2luY2UgU0NTSSBkZXZpY2VzIHNoYWxsIHJlbGVhc2UgdGhlIEJVUyBhdCBtb3N0IDgwMCBuYW5vLXNlY29uZHMgYWZ0ZXIgU0NTSSAKK1JFU0VUIGhhcyBiZWVuIGFzc2VydGVkLCBhbnkgc2lnbmFsIHRvIFRSVUUgbWF5IGluZGljYXRlIGEgU0NTSSBCVVMgcHJvYmxlbS4KK1VuZm9ydHVuYXRlbHksIHRoZSBmb2xsb3dpbmcgY29tbW9uIFNDU0kgQlVTIHByb2JsZW1zIGFyZSBub3QgZGV0ZWN0ZWQ6CistIE9ubHkgMSB0ZXJtaW5hdG9yIGluc3RhbGxlZC4KKy0gTWlzcGxhY2VkIHRlcm1pbmF0b3JzLgorLSBCYWQgcXVhbGl0eSB0ZXJtaW5hdG9ycy4KK09uIHRoZSBvdGhlciBoYW5kLCBlaXRoZXIgYmFkIGNhYmxpbmcsIGJyb2tlbiBkZXZpY2VzLCBub3QgY29uZm9ybWFudCAKK2RldmljZXMsIC4uLiBtYXkgY2F1c2UgYSBTQ1NJIHNpZ25hbCB0byBiZSB3cm9uZyB3aGVuIHRlIGRyaXZlciByZWFkcyBpdC4KKworMTAuNyBJTU1FRElBVEUgQVJCSVRSQVRJT04gYm9vdCBvcHRpb24KKworVGhpcyBvcHRpb24gaXMgb25seSBzdXBwb3J0ZWQgYnkgdGhlIFNZTTUzQzhYWCBkcml2ZXIgKG5vdCBieSB0aGUgTkNSNTNDOFhYKS4KKworU1lNQklPUyA1M0M4WFggY2hpcHMgYXJlIGFibGUgdG8gYXJiaXRyYXRlIGZvciB0aGUgU0NTSSBCVVMgYXMgc29vbiBhcyB0aGV5IAoraGF2ZSBkZXRlY3RlZCBhbiBleHBlY3RlZCBkaXNjb25uZWN0aW9uIChCVVMgRlJFRSBQSEFTRSkuIEZvciB0aGlzIHByb2Nlc3MgCit0byBiZSBzdGFydGVkLCBiaXQgMSBvZiBTQ05UTDEgSU8gcmVnaXN0ZXIgbXVzdCBiZSBzZXQgd2hlbiB0aGUgY2hpcCBpcyAKK2Nvbm5lY3RlZCB0byB0aGUgU0NTSSBCVVMuCisKK1doZW4gdGhpcyBmZWF0dXJlIGhhcyBiZWVuIGVuYWJsZWQgZm9yIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24sIHRoZSBjaGlwIGhhcyAKK2V2ZXJ5IGNoYW5jZSB0byB3aW4gYXJiaXRyYXRpb24gaWYgb25seSBkZXZpY2VzIHdpdGggbG93ZXIgcHJpb3JpdHkgYXJlIAorY29tcGV0aW5nIGZvciB0aGUgU0NTSSBCVVMuIEJ5IHRoZSB3YXksIHdoZW4gdGhlIGNoaXAgaXMgdXNpbmcgU0NTSSBpZCA3LCAKK3RoZW4gaXQgd2lsbCBmb3Igc3VyZSB3aW4gdGhlIG5leHQgU0NTSSBCVVMgYXJiaXRyYXRpb24uCisKK1NpbmNlLCB0aGVyZSBpcyBubyB3YXkgdG8ga25vdyB3aGF0IGRldmljZXMgYXJlIHRyeWluZyB0byBhcmJpdHJhdGUgZm9yIHRoZSAKK0JVUywgdXNpbmcgdGhpcyBmZWF0dXJlIGNhbiBiZSBleHRyZW1lbHkgdW5mYWlyLiBTbywgeW91IGFyZSBub3QgYWR2aXNlZAordG8gZW5hYmxlIGl0LCBvciBhdCBtb3N0IGVuYWJsZSB0aGlzIGZlYXR1cmUgZm9yIHRoZSBjYXNlIHRoZSBjaGlwIGxvc3QgCit0aGUgcHJldmlvdXMgYXJiaXRyYXRpb24gKGJvb3Qgb3B0aW9uICdpYXJiOjEnKS4KKworVGhpcyBmZWF0dXJlIGhhcyB0aGUgZm9sbG93aW5nIGFkdmFudGFnZXM6CisKK2EpIEFsbG93IHRoZSBpbml0aWF0b3Igd2l0aCBJRCA3IHRvIHdpbiBhcmJpdHJhdGlvbiB3aGVuIGl0IHdhbnRzIHNvLgorYikgT3ZlcmxhcCBhdCBsZWFzdCA0IG1pY3JvLXNlY29uZHMgb2YgYXJiaXRyYXRpb24gdGltZSB3aXRoIHRoZSBleGVjdXRpb24gCisgICBvZiBTQ1JJUFRTIHRoYXQgZGVhbCB3aXRoIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgY29ubmVjdGlvbiBhbmQgdGhhdCAKKyAgIHN0YXJ0cyB0aGUgbmV4dCBqb2IuCisKK0htbW0uLi4gQnV0IChhKSBtYXkganVzdCBwcmV2ZW50IG90aGVyIGRldmljZXMgZnJvbSByZXNlbGVjdGluZyB0aGUgaW5pdGlhdG9yLCAKK2FuZCBkZWxheSBkYXRhIHRyYW5zZmVycyBvciBzdGF0dXMvY29tcGxldGlvbnMsIGFuZCAoYikgbWF5IGp1c3Qgd2FzdGUgCitTQ1NJIEJVUyBiYW5kd2lkdGggaWYgdGhlIFNDUklQVFMgZXhlY3V0aW9uIGxhc3RzIG1vcmUgdGhhbiA0IG1pY3JvLXNlY29uZHMuCisKK1RoZSB1c2Ugb2YgSUFSQiBuZWVkcyB0aGUgU0NTSV9OQ1JfSUFSQl9TVVBQT1JUIG9wdGlvbiB0byBoYXZlIGJlZW4gZGVmaW5lZCAKK2F0IGNvbXBpbGUgdGltZSBhbmQgdGhlICdpYXJiJyBib290IG9wdGlvbiB0byBoYXZlIGJlZW4gc2V0IHRvIGEgbm9uIHplcm8gCit2YWx1ZSBhdCBib290IHRpbWUuIEl0IGlzIG5vdCB0aGF0IHVzZWZ1bCBmb3IgcmVhbCB3b3JrLCBidXQgY2FuIGJlIHVzZWQgCit0byBzdHJlc3MgU0NTSSBkZXZpY2VzIG9yIGZvciBzb21lIGFwcGxpY2F0aW9ucyB0aGF0IGNhbiBnYWluIGFkdmFudGFnZSBvZiAKK2l0LiBCeSB0aGUgd2F5LCBpZiB5b3UgZXhwZXJpZW5jZSBiYWRuZXNzZXMgbGlrZSAndW5leHBlY3RlZCBkaXNjb25uZWN0aW9ucycsIAorJ2JhZCByZXNlbGVjdGlvbnMnLCBldGMuLi4gd2hlbiB1c2luZyBJQVJCIG9uIGhlYXZ5IElPIGxvYWQsIHlvdSBzaG91bGQgbm90IAorYmUgc3VycHJpc2VkLCBiZWNhdXNlIGZvcmNlLWZlZWRpbmcgYW55dGhpbmcgYW5kIGJsb2NraW5nIGl0cyBhcnNlIGF0IHRoZSAKK3NhbWUgdGltZSBjYW5ub3Qgd29yayBmb3IgYSBsb25nIHRpbWUuIDotKSkKKworCisxMS4gU29tZSBjb25zdGFudHMgYW5kIGZsYWdzIG9mIHRoZSBuY3I1M2M4eHguaCBoZWFkZXIgZmlsZQorCitTb21lIG9mIHRoZXNlIGFyZSBkZWZpbmVkIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4gIFRvCitjaGFuZ2Ugb3RoZXIgImRlZmluZXMiLCB5b3UgbXVzdCBlZGl0IHRoZSBoZWFkZXIgZmlsZS4gIERvIHRoYXQgb25seQoraWYgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgorCitTQ1NJX05DUl9TRVRVUF9TUEVDSUFMX0ZFQVRVUkVTCShkZWZhdWx0OiBkZWZpbmVkKQorCUlmIGRlZmluZWQsIHRoZSBkcml2ZXIgd2lsbCBlbmFibGUgc29tZSBzcGVjaWFsIGZlYXR1cmVzIGFjY29yZGluZyAgCisJdG8gY2hpcCBhbmQgcmV2aXNpb24gaWQuCisgICAgICAgIEZvciA4MTBBLCA4NjAsIDgyNUEsIDg3NSBhbmQgODk1IHNjc2kgY2hpcHMsIHRoaXMgb3B0aW9uIGVuYWJsZXMgCisJc3VwcG9ydCBvZiBmZWF0dXJlcyB0aGF0IHJlZHVjZSBsb2FkIG9mIFBDSSBidXMgYW5kIG1lbW9yeSBhY2Nlc3NlcyAKKwlkdXJpbmcgIHNjc2kgdHJhbnNmZXIgcHJvY2Vzc2luZzogYnVyc3Qgb3AtY29kZSBmZXRjaCwgcmVhZCBtdWx0aXBsZSwgCisgICAgICAgIHJlYWQgbGluZSwgcHJlZmV0Y2gsIGNhY2hlIGxpbmUsIHdyaXRlIGFuZCBpbnZhbGlkYXRlLCAKKyAgICAgICAgYnVyc3QgMTI4ICg4NzUgb25seSksIGxhcmdlIGRtYSBmaWZvICg4NzUgb25seSksIG9mZnNldCAxNiAoODc1IG9ubHkpLgorCUNhbiBiZSBjaGFuZ2VkIGJ5IHRoZSBmb2xsb3dpbmcgYm9vdCBzZXR1cCBjb21tYW5kOgorCQluY3I1M2M4eHg9c3BlY2Y6bgorCitTQ1NJX05DUl9JT01BUFBFRAkJKGRlZmF1bHQ6IG5vdCBkZWZpbmVkKQorCUlmIGRlZmluZWQsIG5vcm1hbCBJL08gaXMgZm9yY2VkLgorCitTQ1NJX05DUl9TSEFSRV9JUlEJCShkZWZhdWx0OiBkZWZpbmVkKQorCUlmIGRlZmluZWQsIHJlcXVlc3Qgc2hhcmVkIElSUS4KKwkKK1NDU0lfTkNSX01BWF9UQUdTCQkoZGVmYXVsdDogOCkKKwlNYXhpbXVtIG51bWJlciBvZiBzaW11bHRhbmVvdXMgdGFnZ2VkIGNvbW1hbmRzIHRvIGEgZGV2aWNlLgorCUNhbiBiZSBjaGFuZ2VkIGJ5ICJzZXR0YWdzIDx0YXJnZXQ+IDxtYXh0YWdzPiIKKworU0NTSV9OQ1JfU0VUVVBfREVGQVVMVF9TWU5DICAgICAoZGVmYXVsdDogNTApCisJVHJhbnNmZXIgcGVyaW9kIGZhY3RvciB0aGUgZHJpdmVyIHdpbGwgdXNlIGF0IGJvb3QgdGltZSBmb3Igc3luY2hyb25vdXMgCisJbmVnb3RpYXRpb24uIDAgbWVhbnMgYXN5bmNocm9ub3VzLgorCUNhbiBiZSBjaGFuZ2VkIGJ5ICJzZXRzeW5jIDx0YXJnZXQ+IDxwZXJpb2QgZmFjdG9yPiIKKworU0NTSV9OQ1JfU0VUVVBfREVGQVVMVF9UQUdTICAgICAoZGVmYXVsdDogOCkKKwlEZWZhdWx0IG51bWJlciBvZiBzaW11bHRhbmVvdXMgdGFnZ2VkIGNvbW1hbmRzIHRvIGEgZGV2aWNlLgorCTwgMSBtZWFucyB0YWdnZWQgY29tbWFuZCBxdWV1aW5nIGRpc2FibGVkIGF0IHN0YXJ0LXVwLgorCitTQ1NJX05DUl9BTFdBWVNfU0lNUExFX1RBRwkoZGVmYXVsdDogZGVmaW5lZCkKKwlVc2UgU0lNUExFIFRBRyBmb3IgcmVhZCBhbmQgd3JpdGUgY29tbWFuZHMuCisJQ2FuIGJlIGNoYW5nZWQgYnkgInNldG9yZGVyIDxvcmRlcmVkfHNpbXBsZXxkZWZhdWx0PiIKKworU0NTSV9OQ1JfU0VUVVBfRElTQ09OTkVDVElPTgkoZGVmYXVsdDogZGVmaW5lZCkKKwlJZiBkZWZpbmVkLCB0YXJnZXRzIGFyZSBhbGxvd2VkIHRvIGRpc2Nvbm5lY3QuCisKK1NDU0lfTkNSX1NFVFVQX0ZPUkNFX1NZTkNfTkVHTwkoZGVmYXVsdDogbm90IGRlZmluZWQpCisJSWYgZGVmaW5lZCwgc3luY2hyb25vdXMgbmVnb3RpYXRpb24gaXMgdHJpZWQgZm9yIGFsbCBTQ1NJLTIgZGV2aWNlcy4KKwlDYW4gYmUgY2hhbmdlZCBieSAic2V0c3luYyA8dGFyZ2V0PiA8cGVyaW9kPiIKKworU0NTSV9OQ1JfU0VUVVBfTUFTVEVSX1BBUklUWQkoZGVmYXVsdDogZGVmaW5lZCkKKwlJZiBkZWZpbmVkLCBtYXN0ZXIgcGFyaXR5IGNoZWNraW5nIGlzIGVuYWJsZWQuCisKK1NDU0lfTkNSX1NFVFVQX01BU1RFUl9QQVJJVFkJKGRlZmF1bHQ6IGRlZmluZWQpCisJSWYgZGVmaW5lZCwgU0NTSSBwYXJpdHkgY2hlY2tpbmcgaXMgZW5hYmxlZC4KKworU0NTSV9OQ1JfUFJPRklMRV9TVVBQT1JUCShkZWZhdWx0OiBub3QgZGVmaW5lZCkKKwlJZiBkZWZpbmVkLCBwcm9maWxpbmcgaW5mb3JtYXRpb24gaXMgZ2F0aGVyZWQuCisKK1NDU0lfTkNSX01BWF9TQ0FUVEVSCQkoZGVmYXVsdDogMTI4KQorCVNjYXR0ZXIgbGlzdCBzaXplIG9mIHRoZSBkcml2ZXIgY2NiLgorCitTQ1NJX05DUl9NQVhfVEFSR0VUCQkoZGVmYXVsdDogMTYpCisJTWF4IG51bWJlciBvZiB0YXJnZXRzIHBlciBob3N0LgorCitTQ1NJX05DUl9NQVhfSE9TVAkJKGRlZmF1bHQ6IDIpCisJTWF4IG51bWJlciBvZiBob3N0IGNvbnRyb2xsZXJzLgorCitTQ1NJX05DUl9TRVRUTEVfVElNRQkJKGRlZmF1bHQ6IDIpCisJTnVtYmVyIG9mIHNlY29uZHMgdGhlIGRyaXZlciB3aWxsIHdhaXQgYWZ0ZXIgcmVzZXQuCisKK1NDU0lfTkNSX1RJTUVPVVRfQUxFUlQJCShkZWZhdWx0OiAzKQorCUlmIGEgcGVuZGluZyBjb21tYW5kIHdpbGwgdGltZSBvdXQgYWZ0ZXIgdGhpcyBhbW91bnQgb2Ygc2Vjb25kcywKKwlhbiBvcmRlcmVkIHRhZyBpcyB1c2VkIGZvciB0aGUgbmV4dCBjb21tYW5kLgorCUF2b2lkcyB0aW1lb3V0cyBmb3IgdW5vcmRlcmVkIHRhZ2dlZCBjb21tYW5kcy4KKworU0NTSV9OQ1JfQ0FOX1FVRVVFCQkoZGVmYXVsdDogNypTQ1NJX05DUl9NQVhfVEFHUykKKwlNYXggbnVtYmVyIG9mIGNvbW1hbmRzIHRoYXQgY2FuIGJlIHF1ZXVlZCB0byBhIGhvc3QuCisKK1NDU0lfTkNSX0NNRF9QRVJfTFVOCQkoZGVmYXVsdDogU0NTSV9OQ1JfTUFYX1RBR1MpCisJTWF4IG51bWJlciBvZiBjb21tYW5kcyBxdWV1ZWQgdG8gYSBob3N0IGZvciBhIGRldmljZS4KKworU0NTSV9OQ1JfU0dfVEFCTEVTSVpFCQkoZGVmYXVsdDogU0NTSV9OQ1JfTUFYX1NDQVRURVItMSkKKwlNYXggc2l6ZSBvZiB0aGUgTGludXggc2NhdHRlci9nYXRoZXIgbGlzdC4KKworU0NTSV9OQ1JfTUFYX0xVTgkoZGVmYXVsdDogOCkKKwlNYXggbnVtYmVyIG9mIExVTnMgcGVyIHRhcmdldC4KKworCisxMi4gSW5zdGFsbGF0aW9uCisKK1RoaXMgZHJpdmVyIGlzIHBhcnQgb2YgdGhlIGxpbnV4IGtlcm5lbCBkaXN0cmlidXRpb24uCitEcml2ZXIgZmlsZXMgYXJlIGxvY2F0ZWQgaW4gdGhlIHN1Yi1kaXJlY3RvcnkgImRyaXZlcnMvc2NzaSIgb2YgdGhlIAora2VybmVsIHNvdXJjZSB0cmVlLgorCitEcml2ZXIgZmlsZXM6CisKKwlSRUFETUUubmNyNTNjOHh4CTogdGhpcyBmaWxlCisJQ2hhbmdlTG9nLm5jcjUzYzh4eAk6IGNoYW5nZSBsb2cKKwluY3I1M2M4eHguaAkJOiBkZWZpbml0aW9ucworCW5jcjUzYzh4eC5jCQk6IHRoZSBkcml2ZXIgY29kZQorCitOZXcgZHJpdmVyIHZlcnNpb25zIGFyZSBtYWRlIGF2YWlsYWJsZSBzZXBhcmF0ZWx5IGluIG9yZGVyIHRvIGFsbG93IHRlc3RpbmcgCitjaGFuZ2VzIGFuZCBuZXcgZmVhdHVyZXMgcHJpb3IgdG8gaW5jbHVkaW5nIHRoZW0gaW50byB0aGUgbGludXgga2VybmVsIAorZGlzdHJpYnV0aW9uLiBUaGUgZm9sbG93aW5nIFVSTCBwcm92aWRlcyBpbmZvcm1hdGlvbnMgb24gbGF0ZXN0IGF2YWxhaWJsZSAKK3BhdGNoZXM6IAorCisgICAgICBmdHA6Ly9mdHAudHV4Lm9yZy9wdWIvcGVvcGxlL2dlcmFyZC1yb3VkaWVyL1JFQURNRQorCisKKzEzLiBBcmNoaXRlY3R1cmUgZGVwZW5kZW50IGZlYXR1cmVzLgorCis8Tm90IHlldCB3cml0dGVuPgorCisKKzE0LiBLbm93biBwcm9ibGVtcworCisxNC4xIFRhZ2dlZCBjb21tYW5kcyB3aXRoIElvbWVnYSBKYXogZGV2aWNlCisKK0kgaGF2ZSBub3QgdHJpZWQgdGhpcyBkZXZpY2UsIGhvd2V2ZXIgaXQgaGFzIGJlZW4gcmVwb3J0ZWQgdG8gbWUgdGhlCitmb2xsb3dpbmc6IFRoaXMgZGV2aWNlIGlzIGNhcGFibGUgb2YgVGFnZ2VkIGNvbW1hbmQgcXVldWluZy4gSG93ZXZlcgord2hpbGUgc3Bpbm5pbmcgdXAsIGl0IHJlamVjdHMgVGFnZ2VkIGNvbW1hbmRzLiBUaGlzIGJlaGF2aW91ciBpcworY29uZm9ybXMgdG8gNi44LjIgb2YgU0NTSS0yIHNwZWNpZmljYXRpb25zLiBUaGUgY3VycmVudCBiZWhhdmlvdXIgb2YKK3RoZSBkcml2ZXIgaW4gdGhhdCBzaXR1YXRpb24gaXMgbm90IHNhdGlzZnlpbmcuIFNvIGRvIG5vdCBlbmFibGUKK1RhZ2dlZCBjb21tYW5kIHF1ZXVpbmcgZm9yIGRldmljZXMgdGhhdCBhcmUgYWJsZSB0byBzcGluIGRvd24uICBUaGUKK290aGVyIHByb2JsZW0gdGhhdCBtYXkgYXBwZWFyIGlzIHRpbWVvdXRzLiBUaGUgb25seSB3YXkgdG8gYXZvaWQKK3RpbWVvdXRzIHNlZW1zIHRvIGVkaXQgbGludXgvZHJpdmVycy9zY3NpL3NkLmMgYW5kIHRvIGluY3JlYXNlIHRoZQorY3VycmVudCB0aW1lb3V0IHZhbHVlcy4KKworMTQuMiBEZXZpY2UgbmFtZXMgY2hhbmdlIHdoZW4gYW5vdGhlciBjb250cm9sbGVyIGlzIGFkZGVkLgorCitXaGVuIHlvdSBhZGQgYSBuZXcgTkNSNTNDOFhYIGNoaXAgYmFzZWQgY29udHJvbGxlciB0byBhIHN5c3RlbSB0aGF0IGFscmVhZHkgCitoYXMgb25lIG9yIG1vcmUgY29udHJvbGxlcnMgb2YgdGhpcyBmYW1pbHksIGl0IG1heSBoYXBwZW4gdGhhdCB0aGUgb3JkZXIgCit0aGUgZHJpdmVyIHJlZ2lzdGVycyB0aGVtIHRvIHRoZSBrZXJuZWwgY2F1c2VzIHByb2JsZW1zIGR1ZSB0byBkZXZpY2UgCituYW1lIGNoYW5nZXMuCitXaGVuIGF0IGxlYXN0IG9uZSBjb250cm9sbGVyIHVzZXMgTnZSQU0sIFNETVMgQklPUyB2ZXJzaW9uIDQgYWxsb3dzIHlvdSB0byAKK2RlZmluZSB0aGUgb3JkZXIgdGhlIEJJT1Mgd2lsbCBzY2FuIHRoZSBzY3NpIGJvYXJkcy4gVGhlIGRyaXZlciBhdHRhY2hlcyAKK2NvbnRyb2xsZXJzIGFjY29yZGluZyB0byBCSU9TIGluZm9ybWF0aW9uIGlmIE52UkFNIGRldGVjdCBvcHRpb24gaXMgc2V0LgorCitJZiB5b3VyIGNvbnRyb2xsZXJzIGRvIG5vdCBoYXZlIE52UkFNLCB5b3UgY2FuOgorCistIEFzayB0aGUgZHJpdmVyIHRvIHByb2JlIGNoaXAgaWRzIGluIHJldmVyc2Ugb3JkZXIgZnJvbSB0aGUgYm9vdCBjb21tYW5kCisgIGxpbmU6IG5jcjUzYzh4eD1yZXZwcm9iOnkKKy0gTWFrZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGluIHRoZSBmc3RhYi4KKy0gVXNlIHRoZSAnc2NzaWRldicgdG9vbCBmcm9tIEVyaWMgWW91bmdkYWxlLgorCisxNC4zIFVzaW5nIG9ubHkgOCBiaXQgZGV2aWNlcyB3aXRoIGEgV0lERSBTQ1NJIGNvbnRyb2xsZXIuCisKK1doZW4gb25seSA4IGJpdCBOQVJST1cgZGV2aWNlcyBhcmUgY29ubmVjdGVkIHRvIGEgMTYgYml0IFdJREUgU0NTSSBjb250cm9sbGVyLCAKK3lvdSBtdXN0IGVuc3VyZSB0aGF0IGxpbmVzIG9mIHRoZSB3aWRlIHBhcnQgb2YgdGhlIFNDU0kgQlVTIGFyZSBwdWxsZWQtdXAuCitUaGlzIGNhbiBiZSBhY2hpZXZlZCBieSBFTkFCTElORyB0aGUgV0lERSBURVJNSU5BVE9SIHBvcnRpb24gb2YgdGhlIFNDU0kgCitjb250cm9sbGVyIGNhcmQuCitUaGUgVFlBTiAxMzY1IGRvY3VtZW50YXRpb24gcmV2aXNpb24gMS4yIGlzIG5vdCBjb3JyZWN0IGFib3V0IHN1Y2ggc2V0dGluZ3MuCisocGFnZSAxMCwgZmlndXJlIDMuMykuCisKKzE0LjQgUG9zc2libGUgZGF0YSBjb3JydXB0aW9uIGR1cmluZyBhIE1lbW9yeSBXcml0ZSBhbmQgSW52YWxpZGF0ZQorCitUaGlzIHByb2JsZW0gaXMgZGVzY3JpYmVkIGluIFNZTUJJT1MgREVMIDM5NywgUGFydCBOdW1iZXIgNjktMDM5MjQxLCBJVEVNIDQuCisKK0luIHNvbWUgY29tcGxleCBzaXR1YXRpb25zLCA1M0M4NzUgY2hpcHMgcmV2aXNpb24gPD0gMyBtYXkgc3RhcnQgYSBQQ0kgCitXcml0ZSBhbmQgSW52YWxpZGF0ZSBDb21tYW5kIGF0IGEgbm90IGNhY2hlLWxpbmUtYWxpZ25lZCA0IERXT1JEUyBib3VuZGFyeS4KK1RoaXMgaXMgb25seSBwb3NzaWJsZSB3aGVuIENhY2hlIExpbmUgU2l6ZSBpcyA4IERXT1JEUyBvciBncmVhdGVyLgorUGVudGl1bSBzeXN0ZW1zIHVzZSBhIDggRFdPUkRTIGNhY2hlIGxpbmUgc2l6ZSBhbmQgc28gYXJlIGNvbmNlcm5lZCBieSAKK3RoaXMgY2hpcCBidWcsIHVubGlrZSBpNDg2IHN5c3RlbXMgdGhhdCB1c2UgYSA0IERXT1JEUyBjYWNoZSBsaW5lIHNpemUuCisKK1doZW4gdGhpcyBzaXR1YXRpb24gb2NjdXJzLCB0aGUgY2hpcCBtYXkgY29tcGxldGUgdGhlIFdyaXRlIGFuZCBJbnZhbGlkYXRlIAorY29tbWFuZCBhZnRlciBoYXZpbmcgb25seSBmaWxsZWQgcGFydCBvZiB0aGUgbGFzdCBjYWNoZSBsaW5lIGludm9sdmVkIGluIAordGhlIHRyYW5zZmVyLCBsZWF2aW5nIHRvIGRhdGEgY29ycnVwdGlvbiB0aGUgcmVtYWluZGVyIG9mIHRoaXMgY2FjaGUgbGluZS4KKworTm90IHVzaW5nIFdyaXRlIEFuZCBJbnZhbGlkYXRlIG9idmlvdXNseSBnZXRzIHJpZCBvZiB0aGlzIGNoaXAgYnVnLCBhbmQgc28gCitpdCBpcyBub3cgdGhlIGRlZmF1bHQgc2V0dGluZyBvZiB0aGUgZHJpdmVyLgorSG93ZXZlciwgZm9yIHBlb3BsZSBsaWtlIG1lIHdobyB3YW50IHRvIGVuYWJsZSB0aGlzIGZlYXR1cmUsIEkgaGF2ZSBhZGRlZCAKK3BhcnQgb2YgYSB3b3JrLWFyb3VuZCBzdWdnZXN0ZWQgYnkgU1lNQklPUy4gVGhpcyB3b3JrLWFyb3VuZCByZXNldHMgdGhlIAorYWRkcmVzc2luZyBsb2dpYyB3aGVuIHRoZSBEQVRBIElOIHBoYXNlIGlzIGVudGVyZWQgYW5kIHNvIHByZXZlbnRzIHRoZSBidWcgCitmcm9tIGJlaW5nIHRyaWdnZXJlZCBmb3IgdGhlIGZpcnN0IFNDU0kgTU9WRSBvZiB0aGUgcGhhc2UuIFRoaXMgd29yay1hcm91bmQgCitzaG91bGQgYmUgZW5vdWdoIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nOgorCitUaGUgb25seSBkcml2ZXIgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBpcyBncmVhdGVyIHRoYW4gOCBEV09SRFMgIGFuZCAKK3RoYXQgaXMgbW92ZWQgYnkgdGhlIFNDUklQVFMgcHJvY2Vzc29yIGlzIHRoZSAnQ0NCIGhlYWRlcicgdGhhdCBjb250YWlucyAKK3RoZSBjb250ZXh0IG9mIHRoZSBTQ1NJIHRyYW5zZmVyLiBUaGlzIGRhdGEgc3RydWN0dXJlIGlzIGFsaWduZWQgb24gOCBEV09SRFMgCitib3VuZGFyeSAoUGVudGl1bSBDYWNoZSBMaW5lIFNpemUpLCBhbmQgc28gaXMgaW1tdW5lIHRvIHRoaXMgY2hpcCBidWcsIGF0IAorbGVhc3Qgb24gUGVudGl1bSBzeXN0ZW1zLgorQnV0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgYnVnIGNhbiBiZSBtZXQgd2hlbiBhIFNDU0kgcmVhZCBjb21tYW5kIGlzIAorcGVyZm9ybWVkIHVzaW5nIGEgYnVmZmVyIHRoYXQgaXMgNCBEV09SRFMgYnV0IG5vdCBjYWNoZS1saW5lIGFsaWduZWQuCitUaGlzIGNhbm5vdCBoYXBwZW4gdW5kZXIgTGludXggd2hlbiBzY2F0dGVyL2dhdGhlciBsaXN0cyBhcmUgdXNlZCBzaW5jZSAKK3RoZXkgb25seSByZWZlciB0byBzeXN0ZW0gYnVmZmVycyB0aGF0IGFyZSB3ZWxsIGFsaWduZWQuIFNvLCBhIHdvcmsgYXJvdW5kIAorbWF5IG9ubHkgYmUgbmVlZGVkIHVuZGVyIExpbnV4IHdoZW4gYSBzY2F0dGVyL2dhdGhlciBsaXN0IGlzIG5vdCB1c2VkIGFuZCAKK3doZW4gdGhlIFNDU0kgREFUQSBJTiBwaGFzZSBpcyByZWVudGVyZWQgYWZ0ZXIgYSBwaGFzZSBtaXNtYXRjaC4KKworMTQuNSBJUlEgc2hhcmluZyBwcm9ibGVtcworCitXaGVuIGFuIElSUSBpcyBzaGFyZWQgYnkgZGV2aWNlcyB0aGF0IGFyZSBoYW5kbGVkIGJ5IGRpZmZlcmVudCBkcml2ZXJzLCBpdCAKK21heSBoYXBwZW4gdGhhdCBvbmUgZHJpdmVyIGNvbXBsYWlucyBhYm91dCB0aGUgcmVxdWVzdCBvZiB0aGUgSVJRIGhhdmluZyAKK2ZhaWxlZC4gSW5kZXIgTGludXgtMi4wLCB0aGlzIG1heSBiZSBkdWUgdG8gb25lIGRyaXZlciBoYXZpbmcgcmVxdWVzdGVkIHRoZSAKK0lSUSB1c2luZyB0aGUgU0FfSU5URVJSVVBUIGZsYWcgYnV0IHNvbWUgb3RoZXIgaGF2aW5nIHJlcXVlc3RlZCB0aGUgc2FtZSBJUlEgCit3aXRob3V0IHRoaXMgZmxhZy4gVW5kZXIgYm90aCBMaW51eC0yLjAgYW5kIGxpbnV4LTIuMiwgdGhpcyBtYXkgYmUgY2F1c2VkIGJ5IAorb25lIGRyaXZlciBub3QgaGF2aW5nIHJlcXVlc3RlZCB0aGUgSVJRIHdpdGggdGhlIFNBX1NISVJRIGZsYWcuCisKK0J5IGRlZmF1bHQsIHRoZSBuY3I1M2M4eHggYW5kIHN5bTUzYzh4eCBkcml2ZXJzIHJlcXVlc3QgSVJRcyB3aXRoIGJvdGggdGhlIAorU0FfSU5URVJSVVBUIGFuZCB0aGUgU0FfU0hJUlEgZmxhZyB1bmRlciBMaW51eC0yLjAgYW5kIHdpdGggb25seSB0aGUgU0FfU0hJUlEgCitmbGFnIHVuZGVyIExpbnV4LTIuMi4KKworVW5kZXIgTGludXgtMi4wLCB5b3UgY2FuIGRpc2FibGUgdXNlIG9mIFNBX0lOVEVSUlVQVCBmbGFnIGZyb20gdGhlIGJvb3QgCitjb21tYW5kIGxpbmUgYnkgdXNpbmcgdGhlIGZvbGxvd2luZyBvcHRpb246CisKKyAgICAgbmNyNTNjOHh4PWlycW06MHgyMCAgIChmb3IgdGhlIGdlbmVyaWMgbmNyNTNjOHh4IGRyaXZlcikKKyAgICAgc3ltNTNjOHh4PWlycW06MHgyMCAgIChmb3IgdGhlIHN5bTUzYzh4eCBkcml2ZXIpCisKK0lmIHRoaXMgZG9lcyBub3QgZml4IHRoZSBwcm9ibGVtLCB0aGVuIHlvdSBtYXkgd2FudCB0byBjaGVjayBob3cgYWxsIG90aGVyIAorZHJpdmVycyBhcmUgcmVxdWVzdGluZyB0aGUgSVJRIGFuZCByZXBvcnQgdGhlIHByb2JsZW0uIE5vdGUgdGhhdCBpZiBhdCBsZWFzdCAKK2Egc2luZ2xlIGRyaXZlciBkb2VzIG5vdCByZXF1ZXN0IHRoZSBJUlEgd2l0aCB0aGUgU0FfU0hJUlEgZmxhZyAoc2hhcmUgSVJRKSwgCit0aGVuIHRoZSByZXF1ZXN0IG9mIHRoZSBJUlEgb2J2aW91c2x5IHdpbGwgbm90IHN1Y2NlZWQgZm9yIGFsbCB0aGUgZHJpdmVycy4KKworMTUuIFNDU0kgcHJvYmxlbSB0cm91Ymxlc2hvb3RpbmcKKworMTUuMSBQcm9ibGVtIHRyYWNraW5nCisKK01vc3QgU0NTSSBwcm9ibGVtcyBhcmUgZHVlIHRvIGEgbm9uIGNvbmZvcm1hbnQgU0NTSSBidXMgb3IgdG8gYnVnZ3kKK2RldmljZXMuICBJZiBpbmZvcnR1bmF0ZWx5IHlvdSBoYXZlIFNDU0kgcHJvYmxlbXMsIHlvdSBjYW4gY2hlY2sgdGhlCitmb2xsb3dpbmcgdGhpbmdzOgorCistIFNDU0kgYnVzIGNhYmxlcworLSB0ZXJtaW5hdGlvbnMgYXQgYm90aCBlbmQgb2YgdGhlIFNDU0kgY2hhaW4KKy0gbGludXggc3lzbG9nIG1lc3NhZ2VzIChzb21lIG9mIHRoZW0gbWF5IGhlbHAgeW91KQorCitJZiB5b3UgZG8gbm90IGZpbmQgdGhlIHNvdXJjZSBvZiBwcm9ibGVtcywgeW91IGNhbiBjb25maWd1cmUgdGhlCitkcml2ZXIgd2l0aCBubyBmZWF0dXJlcyBlbmFibGVkLgorCistIG9ubHkgYXN5bmNocm9ub3VzIGRhdGEgdHJhbnNmZXJzCistIHRhZ2dlZCBjb21tYW5kcyBkaXNhYmxlZAorLSBkaXNjb25uZWN0aW9ucyBub3QgYWxsb3dlZAorCitOb3csIGlmIHlvdXIgU0NTSSBidXMgaXMgb2ssIHlvdXIgc3lzdGVtIGhhdmUgZXZlcnkgY2hhbmNlIHRvIHdvcmsKK3dpdGggdGhpcyBzYWZlIGNvbmZpZ3VyYXRpb24gYnV0IHBlcmZvcm1hbmNlcyB3aWxsIG5vdCBiZSBvcHRpbWFsLgorCitJZiBpdCBzdGlsbCBmYWlscywgdGhlbiB5b3UgY2FuIHNlbmQgeW91ciBwcm9ibGVtIGRlc2NyaXB0aW9uIHRvCithcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3MtZ3JvdXBzLiAgU2VuZCBtZSBhIGNvcHkgaW4gb3JkZXIgdG8KK2JlIHN1cmUgSSB3aWxsIHJlY2VpdmUgaXQuICBPYnZpb3VzbHksIGEgYnVnIGluIHRoZSBkcml2ZXIgY29kZSBpcworcG9zc2libGUuCisKKyAgICAgTXkgZW1haWwgYWRkcmVzczogR2VyYXJkIFJvdWRpZXIgPGdyb3VkaWVyQGZyZWUuZnI+CisKK0FsbG93aW5nIGRpc2Nvbm5lY3Rpb25zIGlzIGltcG9ydGFudCBpZiB5b3UgdXNlIHNldmVyYWwgZGV2aWNlcyBvbgoreW91ciBTQ1NJIGJ1cyBidXQgb2Z0ZW4gY2F1c2VzIHByb2JsZW1zIHdpdGggYnVnZ3kgZGV2aWNlcy4KK1N5bmNocm9ub3VzIGRhdGEgdHJhbnNmZXJzIGluY3JlYXNlcyB0aHJvdWdocHV0IG9mIGZhc3QgZGV2aWNlcyBsaWtlCitoYXJkIGRpc2tzLiAgR29vZCBTQ1NJIGhhcmQgZGlza3Mgd2l0aCBhIGxhcmdlIGNhY2hlIGdhaW4gYWR2YW50YWdlIG9mCit0YWdnZWQgY29tbWFuZHMgcXVldWluZy4KKworVHJ5IHRvIGVuYWJsZSBvbmUgZmVhdHVyZSBhdCBhIHRpbWUgd2l0aCBjb250cm9sIGNvbW1hbmRzLiAgRm9yIGV4YW1wbGU6CisKKy0gZWNobyAic2V0c3luYyBhbGwgMjUiID4vcHJvYy9zY3NpL25jcjUzYzh4eC8wCisgIFdpbGwgZW5hYmxlIGZhc3Qgc3luY2hyb25vdXMgZGF0YSB0cmFuc2ZlciBuZWdvdGlhdGlvbiBmb3IgYWxsIHRhcmdldHMuCisKKy0gZWNobyAic2V0ZmxhZyAzIiA+L3Byb2Mvc2NzaS9uY3I1M2M4eHgvMAorICBXaWxsIHJlc2V0IGZsYWdzIChub19kaXNjKSBmb3IgdGFyZ2V0IDMsIGFuZCBzbyB3aWxsIGFsbG93IGl0IHRvIGRpc2Nvbm5lY3QgCisgIHRoZSBTQ1NJIEJ1cy4KKworLSBlY2hvICJzZXR0YWdzIDMgOCIgPi9wcm9jL3Njc2kvbmNyNTNjOHh4LzAKKyAgV2lsbCBlbmFibGUgdGFnZ2VkIGNvbW1hbmQgcXVldWluZyBmb3IgdGFyZ2V0IDMgaWYgdGhhdCBkZXZpY2Ugc3VwcG9ydHMgaXQuCisKK09uY2UgeW91IGhhdmUgZm91bmQgdGhlIGRldmljZSBhbmQgdGhlIGZlYXR1cmUgdGhhdCBjYXVzZSBwcm9ibGVtcywganVzdCAKK2Rpc2FibGUgdGhhdCBmZWF0dXJlIGZvciB0aGF0IGRldmljZS4KKworMTUuMiBVbmRlcnN0YW5kaW5nIGhhcmR3YXJlIGVycm9yIHJlcG9ydHMKKworV2hlbiB0aGUgZHJpdmVyIGRldGVjdHMgYW4gdW5leHBlY3RlZCBlcnJvciBjb25kaXRpb24sIGl0IG1heSBkaXNwbGF5IGEgCittZXNzYWdlIG9mIHRoZSBmb2xsb3dpbmcgcGF0dGVybi4KKworc3ltNTNjODc2LTA6MTogRVJST1IgKDA6NDgpICgxLTIxLTY1KSAoZi85NSkgQCAoc2NyaXB0IDdjMDoxOTAwMDAwMCkuCitzeW01M2M4NzYtMDogc2NyaXB0IGNtZCA9IDE5MDAwMDAwCitzeW01M2M4NzYtMDogcmVnZHVtcDogZGEgMTAgODAgOTUgNDcgMGYgMDEgMDcgNzUgMDEgODEgMjEgODAgMDEgMDkgMDAuCisKK1NvbWUgZmllbGRzIGluIHN1Y2ggYSBtZXNzYWdlIG1heSBoZWxwIHlvdSB1bmRlcnN0YW5kIHRoZSBjYXVzZSBvZiB0aGUgCitwcm9ibGVtLCBhcyBmb2xsb3dzOgorCitzeW01M2M4NzYtMDoxOiBFUlJPUiAoMDo0OCkgKDEtMjEtNjUpIChmLzk1KSBAIChzY3JpcHQgN2MwOjE5MDAwMDAwKS4KKy4uLi4uLi4uLi4uLkEuLi4uLi4uLi5CLkMuLi4uRC5FLi5GLi4uLkcuSC4uLi4uLi5JLi4uLi5KLi4uSy4uLi4uLi4KKworRmllbGQgQSA6IHRhcmdldCBudW1iZXIuCisgIFNDU0kgSUQgb2YgdGhlIGRldmljZSB0aGUgY29udHJvbGxlciB3YXMgdGFsa2luZyB3aXRoIGF0IHRoZSBtb21lbnQgdGhlIAorICBlcnJvciBvY2N1cnMuCisKK0ZpZWxkIEIgOiBEU1RBVCBpbyByZWdpc3RlciAoRE1BIFNUQVRVUykKKyAgQml0IDB4NDAgOiBNRFBFIE1hc3RlciBEYXRhIFBhcml0eSBFcnJvcgorICAgICAgICAgICAgIERhdGEgcGFyaXR5IGVycm9yIGRldGVjdGVkIG9uIHRoZSBQQ0kgQlVTLgorICBCaXQgMHgyMCA6IEJGICAgQnVzIEZhdWx0CisgICAgICAgICAgICAgUENJIGJ1cyBmYXVsdCBjb25kaXRpb24gZGV0ZWN0ZWQKKyAgQml0IDB4MDEgOiBJSUQgIElsbGVnYWwgSW5zdHJ1Y3Rpb24gRGV0ZWN0ZWQKKyAgICAgICAgICAgICBTZXQgYnkgdGhlIGNoaXAgd2hlbiBpdCBkZXRlY3RzIGFuIElsbGVnYWwgSW5zdHJ1Y3Rpb24gZm9ybWF0IAorICAgICAgICAgICAgIG9uIHNvbWUgY29uZGl0aW9uIHRoYXQgbWFrZXMgYW4gaW5zdHJ1Y3Rpb24gaWxsZWdhbC4KKyAgQml0IDB4ODAgOiBERkUgRG1hIEZpZm8gRW1wdHkKKyAgICAgICAgICAgICBQdXJlIHN0YXR1cyBiaXQgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBhbiBlcnJvci4KKyAgSWYgdGhlIHJlcG9ydGVkIERTVEFUIHZhbHVlIGNvbnRhaW5zIGEgY29tYmluYXRpb24gb2YgTURQRSAoMHg0MCksIAorICBCRiAoMHgyMCksIHRoZW4gdGhlIGNhdXNlIG1heSBiZSBsaWtlbHkgZHVlIHRvIGEgUENJIEJVUyBwcm9ibGVtLgorCitGaWVsZCBDIDogU0lTVCBpbyByZWdpc3RlciAoU0NTSSBJbnRlcnJ1cHQgU3RhdHVzKQorICBCaXQgMHgwOCA6IFNHRSAgU0NTSSBHUk9TUyBFUlJPUgorICAgICAgICAgICAgIEluZGljYXRlcyB0aGF0IHRoZSBjaGlwIGRldGVjdGVkIGEgc2V2ZXJlIGVycm9yIGNvbmRpdGlvbiAKKyAgICAgICAgICAgICBvbiB0aGUgU0NTSSBCVVMgdGhhdCBwcmV2ZW50cyB0aGUgU0NTSSBwcm90b2NvbCBmcm9tIGZ1bmN0aW9uaW5nCisgICAgICAgICAgICAgcHJvcGVybHkuCisgIEJpdCAweDA0IDogVURDICBVbmV4cGVjdGVkIERpc2Nvbm5lY3Rpb24KKyAgICAgICAgICAgICBJbmRpY2F0ZXMgdGhhdCB0aGUgZGV2aWNlIHJlbGVhc2VkIHRoZSBTQ1NJIEJVUyB3aGVuIHRoZSBjaGlwIAorICAgICAgICAgICAgIHdhcyBub3QgZXhwZWN0aW5nIHRoaXMgdG8gaGFwcGVuLiBBIGRldmljZSBtYXkgYmVoYXZlIHNvIHRvIAorICAgICAgICAgICAgIGluZGljYXRlIHRoZSBTQ1NJIGluaXRpYXRvciB0aGF0IGFuIGVycm9yIGNvbmRpdGlvbiBub3QgcmVwb3J0YWJsZSAgICAgICAgICAgICAgdXNpbmcgdGhlIFNDU0kgcHJvdG9jb2wgaGFzIG9jY3VycmVkLgorICBCaXQgMHgwMiA6IFJTVCAgU0NTSSBCVVMgUmVzZXQKKyAgICAgICAgICAgICBHZW5lcmFsbHkgU0NTSSB0YXJnZXRzIGRvIG5vdCByZXNldCB0aGUgU0NTSSBCVVMsIGFsdGhvdWdoIGFueSAKKyAgICAgICAgICAgICBkZXZpY2Ugb24gdGhlIEJVUyBjYW4gcmVzZXQgaXQgYXQgYW55IHRpbWUuCisgIEJpdCAweDAxIDogUEFSICBQYXJpdHkKKyAgICAgICAgICAgICBTQ1NJIHBhcml0eSBlcnJvciBkZXRlY3RlZC4KKyAgT24gYSBmYXVsdHkgU0NTSSBCVVMsIGFueSBlcnJvciBjb25kaXRpb24gYW1vbmcgU0dFICgweDA4KSwgVURDICgweDA0KSBhbmQgCisgIFBBUiAoMHgwMSkgbWF5IGJlIGRldGVjdGVkIGJ5IHRoZSBjaGlwLiBJZiB5b3VyIFNDU0kgc3lzdGVtIHNvbWV0aW1lcyAKKyAgZW5jb3VudGVycyBzdWNoIGVycm9yIGNvbmRpdGlvbnMsIGVzcGVjaWFsbHkgU0NTSSBHUk9TUyBFUlJPUiwgdGhlbiBhIFNDU0kgCisgIEJVUyBwcm9ibGVtIGlzIGxpa2VseSB0aGUgY2F1c2Ugb2YgdGhlc2UgZXJyb3JzLgorCitGb3IgZmllbGRzIEQsRSxGLEcgYW5kIEgsIHlvdSBtYXkgbG9vayBpbnRvIHRoZSBzeW01M2M4eHhfZGVmcy5oIGZpbGUgCit0aGF0IGNvbnRhaW5zIHNvbWUgbWluaW1hbCBjb21tZW50cyBvbiBJTyByZWdpc3RlciBiaXRzLgorRmllbGQgRCA6IFNPQ0wgIFNjc2kgT3V0cHV0IENvbnRyb2wgTGF0Y2gKKyAgICAgICAgICBUaGlzIHJlZ2lzdGVyIHJlZmxlY3RzIHRoZSBzdGF0ZSBvZiB0aGUgU0NTSSBjb250cm9sIGxpbmVzIHRoZSAKKyAgICAgICAgICBjaGlwIHdhbnQgdG8gZHJpdmUgb3IgY29tcGFyZSBhZ2FpbnN0LgorRmllbGQgRSA6IFNCQ0wgIFNjc2kgQnVzIENvbnRyb2wgTGluZXMKKyAgICAgICAgICBBY3R1YWwgdmFsdWUgb2YgY29udHJvbCBsaW5lcyBvbiB0aGUgU0NTSSBCVVMuCitGaWVsZCBGIDogU0JETCAgU2NzaSBCdXMgRGF0YSBMaW5lcworICAgICAgICAgIEFjdHVhbCB2YWx1ZSBvZiBkYXRhIGxpbmVzIG9uIHRoZSBTQ1NJIEJVUy4KK0ZpZWxkIEcgOiBTWEZFUiAgU0NTSSBUcmFuc2ZlcgorICAgICAgICAgIENvbnRhaW5zIHRoZSBzZXR0aW5nIG9mIHRoZSBTeW5jaHJvbm91cyBQZXJpb2QgZm9yIG91dHB1dCBhbmQgCisgICAgICAgICAgdGhlIGN1cnJlbnQgU3luY2hyb25vdXMgb2Zmc2V0IChvZmZzZXQgMCBtZWFucyBhc3luY2hyb25vdXMpLgorRmllbGQgSCA6IFNDTlRMMyBTY3NpIENvbnRyb2wgUmVnaXN0ZXIgMworICAgICAgICAgIENvbnRhaW5zIHRoZSBzZXR0aW5nIG9mIHRpbWluZyB2YWx1ZXMgZm9yIGJvdGggYXN5bmNocm9ub3VzIGFuZCAKKyAgICAgICAgICBzeW5jaHJvbm91cyBkYXRhIHRyYW5zZmVycy4gCisKK1VuZGVyc3RhbmRpbmcgRmllbGRzIEksIEosIEsgYW5kIGR1bXBzIHJlcXVpcmVzIHRvIGhhdmUgZ29vZCBrbm93bGVkZ2Ugb2YgCitTQ1NJIHN0YW5kYXJkcywgY2hpcCBjb3JlcyBmdW5jdGlvbm5hbHMgYW5kIGludGVybmFsIGRyaXZlciBkYXRhIHN0cnVjdHVyZXMuCitZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBkZWNvZGUgYW5kIHVuZGVyc3RhbmQgdGhlbSwgdW5sZXNzIHlvdSB3YW50IHRvIGhlbHAgCittYWludGFpbiB0aGUgZHJpdmVyIGNvZGUuCisKKzE2LiBTeW5jaG9ub3VzIHRyYW5zZmVyIG5lZ290aWF0aW9uIHRhYmxlcworCitUYWJsZXMgYmVsb3cgaGF2ZSBiZWVuIGNyZWF0ZWQgYnkgY2FsbGluZyB0aGUgcm91dGluZSB0aGUgZHJpdmVyIHVzZXMKK2ZvciBzeW5jaHJvbmlzYXRpb24gbmVnb3RpYXRpb24gdGltaW5nIGNhbGN1bGF0aW9uIGFuZCBjaGlwIHNldHRpbmcuCitUaGUgZmlyc3QgdGFibGUgY29ycmVzcG9uZHMgdG8gVWx0cmEgY2hpcHMgNTM4NzUgYW5kIDUzQzg2MCB3aXRoIDgwIE1IeiAKK2Nsb2NrIGFuZCA1IGNsb2NrIGRpdmlzb3JzLgorVGhlIHNlY29uZCBvbmUgaGFzIGJlZW4gY2FsY3VsYXRlZCBieSBzZXR0aW5nIHRoZSBzY3NpIGNsb2NrIHRvIDQwIE1oeiAKK2FuZCB1c2luZyA0IGNsb2NrIGRpdmlzb3JzIGFuZCBzbyBhcHBsaWVzIHRvIGFsbCBOQ1I1M0M4WFggY2hpcHMgaW4gZmFzdCAKK1NDU0ktMiBtb2RlLgorCitQZXJpb2RzIGFyZSBpbiBuYW5vLXNlY29uZHMgYW5kIHNwZWVkcyBhcmUgaW4gTWVnYS10cmFuc2ZlcnMgcGVyIHNlY29uZC4KKzEgTWVnYS10cmFuc2ZlcnMvc2Vjb25kIG1lYW5zIDEgTUIvcyB3aXRoIDggYml0cyBTQ1NJIGFuZCAyIE1CL3Mgd2l0aCAKK1dpZGUxNiBTQ1NJLgorCisxNi4xIFN5bmNocm9ub3VzIHRpbWluZ3MgZm9yIDUzQzg5NSwgNTNDODc1IGFuZCA1M0M4NjAgU0NTSSBjb250cm9sbGVycworCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lZ290aWF0ZWQgICAgICAgICAgICAgICAgICAgICBOQ1Igc2V0dGluZ3MKKyBGYWN0b3IgICBQZXJpb2QgICBTcGVlZCAgICAgICAgUGVyaW9kICAgU3BlZWQKKyAtLS0tLS0gICAtLS0tLS0gICAtLS0tLS0gICAgICAgLS0tLS0tICAgLS0tLS0tCisgMTAgICAgICAgMjUgICAgICAgNDAuMDAwICAgICAgIDI1ICAgICAgIDQwLjAwMCAgICg1M0M4OTUgb25seSkKKyAxMSAgICAgICAzMC4yICAgICAzMy4xMTIgICAgICAgMzEuMjUgICAgMzIuMDAwICAgKDUzQzg5NSBvbmx5KQorIDEyICAgICAgIDUwICAgICAgIDIwLjAwMCAgICAgICA1MCAgICAgICAyMC4wMDAKKyAxMyAgICAgICA1MiAgICAgICAxOS4yMzAgICAgICAgNjIgICAgICAgMTYuMDAwCisgMTQgICAgICAgNTYgICAgICAgMTcuODU3ICAgICAgIDYyICAgICAgIDE2LjAwMAorIDE1ICAgICAgIDYwICAgICAgIDE2LjY2NiAgICAgICA2MiAgICAgICAxNi4wMDAKKyAxNiAgICAgICA2NCAgICAgICAxNS42MjUgICAgICAgNzUgICAgICAgMTMuMzMzCisgMTcgICAgICAgNjggICAgICAgMTQuNzA1ICAgICAgIDc1ICAgICAgIDEzLjMzMworIDE4ICAgICAgIDcyICAgICAgIDEzLjg4OCAgICAgICA3NSAgICAgICAxMy4zMzMKKyAxOSAgICAgICA3NiAgICAgICAxMy4xNTcgICAgICAgODcgICAgICAgMTEuNDI4CisgMjAgICAgICAgODAgICAgICAgMTIuNTAwICAgICAgIDg3ICAgICAgIDExLjQyOAorIDIxICAgICAgIDg0ICAgICAgIDExLjkwNCAgICAgICA4NyAgICAgICAxMS40MjgKKyAyMiAgICAgICA4OCAgICAgICAxMS4zNjMgICAgICAgOTMgICAgICAgMTAuNjY2CisgMjMgICAgICAgOTIgICAgICAgMTAuODY5ICAgICAgIDkzICAgICAgIDEwLjY2NgorIDI0ICAgICAgIDk2ICAgICAgIDEwLjQxNiAgICAgIDEwMCAgICAgICAxMC4wMDAKKyAyNSAgICAgIDEwMCAgICAgICAxMC4wMDAgICAgICAxMDAgICAgICAgMTAuMDAwCisgMjYgICAgICAxMDQgICAgICAgIDkuNjE1ICAgICAgMTEyICAgICAgICA4Ljg4OAorIDI3ICAgICAgMTA4ICAgICAgICA5LjI1OSAgICAgIDExMiAgICAgICAgOC44ODgKKyAyOCAgICAgIDExMiAgICAgICAgOC45MjggICAgICAxMTIgICAgICAgIDguODg4CisgMjkgICAgICAxMTYgICAgICAgIDguNjIwICAgICAgMTI1ICAgICAgICA4LjAwMAorIDMwICAgICAgMTIwICAgICAgICA4LjMzMyAgICAgIDEyNSAgICAgICAgOC4wMDAKKyAzMSAgICAgIDEyNCAgICAgICAgOC4wNjQgICAgICAxMjUgICAgICAgIDguMDAwCisgMzIgICAgICAxMjggICAgICAgIDcuODEyICAgICAgMTMxICAgICAgICA3LjYxOQorIDMzICAgICAgMTMyICAgICAgICA3LjU3NSAgICAgIDE1MCAgICAgICAgNi42NjYKKyAzNCAgICAgIDEzNiAgICAgICAgNy4zNTIgICAgICAxNTAgICAgICAgIDYuNjY2CisgMzUgICAgICAxNDAgICAgICAgIDcuMTQyICAgICAgMTUwICAgICAgICA2LjY2NgorIDM2ICAgICAgMTQ0ICAgICAgICA2Ljk0NCAgICAgIDE1MCAgICAgICAgNi42NjYKKyAzNyAgICAgIDE0OCAgICAgICAgNi43NTYgICAgICAxNTAgICAgICAgIDYuNjY2CisgMzggICAgICAxNTIgICAgICAgIDYuNTc4ICAgICAgMTc1ICAgICAgICA1LjcxNAorIDM5ICAgICAgMTU2ICAgICAgICA2LjQxMCAgICAgIDE3NSAgICAgICAgNS43MTQKKyA0MCAgICAgIDE2MCAgICAgICAgNi4yNTAgICAgICAxNzUgICAgICAgIDUuNzE0CisgNDEgICAgICAxNjQgICAgICAgIDYuMDk3ICAgICAgMTc1ICAgICAgICA1LjcxNAorIDQyICAgICAgMTY4ICAgICAgICA1Ljk1MiAgICAgIDE3NSAgICAgICAgNS43MTQKKyA0MyAgICAgIDE3MiAgICAgICAgNS44MTMgICAgICAxNzUgICAgICAgIDUuNzE0CisgNDQgICAgICAxNzYgICAgICAgIDUuNjgxICAgICAgMTg3ICAgICAgICA1LjMzMworIDQ1ICAgICAgMTgwICAgICAgICA1LjU1NSAgICAgIDE4NyAgICAgICAgNS4zMzMKKyA0NiAgICAgIDE4NCAgICAgICAgNS40MzQgICAgICAxODcgICAgICAgIDUuMzMzCisgNDcgICAgICAxODggICAgICAgIDUuMzE5ICAgICAgMjAwICAgICAgICA1LjAwMAorIDQ4ICAgICAgMTkyICAgICAgICA1LjIwOCAgICAgIDIwMCAgICAgICAgNS4wMDAKKyA0OSAgICAgIDE5NiAgICAgICAgNS4xMDIgICAgICAyMDAgICAgICAgIDUuMDAwCisKKworMTYuMiBTeW5jaHJvbm91cyB0aW1pbmdzIGZvciBmYXN0IFNDU0ktMiA1M0M4WFggY29udHJvbGxlcnMKKworIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZWdvdGlhdGVkICAgICAgICAgICAgICAgICAgICAgTkNSIHNldHRpbmdzCisgRmFjdG9yICAgUGVyaW9kICAgU3BlZWQgICAgICAgIFBlcmlvZCAgIFNwZWVkCisgLS0tLS0tICAgLS0tLS0tICAgLS0tLS0tICAgICAgIC0tLS0tLSAgIC0tLS0tLQorIDI1ICAgICAgMTAwICAgICAgIDEwLjAwMCAgICAgIDEwMCAgICAgICAxMC4wMDAKKyAyNiAgICAgIDEwNCAgICAgICAgOS42MTUgICAgICAxMjUgICAgICAgIDguMDAwCisgMjcgICAgICAxMDggICAgICAgIDkuMjU5ICAgICAgMTI1ICAgICAgICA4LjAwMAorIDI4ICAgICAgMTEyICAgICAgICA4LjkyOCAgICAgIDEyNSAgICAgICAgOC4wMDAKKyAyOSAgICAgIDExNiAgICAgICAgOC42MjAgICAgICAxMjUgICAgICAgIDguMDAwCisgMzAgICAgICAxMjAgICAgICAgIDguMzMzICAgICAgMTI1ICAgICAgICA4LjAwMAorIDMxICAgICAgMTI0ICAgICAgICA4LjA2NCAgICAgIDEyNSAgICAgICAgOC4wMDAKKyAzMiAgICAgIDEyOCAgICAgICAgNy44MTIgICAgICAxMzEgICAgICAgIDcuNjE5CisgMzMgICAgICAxMzIgICAgICAgIDcuNTc1ICAgICAgMTUwICAgICAgICA2LjY2NgorIDM0ICAgICAgMTM2ICAgICAgICA3LjM1MiAgICAgIDE1MCAgICAgICAgNi42NjYKKyAzNSAgICAgIDE0MCAgICAgICAgNy4xNDIgICAgICAxNTAgICAgICAgIDYuNjY2CisgMzYgICAgICAxNDQgICAgICAgIDYuOTQ0ICAgICAgMTUwICAgICAgICA2LjY2NgorIDM3ICAgICAgMTQ4ICAgICAgICA2Ljc1NiAgICAgIDE1MCAgICAgICAgNi42NjYKKyAzOCAgICAgIDE1MiAgICAgICAgNi41NzggICAgICAxNzUgICAgICAgIDUuNzE0CisgMzkgICAgICAxNTYgICAgICAgIDYuNDEwICAgICAgMTc1ICAgICAgICA1LjcxNAorIDQwICAgICAgMTYwICAgICAgICA2LjI1MCAgICAgIDE3NSAgICAgICAgNS43MTQKKyA0MSAgICAgIDE2NCAgICAgICAgNi4wOTcgICAgICAxNzUgICAgICAgIDUuNzE0CisgNDIgICAgICAxNjggICAgICAgIDUuOTUyICAgICAgMTc1ICAgICAgICA1LjcxNAorIDQzICAgICAgMTcyICAgICAgICA1LjgxMyAgICAgIDE3NSAgICAgICAgNS43MTQKKyA0NCAgICAgIDE3NiAgICAgICAgNS42ODEgICAgICAxODcgICAgICAgIDUuMzMzCisgNDUgICAgICAxODAgICAgICAgIDUuNTU1ICAgICAgMTg3ICAgICAgICA1LjMzMworIDQ2ICAgICAgMTg0ICAgICAgICA1LjQzNCAgICAgIDE4NyAgICAgICAgNS4zMzMKKyA0NyAgICAgIDE4OCAgICAgICAgNS4zMTkgICAgICAyMDAgICAgICAgIDUuMDAwCisgNDggICAgICAxOTIgICAgICAgIDUuMjA4ICAgICAgMjAwICAgICAgICA1LjAwMAorIDQ5ICAgICAgMTk2ICAgICAgICA1LjEwMiAgICAgIDIwMCAgICAgICAgNS4wMDAKKworCisxNy4gU2VyaWFsIE5WUkFNIChhZGRlZCBieSBSaWNoYXJkIFdhbHRoYW06IGRvcm1vdXNlQGZhcnNyb2J0LmRlbW9uLmNvLnVrKQorCisxNy4xIEZlYXR1cmVzCisKK0VuYWJsaW5nIHNlcmlhbCBOVlJBTSBzdXBwb3J0IGVuYWJsZXMgZGV0ZWN0aW9uIG9mIHRoZSBzZXJpYWwgTlZSQU0gaW5jbHVkZWQKK29uIFN5bWJpb3MgYW5kIHNvbWUgU3ltYmlvcyBjb21wYXRpYmxlIGhvc3QgYWRhcHRvcnMsIGFuZCBUZWtyYW0gYm9hcmRzLiBUaGUgCitzZXJpYWwgTlZSQU0gaXMgdXNlZCBieSBTeW1iaW9zIGFuZCBUZWtyYW0gdG8gaG9sZCBzZXQgdXAgcGFyYW1ldGVycyBmb3IgdGhlIAoraG9zdCBhZGFwdG9yIGFuZCBpdCdzIGF0dGFjaGVkIGRyaXZlcy4KKworVGhlIFN5bWJpb3MgTlZSQU0gYWxzbyBob2xkcyBkYXRhIG9uIHRoZSBib290IG9yZGVyIG9mIGhvc3QgYWRhcHRvcnMgaW4gYQorc3lzdGVtIHdpdGggbW9yZSB0aGFuIG9uZSBob3N0IGFkYXB0b3IuIFRoaXMgZW5hYmxlcyB0aGUgb3JkZXIgb2Ygc2Nhbm5pbmcKK3RoZSBjYXJkcyBmb3IgZHJpdmVzIHRvIGJlIGNoYW5nZWQgZnJvbSB0aGUgZGVmYXVsdCB1c2VkIGR1cmluZyBob3N0IGFkYXB0b3IKK2RldGVjdGlvbi4KKworVGhpcyBjYW4gYmUgZG9uZSB0byBhIGxpbWl0ZWQgZXh0ZW50IGF0IHRoZSBtb21lbnQgdXNpbmcgInJldmVyc2UgcHJvYmUiIGJ1dAordGhpcyBvbmx5IGNoYW5nZXMgdGhlIG9yZGVyIG9mIGRldGVjdGlvbiBvZiBkaWZmZXJlbnQgdHlwZXMgb2YgY2FyZHMuIFRoZQorTlZSQU0gYm9vdCBvcmRlciBzZXR0aW5ncyBjYW4gZG8gdGhpcyBhcyB3ZWxsIGFzIGNoYW5nZSB0aGUgb3JkZXIgdGhlIHNhbWUKK3R5cGVzIG9mIGNhcmRzIGFyZSBzY2FubmVkIGluLCBzb21ldGhpbmcgInJldmVyc2UgcHJvYmUiIGNhbm5vdCBkby4KKworVGVrcmFtIGJvYXJkcyB1c2luZyBTeW1iaW9zIGNoaXBzLCBEQzM5MFcvRi9VLCB3aGljaCBoYXZlIE5WUkFNIGFyZSBkZXRlY3RlZAorYW5kIHRoaXMgaXMgdXNlZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIFN5bWJpb3MgY29tcGF0aWJsZSBhbmQgVGVrcmFtIGhvc3QgCithZGFwdG9ycy4gVGhpcyBpcyB1c2VkIHRvIGRpc2FibGUgdGhlIFN5bWJpb3MgY29tcGF0aWJsZSAiZGlmZiIgc2V0dGluZworaW5jb3JyZWN0bHkgc2V0IG9uIFRla3JhbSBib2FyZHMgaWYgdGhlIENPTkZJR19TQ1NJXzUzQzhYWF9TWU1CSU9TX0NPTVBBVCAKK2NvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGlzIHNldCBlbmFibGluZyBib3RoIFN5bWJpb3MgYW5kIFRla3JhbSBib2FyZHMgdG8gYmUgCit1c2VkIHRvZ2V0aGVyIHdpdGggdGhlIFN5bWJpb3MgY2FyZHMgdXNpbmcgYWxsIHRoZWlyIGZlYXR1cmVzLCBpbmNsdWRpbmcKKyJkaWZmIiBzdXBwb3J0LiAoImxlZCBwaW4iIHN1cHBvcnQgZm9yIFN5bWJpb3MgY29tcGF0aWJsZSBjYXJkcyBjYW4gcmVtYWluCitlbmFibGVkIHdoZW4gdXNpbmcgVGVrcmFtIGNhcmRzLiBJdCBkb2VzIG5vdGhpbmcgdXNlZnVsIGZvciBUZWtyYW0gaG9zdAorYWRhcHRvcnMgYnV0IGRvZXMgbm90IGNhdXNlIHByb2JsZW1zIGVpdGhlci4pCisKKworMTcuMiBTeW1iaW9zIE5WUkFNIGxheW91dAorCit0eXBpY2FsIGRhdGEgYXQgTlZSQU0gYWRkcmVzcyAweDEwMCAoNTNjODEwYSBOVlJBTSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiswMCAwMAorNjQgMDEKKzhlIDBiCisKKzAwIDMwIDAwIDAwIDAwIDAwIDA3IDAwIDAwIDAwIDAwIDAwIDAwIDAwIDA3IDA0IDEwIDA0IDAwIDAwIAorCiswNCAwMCAwZiAwMCAwMCAxMCAwMCA1MCAwMCAwMCAwMSAwMCAwMCA2MiAKKzA0IDAwIDAzIDAwIDAwIDEwIDAwIDU4IDAwIDAwIDAxIDAwIDAwIDYzIAorMDQgMDAgMDEgMDAgMDAgMTAgMDAgNDggMDAgMDAgMDEgMDAgMDAgNjEgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKworMGYgMDAgMDggMDggNjQgMDAgMGEgMDAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCisKK2ZlIGZlCiswMCAwMAorMDAgMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitOVlJBTSBsYXlvdXQgZGV0YWlscworCitOVlJBTSBBZGRyZXNzIDB4MDAwLTB4MGZmIG5vdCB1c2VkCisgICAgICAgICAgICAgIDB4MTAwLTB4MjZmIGluaXRpYWxpc2VkIGRhdGEKKyAgICAgICAgICAgICAgMHgyNzAtMHg3ZmYgbm90IHVzZWQKKworZ2VuZXJhbCBsYXlvdXQKKworICAgICAgICBoZWFkZXIgIC0gICA2IGJ5dGVzLAorICAgICAgICBkYXRhICAgIC0gMzU2IGJ5dGVzIChjaGVja3N1bSBpcyBieXRlIHN1bSBvZiB0aGlzIGRhdGEpCisgICAgICAgIHRyYWlsZXIgLSAgIDYgYnl0ZXMKKyAgICAgICAgICAgICAgICAgIC0tLQorICAgICAgICB0b3RhbCAgICAgMzY4IGJ5dGVzCisKK2RhdGEgYXJlYSBsYXlvdXQKKworICAgICAgICBjb250cm9sbGVyIHNldCB1cCAgLSAgMjAgYnl0ZXMKKyAgICAgICAgYm9vdCBjb25maWd1cmF0aW9uIC0gIDU2IGJ5dGVzICg0eDE0IGJ5dGVzKQorICAgICAgICBkZXZpY2Ugc2V0IHVwICAgICAgLSAxMjggYnl0ZXMgKDE2eDggYnl0ZXMpCisgICAgICAgIHVudXNlZCAoc3BhcmU/KSAgICAtIDE1MiBieXRlcyAoMTl4OCBieXRlcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tCisgICAgICAgIHRvdGFsICAgICAgICAgICAgICAgIDM1NiBieXRlcworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraGVhZGVyCisKKzAwIDAwICAgLSA/PyBzdGFydCBtYXJrZXIKKzY0IDAxICAgLSBieXRlIGNvdW50IChsc2IvbXNiIGV4Y2x1ZGVzIGhlYWRlci90cmFpbGVyKQorOGUgMGIgICAtIGNoZWNrc3VtIChsc2IvbXNiIGV4Y2x1ZGVzIGhlYWRlci90cmFpbGVyKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2NvbnRyb2xsZXIgc2V0IHVwCisKKzAwIDMwIDAwIDAwIDAwIDAwIDA3IDAwIDAwIDAwIDAwIDAwIDAwIDAwIDA3IDA0IDEwIDA0IDAwIDAwCisgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgICAgICAgICAgfCAgICAgfAorICAgICAgICAgICAgICAgICAgIHwgICAgIHwgICAgICAgICAgIHwgICAgICAtLSBob3N0IElECisgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgIHwgICAgIHwgICAgICAgICAgICAtLVJlbW92YWJsZSBNZWRpYSBTdXBwb3J0CisgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgICAgICAgICAgICAgIDB4MDAgPSBub25lCisgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgICAgICAgICAgICAgIDB4MDEgPSBCb290YWJsZSBEZXZpY2UKKyAgICAgICAgICAgICAgICAgICB8ICAgICB8ICAgICAgICAgICAgICAgMHgwMiA9IEFsbCB3aXRoIE1lZGlhCisgICAgICAgICAgICAgICAgICAgfCAgICAgfAorICAgICAgICAgICAgICAgICAgIHwgICAgICAtLWZsYWcgYml0cyAyCisgICAgICAgICAgICAgICAgICAgfCAgICAgICAgMHgwMDAwMDAwMT0gc2NhbiBvcmRlciBoaS0+bG93CisgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIChkZWZhdWx0IDB4MDAgLSBzY2FuIGxvdy0+aGkpCisgICAgICAgICAgICAgICAgICAgIC0tZmxhZyBiaXRzIDEKKyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSBzY2FtIGVuYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwIHBhcml0eSBlbmFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMCB2ZXJib3NlIGJvb3QgbXNncworCityZW1haW5pbmcgYnl0ZXMgdW5rbm93biAtIHRoZXkgZG8gbm90IGFwcGVhciB0byBjaGFuZ2UgaW4gbXkKK2N1cnJlbnQgc2V0IHVwIGZvciBhbnkgb2YgdGhlIGNvbnRyb2xsZXJzLgorCitkZWZhdWx0IHNldCB1cCBpcyBpZGVudGljYWwgZm9yIDUzYzgxMGEgYW5kIDUzYzg3NSBOVlJBTQorKFJlbW92YWJsZSBNZWRpYSBhZGRlZCBTeW1iaW9zIEJJT1MgdmVyc2lvbiA0LjA5KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Jvb3QgY29uZmlndXJhdGlvbgorCitib290IG9yZGVyIHNldCBieSBvcmRlciBvZiB0aGUgZGV2aWNlcyBpbiB0aGlzIHRhYmxlCisKKzA0IDAwIDBmIDAwIDAwIDEwIDAwIDUwIDAwIDAwIDAxIDAwIDAwIDYyIC0tIDFzdCBjb250cm9sbGVyCiswNCAwMCAwMyAwMCAwMCAxMCAwMCA1OCAwMCAwMCAwMSAwMCAwMCA2MyAgICAybmQgY29udHJvbGxlcgorMDQgMDAgMDEgMDAgMDAgMTAgMDAgNDggMDAgMDAgMDEgMDAgMDAgNjEgICAgM3JkIGNvbnRyb2xsZXIKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwICAgIDR0aCBjb250cm9sbGVyCisgICAgICAgfCAgfCAgfCAgfCAgICAgfCAgICAgICAgfCAgICAgfCAgfAorICAgICAgIHwgIHwgIHwgIHwgICAgIHwgICAgICAgIHwgICAgICAtLS0tIFBDSSBpbyBwb3J0IGFkcgorICAgICAgIHwgIHwgIHwgIHwgICAgIHwgICAgICAgICAtLTB4MDEgaW5pdC9zY2FuIGF0IGJvb3QgdGltZQorICAgICAgIHwgIHwgIHwgIHwgICAgICAtLVBDSSBkZXZpY2UvZnVuY3Rpb24gbnVtYmVyICgweGRkZGRkZmZmKQorICAgICAgIHwgIHwgICAtLS0tLSA/PyBQQ0kgdmVuZG9yIElEIChsc2IvbXNiKQorICAgICAgICAtLS0tUENJIGRldmljZSBJRCAobHNiL21zYikKKworPz8gdXNlIG9mIHRoaXMgZGF0YSBpcyBhIGd1ZXNzIGJ1dCBzZWVtcyByZWFzb25hYmxlCisKK3JlbWFpbmluZyBieXRlcyB1bmtub3duIC0gdGhleSBkbyBub3QgYXBwZWFyIHRvIGNoYW5nZSBpbiBteQorY3VycmVudCBzZXQgdXAKKworZGVmYXVsdCBzZXQgdXAgaXMgaWRlbnRpY2FsIGZvciA1M2M4MTBhIGFuZCA1M2M4NzUgTlZSQU0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkZXZpY2Ugc2V0IHVwICh1cCB0byAxNiBkZXZpY2VzIC0gaW5jbHVkZXMgY29udHJvbGxlcikKKworMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgLSBpZCAwCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKworMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAtIGlkIDE1CisgfCAgICAgfCAgfCAgfCAgICAgfCAgfAorIHwgICAgIHwgIHwgIHwgICAgICAtLS0tdGltZW91dCAobHNiL21zYikKKyB8ICAgICB8ICB8ICAgLS1zeW5jaCBwZXJpb2QgKDB4Pz8gNDAgTXRyYW5zL3NlYy0gZmFzdCA0MCkgKHByb2JhYmx5IDB4MjgpCisgfCAgICAgfCAgfCAgICAgICAgICAgICAgICAgICgweDMwIDIwIE10cmFucy9zZWMtIGZhc3QgMjApCisgfCAgICAgfCAgfCAgICAgICAgICAgICAgICAgICgweDY0IDEwIE10cmFucy9zZWMtIGZhc3QgKQorIHwgICAgIHwgIHwgICAgICAgICAgICAgICAgICAoMHhjOCAgNSBNdHJhbnMvc2VjKQorIHwgICAgIHwgIHwgICAgICAgICAgICAgICAgICAoMHgwMCAgYXN5bmNocm9ub3VzKQorIHwgICAgIHwgICAtLSA/PyBtYXggc3luYyBvZmZzZXQgKDB4MDggaW4gTlZSQU0gb24gNTNjODEwYSkgCisgfCAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMCBpbiBOVlJBTSBvbiA1M2M4NzUpCisgfCAgICAgIC0tZGV2aWNlIGJ1cyB3aWR0aCAoMHgwOCBuYXJyb3cpCisgfCAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxMCAxNiBiaXQgd2lkZSkKKyAgLS1mbGFnIGJpdHMKKyAgICAweDAwMDAwMDAxIC0gZGlzY29ubmVjdCBlbmFibGVkCisgICAgMHgwMDAwMDAxMCAtIHNjYW4gYXQgYm9vdCB0aW1lCisgICAgMHgwMDAwMDEwMCAtIHNjYW4gbHVucworICAgIDB4MDAwMDEwMDAgLSBxdWV1ZSB0YWdzIGVuYWJsZWQKKworcmVtYWluaW5nIGJ5dGVzIHVua25vd24gLSB0aGV5IGRvIG5vdCBhcHBlYXIgdG8gY2hhbmdlIGluIG15CitjdXJyZW50IHNldCB1cAorCis/PyB1c2Ugb2YgdGhpcyBkYXRhIGlzIGEgZ3Vlc3MgYnV0IHNlZW1zIHJlYXNvbmFibGUgCisoYnV0IGl0IGNvdWxkIGJlIG1heCBidXMgd2lkdGgpCisKK2RlZmF1bHQgc2V0IHVwIGZvciA1M2M4MTBhIE5WUkFNCitkZWZhdWx0IHNldCB1cCBmb3IgNTNjODc1IE5WUkFNIC0gYnVzIHdpZHRoICAgICAtIDB4MTAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBzeW5jIG9mZnNldCA/IC0gMHgxMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHN5bmMgcGVyaW9kICAgLSAweDMwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPz8gc3BhcmUgZGV2aWNlIHNwYWNlICgzMiBiaXQgYnVzID8/KQorCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAgKDE5eDhieXRlcykKKy4KKy4KKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwCisKK2RlZmF1bHQgc2V0IHVwIGlzIGlkZW50aWNhbCBmb3IgNTNjODEwYSBhbmQgNTNjODc1IE5WUkFNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordHJhaWxlcgorCitmZSBmZSAgIC0gPyBlbmQgbWFya2VyID8KKzAwIDAwCiswMCAwMAorCitkZWZhdWx0IHNldCB1cCBpcyBpZGVudGljYWwgZm9yIDUzYzgxMGEgYW5kIDUzYzg3NSBOVlJBTQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisKKzE3LjMgVGVrcmFtIE5WUkFNIGxheW91dAorCitudnJhbSA2NHgxNiAoMTAyNCBiaXQpCisKK0RyaXZlIHNldHRpbmdzCisKK0RyaXZlIElEIDAtMTUgKGFkZHIgMHgweXl5eTAgPSBkZXZpY2Ugc2V0dXAsIHl5eXkgPSBJRCkKKyAgICAgICAgICAgICAgKGFkZHIgMHgweXl5eTEgPSAweDAwMDApCisKKyAgICB4IHggeCB4ICB4IHggeCB4ICB4IHggeCB4ICB4IHggeCB4CisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgfCB8IHwgfAorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8IHwgIHwgfCB8ICAtLS0tLSBwYXJpdHkgY2hlY2sgICAwIC0gb2ZmCisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgIDEgLSBvbgorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8IHwgIHwgfCB8CisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgfCB8ICAtLS0tLS0tIHN5bmMgbmVnICAgICAgIDAgLSBvZmYKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgMSAtIG9uCisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgfCB8CisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgfCAgLS0tLS0tLS0tIGRpc2Nvbm5lY3QgICAgIDAgLSBvZmYKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtIG9uCisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgfAorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8IHwgICAtLS0tLS0tLS0tLSBzdGFydCBjbWQgICAgICAwIC0gb2ZmCisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSBvbgorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8IHwKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCAgLS0tLS0tLS0tLS0tLS0gdGFnZ2VkIGNtZHMgICAgMCAtIG9mZgorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gb24KKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCAKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgIC0tLS0tLS0tLS0tLS0tLS0gd2lkZSBuZWcgICAgICAgMCAtIG9mZgorICAgICAgICAgICAgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gb24KKyAgICAgICAgICAgICAgIHwgfCB8CisgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN5bmMgcmF0ZSAgICAgIDAgLSAxMC4wIE10cmFucy9zZWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtICA4LjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAtICA2LjYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAtICA1LjcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAtICA1LjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNSAtICA0LjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNiAtICAzLjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNyAtICAyLjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNyAtICAyLjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAtIDIwLjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOSAtIDE2LjcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSAtIDEzLjkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiAtIDExLjkKKworR2xvYmFsIHNldHRpbmdzCisKK0hvc3QgZmxhZ3MgMCAoYWRkciAweDEwMDAwMCwgMzIpIAorCisgICAgeCB4IHggeCAgeCB4IHggeCAgeCB4IHggeCAgeCB4IHggeAorICAgIHwgfCB8IHwgIHwgfCB8IHwgICAgICAgICAgIHwgfCB8IHwKKyAgICB8IHwgfCB8ICB8IHwgfCB8ICAgICAgICAgICAgLS0tLS0tLS0tLS0gaG9zdCBJRCAgICAweDAwIC0gMHgwZgorICAgIHwgfCB8IHwgIHwgfCB8IHwKKyAgICB8IHwgfCB8ICB8IHwgfCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3VwcG9ydCBmb3IgICAgMCAtIG9mZgorICAgIHwgfCB8IHwgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICA+IDIgZHJpdmVzICAgICAxIC0gb24KKyAgICB8IHwgfCB8ICB8IHwgfCAKKyAgICB8IHwgfCB8ICB8IHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3VwcG9ydCBkcml2ZXMgMCAtIG9mZgorICAgIHwgfCB8IHwgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICA+IDFHYnl0ZXMgICAgICAxIC0gb24KKyAgICB8IHwgfCB8ICB8IHwKKyAgICB8IHwgfCB8ICB8ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gYnVzIHJlc2V0IG9uICAgMCAtIG9mZgorICAgIHwgfCB8IHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvd2VyIG9uICAgICAxIC0gb24KKyAgICB8IHwgfCB8ICB8CisgICAgfCB8IHwgfCAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGFjdGl2ZSBuZWcgICAgIDAgLSBvZmYKKyAgICB8IHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtIG9uCisgICAgfCB8IHwgfAorICAgIHwgfCB8ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpbW0gc2VlayAgICAgICAwIC0gb2ZmCisgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSBvbgorICAgIHwgfCB8CisgICAgfCB8ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHNjYW4gbHVucyAgICAgIDAgLSBvZmYKKyAgICB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtIG9uCisgICAgfCB8CisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHJlbW92YWJsZSAgICAgIDAgLSBkaXNhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIEJJT1MgZGV2ICAgIDEgLSBib290IGRldmljZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIC0gYWxsCisKK0hvc3QgZmxhZ3MgMSAoYWRkciAweDEwMDAwMSwgMzMpCisKKyAgICB4IHggeCB4ICB4IHggeCB4ICB4IHggeCB4ICB4IHggeCB4CisgICAgICAgICAgICAgICB8IHwgfCAgICAgICAgICAgICB8IHwgfCAKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgICAgICAgICAtLS0tLS0tLS0gYm9vdCBkZWxheSAgICAgMCAtICAgMyBzZWMKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtICAgNQorICAgICAgICAgICAgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIC0gIDEwCisgICAgICAgICAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgLSAgMjAKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAtICAzMAorICAgICAgICAgICAgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1IC0gIDYwCisgICAgICAgICAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYgLSAxMjAKKyAgICAgICAgICAgICAgIHwgfCB8CisgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1heCB0YWcgY21kcyAgIDAgLSAgMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gIDQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAtICA4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgLSAxNgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0IC0gMzIKKworSG9zdCBmbGFncyAyIChhZGRyIDB4MTAwMDEwLCAzNCkKKworICAgIHggeCB4IHggIHggeCB4IHggIHggeCB4IHggIHggeCB4IHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tIEYyL0Y2IGVuYWJsZSAgIDAgLSBvZmYgPz8/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSBvbiAgPz8/CisKK2NoZWNrc3VtIChhZGRyIDB4MTExMTExKQorCitjaGVja3N1bSA9IDB4MTIzNCAtIChzdW0gYWRkciAwLTYzKQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZmF1bHQgbnZyYW0gZGF0YToKKworMHgwMDM3IDB4MDAwMCAweDAwMzcgMHgwMDAwIDB4MDAzNyAweDAwMDAgMHgwMDM3IDB4MDAwMAorMHgwMDM3IDB4MDAwMCAweDAwMzcgMHgwMDAwIDB4MDAzNyAweDAwMDAgMHgwMDM3IDB4MDAwMAorMHgwMDM3IDB4MDAwMCAweDAwMzcgMHgwMDAwIDB4MDAzNyAweDAwMDAgMHgwMDM3IDB4MDAwMAorMHgwMDM3IDB4MDAwMCAweDAwMzcgMHgwMDAwIDB4MDAzNyAweDAwMDAgMHgwMDM3IDB4MDAwMCAKKworMHgwZjA3IDB4MDQwMCAweDAwMDEgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMAorMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMAorMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMAorMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4ZmJiYworCisKKzE4LiBTdXBwb3J0IGZvciBCaWcgRW5kaWFuCisKK1RoZSBQQ0kgbG9jYWwgYnVzIGhhcyBiZWVuIHByaW1hcmlseSBkZXNpZ25lZCBmb3IgeDg2IGFyY2hpdGVjdHVyZS4KK0FzIGEgY29uc2VxdWVuY2UsIFBDSSBkZXZpY2VzIGdlbmVyYWxseSBleHBlY3QgRFdPUkRTIHVzaW5nIGxpdHRsZSBlbmRpYW4gCitieXRlIG9yZGVyaW5nLgorCisxOC4xIEJpZyBFbmRpYW4gQ1BVCisKK0luIG9yZGVyIHRvIHN1cHBvcnQgTkNSIGNoaXBzIG9uIGEgQmlnIEVuZGlhbiBhcmNoaXRlY3R1cmUgdGhlIGRyaXZlciBoYXMgdG8gCitwZXJmb3JtIGJ5dGUgcmVvcmRlcmluZyBlYWNoIHRpbWUgaXQgaXMgbmVlZGVkLiBUaGlzIGZlYXR1cmUgaGFzIGJlZW4gCithZGRlZCB0byB0aGUgZHJpdmVyIGJ5IENvcnQgPGNvcnRAY3Mubm10LmVkdT4gYW5kIGlzIGF2YWlsYWJsZSBpbiBkcml2ZXIgCit2ZXJzaW9uIDIuNSBhbmQgbGF0ZXIgb25lcy4gRm9yIHRoZSBtb21lbnQgQmlnIEVuZGlhbiBzdXBwb3J0IGhhcyBvbmx5IAorYmVlbiB0ZXN0ZWQgb24gTGludXgvUFBDIChQb3dlclBDKS4KKworMTguMiBOQ1IgY2hpcCBpbiBCaWcgRW5kaWFuIG1vZGUgb2Ygb3BlcmF0aW9ucworCitJdCBjYW4gYmUgcmVhZCBpbiBTWU1CSU9TIGRvY3VtZW50YXRpb24gdGhhdCBzb21lIGNoaXBzIHN1cHBvcnQgYSBzcGVjaWFsIAorQmlnIEVuZGlhbiBtb2RlLCBvbiBwYXBlcjogNTNDODE1LCA1M0M4MjVBLCA1M0M4NzUsIDUzQzg3NU4sIDUzQzg5NS4KK1RoaXMgbW9kZSBvZiBvcGVyYXRpb25zIGlzIG5vdCBzb2Z0d2FyZS1zZWxlY3RhYmxlLCBidXQgbmVlZHMgcGluIG5hbWVkIAorQmlnTGl0IHRvIGJlIHB1bGxlZC11cC4gVXNpbmcgdGhpcyBtb2RlLCBtb3N0IG9mIGJ5dGUgcmVvcmRlcmluZ3Mgc2hvdWxkIAorYmUgYXZvaWRlZCB3aGVuIHRoZSBkcml2ZXIgaXMgcnVubmluZyBvbiBhIEJpZyBFbmRpYW4gQ1BVLgorRHJpdmVyIHZlcnNpb24gMi41IGlzIGFsc28sIGluIHRoZW9yeSwgcmVhZHkgZm9yIHRoaXMgZmVhdHVyZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorRW5kIG9mIE5DUjUzQzhYWCBkcml2ZXIgUkVBRE1FIGZpbGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9vc3N0LnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9vc3N0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTU3NGU3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL29zc3QudHh0CkBAIC0wLDAgKzEsMjE5IEBACitSRUFETUUgZmlsZSBmb3IgdGhlIG9zc3QgZHJpdmVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisodykgS3VydCBHYXJsb2ZmIDxnYXJsb2ZmQHN1c2UuZGU+IDEyLzIwMDAKKworVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgb3NzdCBkcml2ZXIgYXMgb2YgdmVyc2lvbiAwLjgueC8wLjkueCwgdGhlIHJlbGVhc2VkCit2ZXJzaW9uIG9mIHRoZSBvc3N0IGRyaXZlci4KK0l0IGlzIGludGVuZGVkIHRvIGhlbHAgYWR2YW5jZWQgdXNlcnMgdG8gdW5kZXJzdGFuZCB0aGUgcm9sZSBvZiBvc3N0IGFuZCB0bworZ2V0IHRoZW0gc3RhcnRlZCB1c2luZyAoYW5kIG1heWJlIGRlYnVnZ2luZykgaXQuCitJdCB3b24ndCBhZGRyZXNzIGlzc3VlcyBsaWtlICJIb3cgZG8gSSBjb21waWxlIGEga2VybmVsPyIgb3IgIkhvdyBkbyBJIGxvYWQKK2EgbW9kdWxlPyIsIGFzIHRoZXNlIGFyZSB0b28gYmFzaWMuCitPbmNlIHRoZSBPblN0cmVhbSBnb3QgbWVyZ2VkIGludG8gdGhlIG9mZmljaWFsIGtlcm5lbCwgdGhlIGRpc3RybyBtYWtlcnMKK3dpbGwgcHJvdmlkZSB0aGUgT25TdHJlYW0gc3VwcG9ydCBmb3IgdGhvc2Ugd2hvIGFyZSBub3QgZmFtaWxpYXIgd2l0aAoraGFja2luZyB0aGVpciBrZXJuZWxzLgorCisKK1B1cnBvc2UKKy0tLS0tLS0KK1RoZSBvc3N0IGRyaXZlciB3YXMgZGV2ZWxvcGVkLCBiZWNhdXNlIHRoZSBzdGFuZGFyZCBTQ1NJIHRhcGUgZHJpdmVyIGluCitMaW51eCwgc3QsIGRvZXMgbm90IHN1cHBvcnQgdGhlIE9uU3RyZWFtIFNDLXgwIFNDU0kgdGFwZS4gVGhlIHN0IGlzIG5vdCB0bworYmxhbWUgZm9yIHRoYXQsIGFzIHRoZSBPblN0cmVhbSB0YXBlIGRyaXZlcyBkbyBub3Qgc3VwcG9ydCB0aGUgc3RhbmRhcmQgU0NTSQorY29tbWFuZCBzZXQgZm9yIFNlcmlhbCBBY2Nlc3MgU3RvcmFnZSBEZXZpY2VzIChTQVNEcyksIHdoaWNoIGJhc2ljYWxseQorY29ycmVzcG9uZHMgdG8gdGhlIFFJQy0xNTcgc3BlYy4KK05ldmVydGhlbGVzcywgdGhlIE9uU3RyZWFtIHRhcGVzIGFyZSBuaWNlIHBpZWNlcyBvZiBoYXJkd2FyZSBhbmQgdGhlcmVmb3JlCit0aGUgb3NzdCBkcml2ZXIgaGFzIGJlZW4gd3JpdHRlbiB0byBtYWtlIHRoZXNlIHRhcGUgZGV2cyBzdXBwb3J0ZWQgYnkgTGludXguCitUaGUgZHJpdmVyIGlzIGZyZWUgc29mdHdhcmUuIEl0J3MgcmVsZWFzZWQgdW5kZXIgdGhlIEdOVSBHUEwgYW5kIHBsYW5uZWQgdG8KK2JlIGludGVncmF0ZWQgaW50byB0aGUgbWFpbnN0cmVhbSBrZXJuZWwuCisKKworSW1wbGVtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0tCitUaGUgb3NzdCBpcyBhIG5ldyBoaWdoLWxldmVsIFNDU0kgZHJpdmVyLCBqdXN0IGxpa2Ugc3QsIHNyLCBzZCBhbmQgc2cuIEl0CitjYW4gYmUgY29tcGlsZWQgaW50byB0aGUga2VybmVsIG9yIGxvYWRlZCBhcyBhIG1vZHVsZS4KK0FzIGl0IHJlcHJlc2VudHMgYSBuZXcgZGV2aWNlLCBpdCBnb3QgYXNzaWduZWQgYSBuZXcgZGV2aWNlIG5vZGU6IC9kZXYvb3NzdFgKK2FyZSBjaGFyYWN0ZXIgZGV2aWNlcyB3aXRoIG1ham9yIG5vIDIwNiBhbmQgbWlub3IgbnVtYmVycyBsaWtlIHRoZSAvZGV2L3N0WAorZGV2aWNlcy4gSWYgdGhvc2UgYXJlIG5vdCBwcmVzZW50LCB5b3UgbWF5IGNyZWF0ZSB0aGVtIGJ5IGNhbGxpbmcKK01ha2VkZXZzLnNoIGFzIHJvb3QgKHNlZSBiZWxvdykuCitUaGUgZHJpdmVyIHN0YXJ0ZWQgYmVpbmcgYSBjb3B5IG9mIHN0IGFuZCBhcyBzdWNoLCB0aGUgb3NzdCBkZXZpY2VzJworYmVoYXZpb3IgbG9va3MgdmVyeSBtdWNoIHRoZSBzYW1lIGFzIHN0IHRvIHRoZSB1c2Vyc3BhY2UgYXBwbGljYXRpb25zLgorCisKK0hpc3RvcnkKKy0tLS0tLS0KK0luIHRoZSBmaXJzdCBwbGFjZSwgb3NzdCBzaGFyZWQgaXQncyBpZGVudGl0eSB2ZXJ5IG11Y2ggd2l0aCBzdC4gVGhhdCBtZWFudAordGhhdCBpdCB1c2VkIHRoZSBzYW1lIGtlcm5lbCBzdHJ1Y3R1cmVzIGFuZCB0aGUgc2FtZSBkZXZpY2Ugbm9kZSBhcyBzdC4KK1NvIHlvdSBjb3VsZCBvbmx5IGhhdmUgZWl0aGVyIG9mIHRoZW0gYmVpbmcgcHJlc2VudCBpbiB0aGUga2VybmVsLiBUaGlzIGhhcworYmVlbiBmaXhlZCBieSByZWdpc3RlcmluZyBhbiBvd24gZGV2aWNlLCBub3cuCitzdCBhbmQgb3NzdCBjYW4gY29leGlzdCwgZWFjaCBvbmx5IGFjY2Vzc2luZyB0aGUgZGV2aWNlcyBpdCBjYW4gc3VwcG9ydCBieQordGhlbXNlbHZlcy4KKworCitJbnN0YWxsYXRpb24KKy0tLS0tLS0tLS0tLQorb3NzdCBnb3QgaW50ZWdyYXRlZCBpbnRvIHRoZSBsaW51eCBrZXJuZWwuIFNlbGVjdCBpdCBkdXJpbmcga2VybmVsCitjb25maWd1cmF0aW9uIGFzIG1vZHVsZSBvciBjb21waWxlIHN0YXRpY2FsbHkgaW50byB0aGUga2VybmVsLgorQ29tcGlsZSB5b3VyIGtlcm5lbCBhbmQgaW5zdGFsbCB0aGUgbW9kdWxlcy4KKworTm93LCB5b3VyIG9zc3QgZHJpdmVyIGlzIGluc2lkZSB0aGUga2VybmVsIG9yIGF2YWlsYWJsZSBhcyBhIG1vZHVsZSwKK2RlcGVuZGluZyBvbiB5b3VyIGNob2ljZSBkdXJpbmcga2VybmVsIGNvbmZpZy4gWW91IG1heSBzdGlsbCBuZWVkIHRvIGNyZWF0ZQordGhlIGRldmljZSBub2RlcyBieSBjYWxsaW5nIHRoZSBNYWtlZGV2cy5zaCBzY3JpcHQgKHNlZSBiZWxvdykgbWFudWFsbHksCit1bmxlc3MgeW91IHVzZSBhIGRldmZzIGtlcm5lbCwgd2hlcmUgdGhpcyB3b24ndCBiZSBuZWVkZWQuCisKK1RvIGxvYWQgeW91ciBtb2R1bGUsIHlvdSBtYXkgdXNlIHRoZSBjb21tYW5kIAorbW9kcHJvYmUgb3NzdAorYXMgcm9vdC4gZG1lc2cgc2hvdWxkIHNob3cgeW91LCB3aGV0aGVyIHlvdXIgT25TdHJlYW0gdGFwZXMgaGF2ZSBiZWVuCityZWNvZ25pemVkLgorCitJZiB5b3Ugd2FudCB0byBoYXZlIHRoZSBtb2R1bGUgYXV0b2xvYWRlZCBvbiBhY2Nlc3MgdG8gL2Rldi9vc3N0LCB5b3UgbWF5CithZGQgc29tZXRoaW5nIGxpa2UKK2FsaWFzIGNoYXItbWFqb3ItMjA2IG9zc3QKK3RvIHlvdXIgL2V0Yy9tb2Rwcm9iZS5jb25mIChiZWZvcmUgMi42OiBtb2R1bGVzLmNvbmYpLgorCitZb3UgbWF5IGZpbmQgaXQgY29udmVuaWVudCB0byBjcmVhdGUgYSBzeW1ib2xpYyBsaW5rIAorbG4gLXMgbm9zc3QwIC9kZXYvdGFwZQordG8gbWFrZSBwcm9ncmFtcyBhc3N1bWluZyBhIGRlZmF1bHQgbmFtZSBvZiAvZGV2L3RhcGUgbW9yZSBjb252ZW5pZW50IHRvCit1c2UuCisKK1RoZSBkZXZpY2Ugbm9kZXMgZm9yIG9zc3QgaGF2ZSB0byBiZSBjcmVhdGVkLiBVc2UgdGhlIE1ha2VkZXZzLnNoIHNjcmlwdAorYXR0YWNoZWQgdG8gdGhpcyBmaWxlLgorCisKK1VzaW5nIGl0CistLS0tLS0tLQorWW91IG1heSB1c2UgdGhlIE9uU3RyZWFtIHRhcGUgZHJpdmVyIHdpdGggeW91ciBzdGFuZGFyZCBiYWNrdXAgc29mdHdhcmUsCit3aGljaCBtYXkgYmUgdGFyLCBjcGlvLCBhbWFuZGEsIGFya2VpYSwgQlJVLCBMb25lIFRhciwgLi4uCitieSBzcGVjaWZ5aW5nIC9kZXYvKG4pb3NzdDAgYXMgdGhlIHRhcGUgZGV2aWNlIHRvIHVzZSBvciB1c2luZyB0aGUgYWJvdmUKK3N5bWxpbmsgdHJpY2suIFRoZSBJT0NUTHMgdG8gY29udHJvbCB0YXBlIG9wZXJhdGlvbiBhcmUgYWxzbyBtb3N0bHkKK3N1cHBvcnRlZCBhbmQgeW91IG1heSB0cnkgdGhlIG10IChvciBtdF9zdCkgcHJvZ3JhbSB0byBqdW1wIGJldHdlZW4KK2ZpbGVtYXJrcywgZWplY3QgdGhlIHRhcGUsIC4uLgorCitUaGVyZSdzIG9uZSBsaW1pdGF0aW9uOiBZb3UgbmVlZCB0byB1c2UgYSBibG9jayBzaXplIG9mIDMya0IuCisKKyhUaGlzIGxpbWl0YXRpb24gaXMgd29ya2VkIG9uIGFuZCB3aWxsIGJlIGZpeGVkIGluIHZlcnNpb24gMC44Ljggb2YKKyB0aGlzIGRyaXZlci4pCisKK0lmIHlvdSBqdXN0IHdhbnQgdG8gZ2V0IHN0YXJ0ZWQgd2l0aCBzdGFuZGFyZCBzb2Z0d2FyZSwgaGVyZSBpcyBhbiBleGFtcGxlCitmb3IgY3JlYXRpbmcgYW5kIHJlc3RvcmluZyBhIGZ1bGwgYmFja3VwOgorIyBCYWNrdXAKK3RhciBjdmYgLSAvIC0tZXhjbHVkZSAvcHJvYyB8IGJ1ZmZlciAtcyAzMmsgLW0gMjRNIC1CIC10IC1vIC9kZXYvbm9zc3QwCisjIFJlc3RvcmUKK2J1ZmZlciAtcyAzMmsgLW0gOE0gLUIgLXQgLWkgL2Rldi9vc3N0MCB8IHRhciB4dmYgLSAtQyAvCisKK1RoZSBidWZmZXIgY29tbWFuZCBoYXMgYmVlbiB1c2VkIHRvIGJ1ZmZlciB0aGUgZGF0YSBiZWZvcmUgaXQgZ29lcyB0byB0aGUKK3RhcGUgKG9yIHRoZSBmaWxlIHN5c3RlbSkgaW4gb3JkZXIgdG8gc21vb3RoIG91dCB0aGUgZGF0YSBzdHJlYW0gYW5kIHByZXZlbnQKK3RoZSB0YXBlIGZyb20gbmVlZGluZyB0byBzdG9wIGFuZCByZXdpbmQuIFRoZSBPblN0cmVhbSBkb2VzIGhhdmUgYW4gaW50ZXJuYWwKK2J1ZmZlciBhbmQgYSB2YXJpYWJsZSBzcGVlZCB3aGljaCBoZWxwIHRoaXMsIGJ1dCBlc3BlY2lhbGx5IG9uIHdyaXRpbmcsIHRoZQorYnVmZmVyaW5nIHN0aWxsIHByb3ZlcyB1c2VmdWwgaW4gbW9zdCBjYXNlcy4gSXQgYWxzbyBwYWRzIHRoZSBkYXRhIHRvCitndWFyYW50ZWVzIHRoZSBibG9jayBzaXplIG9mIDMyay4gKE90aGVyd2lzZSB5b3UgbWF5IHBhc3MgdGhlIC1iNjQgb3B0aW9uIHRvCit0YXIuKQorRXhwZWN0IHNvbWV0aGluZyBsaWtlIDEuOE1CL3MgZm9yIHRoZSBTQy14MCBkcml2ZXMgYW5kIDAuOU1CL3MgZm9yIHRoZSBESS0zMC4KK1RoZSBVU0IgZHJpdmUgd2lsbCBnaXZlIHlvdSBhYm91dCAwLjdNQi9zLgorT24gYSBmYXN0IG1hY2hpbmUsIHlvdSBtYXkgcHJvZml0IGZyb20gc29mdHdhcmUgZGF0YSBjb21wcmVzc2lvbiAoeiBmbGFnIGZvcgordGFyKS4KKworCitVU0IgYW5kIElERQorLS0tLS0tLS0tLS0KK1ZpYSB0aGUgU0NTSSBlbXVsYXRpb24gbGF5ZXJzIHVzYi1zdG9yYWdlIGFuZCBpZGUtc2NzaSwgeW91IGNhbiBhbHNvIHVzZSB0aGUKK29zc3QgZHJpdmVyIHRvIGRyaXZlIHRoZSBVU0ItMzAgYW5kIHRoZSBESS0zMCBkcml2ZXMuIChVbmZvcnR1bmF0ZWx5LCB0aGVyZQoraXMgbm8gc3VjaCBsYXllciBmb3IgdGhlIHBhcmFsbGVsIHBvcnQsIG90aGVyd2lzZSB0aGUgRFAtMzAgd291bGQgd29yayBhcword2VsbC4pIEZvciB0aGUgVVNCIHN1cHBvcnQsIHlvdSBuZWVkIHRoZSBsYXRlc3QgMi40LjAtdGVzdCBrZXJuZWxzIGFuZCB0aGUgCitsYXRlc3QgdXNiLXN0b3JhZ2UgZHJpdmVyIGZyb20gCitodHRwOi8vd3d3LmxpbnV4LXVzYi5vcmcvCitodHRwOi8vc291cmNlZm9yZ2UubmV0L2N2cy8/Z3JvdXBfaWQ9MzU4MQorCitOb3RlIHRoYXQgdGhlIGlkZS10YXBlIGRyaXZlciBhcyBvZiAxLjE2ZiB1c2VzIGEgc2xpZ2h0bHkgb3V0ZGF0ZWQgb24tdGFwZQorZm9ybWF0IGFuZCB0aGVyZWZvcmUgaXMgbm90IGNvbXBsZXRlbHkgaW50ZXJvcGVyYWJsZSB3aXRoIG9zc3QgdGFwZXMuCisKK1RoZSBBRFIteDAgbGluZSBpcyBmdWxseSBTQ1NJLTIgY29tcGxpYW50IGFuZCBpcyBzdXBwb3J0ZWQgYnkgc3QsIG5vdCBvc3N0LgorVGhlIG9uLXRhcGUgZm9ybWF0IGlzIHN1cHBvc2VkIHRvIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgb25lIHVzZWQgYnkgb3NzdC4KKworCitGZWVkYmFjayBhbmQgdXBkYXRlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSBkcml2ZXIgZGV2ZWxvcG1lbnQgaXMgY29vcmRpbmF0ZWQgdGhyb3VnaCBhIG1haWxpbmcgbGlzdAorPG9zc3RAbGludXgxLm9uc3RyZWFtLm5sPgorYSBDVlMgcmVwb3NpdG9yeSBhbmQgc29tZSB3ZWIgcGFnZXMuIAorVGhlIHRlc3RlcidzIHBhZ2VzIHdoaWNoIGNvbnRhaW4gcmVjZW50IG5ld3MgYW5kIHVwZGF0ZWQgZHJpdmVycyB0byBkb3dubG9hZAorY2FuIGJlIGZvdW5kIG9uCitodHRwOi8vbGludXgxLm9uc3RyZWFtLm5sL3Rlc3QvCisKK0lmIHlvdSBmaW5kIGFueSBwcm9ibGVtcywgcGxlYXNlIGhhdmUgYSBsb29rIGF0IHRoZSB0ZXN0ZXIncyBwYWdlIGluIG9yZGVyCit0byBzZWUgd2hldGhlciB0aGUgcHJvYmxlbSBpcyBhbHJlYWR5IGtub3duIGFuZCBzb2x2ZWQuIE90aGVyd2lzZSwgcGxlYXNlCityZXBvcnQgaXQgdG8gdGhlIG1haWxpbmcgbGlzdC4gWW91ciBmZWVkYmFjayBpcyB3ZWxjb21lLiAoVGhpcyBob2xkcyBhbHNvCitmb3IgcmVwb3J0cyBvZiBzdWNjZXNzZnVsIHVzYWdlLCBvZiBjb3Vyc2UuKSAKK0luIGNhc2Ugb2YgdHJvdWJsZSwgcGxlYXNlIGRvIGFsd2F5cyBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mbzoKKyogZHJpdmVyIGFuZCBrZXJuZWwgdmVyc2lvbiB1c2VkIChzZWUgc3lzbG9nKQorKiBkcml2ZXIgbWVzc2FnZXMgKHN5c2xvZykKKyogU0NTSSBjb25maWcgYW5kIE9uU3RyZWFtIEZpcm13YXJlICgvcHJvYy9zY3NpL3Njc2kpCisqIGRlc2NyaXB0aW9uIG9mIGVycm9yLiBJcyBpdCByZXByb2R1Y2libGU/CisqIHNvZnR3YXJlIGFuZCBjb21tYW5kcyB1c2VkCisKK1lvdSBtYXkgc3Vic2NyaWJlIHRvIHRoZSBtYWlsaW5nIGxpc3QsIEJUVywgaXQncyBhIG1ham9yZG9tbyBsaXN0LgorCisKK1N0YXR1cworLS0tLS0tCiswLjguMCB3YXMgdGhlIGZpcnN0IHdpZGVzcHJlYWQgQkVUQSByZWxlYXNlLiBTaW5jZSB0aGVuIGEgbG90IG9mIHJlcG9ydHMKK2hhdmUgYmVlbiBzZW50LCBidXQgbW9zdGx5IHJlcG9ydGVkIHN1Y2Nlc3Mgb3Igb25seSBtaW5vciB0cm91YmxlLgorQWxsIHRoZSBpc3N1ZXMgaGF2ZSBiZWVuIGFkZHJlc3NlZC4KK0NoZWNrIHRoZSB3ZWIgcGFnZXMgZm9yIG1vcmUgaW5mbyBhYm91dCB0aGUgY3VycmVudCBkZXZlbG9wbWVudHMuCiswLjkueCBpcyB0aGUgdHJlZSBmb3IgdGhlIDIuMy8yLjQga2VybmVsLgorCisKK0Fja25vd2xlZGdtZW50cworLS0tLS0tLS0tLS0tLS0tLQorVGhlIGRyaXZlciBoYXMgYmVlbiBzdGFydGVkIGJ5IG1ha2luZyBhIGNvcHkgb2YgS2FpIE1ha2lzYXJhJ3Mgc3QgZHJpdmVyLgorTW9zdCBvZiB0aGUgZGV2ZWxvcG1lbnQgaGFzIGJlZW4gZG9uZSBieSBXaWxsZW0gUmllZGUuIFRoZSBwcmVzZW5jZSBvZiB0aGUKK3VzZXJzcGFjZSBwcm9ncmFtIG9zZyAob25zdHJlYW1zZykgZnJvbSBUZXJyeSBIYXJkaWUgaGFzIGJlZW4gcmF0aGVyCitoZWxwZnVsLiBUaGUgc2FtZSBob2xkcyBmb3IgR2FkaSBPeG1hbidzIGlkZS10YXBlIHN1cHBvcnQgZm9yIHRoZSBESS0zMC4KK0kgZGlkIGFkZCBzb21lIHBhdGNoZXMgdG8gdGhvc2UgZHJpdmVycyBhcyB3ZWxsIGFuZCBjb29yZGluYXRlZCB0aGluZ3MgYQorbGl0dGxlIGJpdC4gCitOb3RlIHRoYXQgbW9zdCBvZiB0aGVtIGRpZCBtb3N0bHkgc3BlbmQgdGhlaXIgc3BhcmUgdGltZSBmb3IgdGhlIGNyZWF0aW9uIG9mCit0aGlzIGRyaXZlci4KK1RoZSBwZW9wbGUgZnJvbSBPblN0cmVhbSwgZXNwZWNpYWxseSBKYWNrIEJvbWJlZWNrIGRpZCBzdXBwb3J0IHRoaXMgcHJvamVjdAorYW5kIGFsd2F5cyB0cmllZCB0byBhbnN3ZXIgSFcgb3IgRlcgcmVsYXRlZCBxdWVzdGlvbnMuIEZ1cnRoZXJtb3JlLCBoZQorcHVzaGVkIHRoZSBGVyBkZXZlbG9wZXJzIHRvIGRvIHRoZSByaWdodCB0aGluZ3MuCitTdVNFIGRpZCBzdXBwb3J0IHRoaXMgcHJvamVjdCBieSBhbGxvd2luZyBtZSB0byB3b3JrIG9uIGl0IGR1cmluZyBteSB3b3JraW5nCit0aW1lIGZvciB0aGVtIGFuZCBieSBpbnRlZ3JhdGluZyB0aGUgZHJpdmVyIGludG8gdGhlaXIgZGlzdHJvLgorCitNb3JlIHBlb3BsZSBkaWQgaGVscCBieSBzZW5kaW5nIHVzZWZ1bCBjb21tZW50cy4gU29ycnkgdG8gdGhvc2Ugd2hvIGhhdmUKK2JlZW4gZm9yZ290dGVuLiBUaGFua3MgdG8gYWxsIHRoZSBHTlUvRlNGIGFuZCBMaW51eCBkZXZlbG9wZXJzIHdobyBtYWRlIHRoaXMKK3BsYXRmb3JtIHN1Y2ggYW4gaW50ZXJlc3RpbmcsIG5pY2UgYW5kIHN0YWJsZSBwbGF0Zm9ybS4KK1RoYW5rcyBnbyB0byB0aG9zZSB3aG8gdGVzdGVkIHRoZSBkcml2ZXJzIGFuZCBkaWQgc2VuZCB1c2VmdWwgcmVwb3J0cy4gWW91cgoraGVscCBpcyBuZWVkZWQhCisKKworTWFrZWRldnMuc2gKKy0tLS0tLS0tLS0tCisjIS9iaW4vc2gKKyMgU2NyaXB0IHRvIGNyZWF0ZSBPblN0cmVhbSBTQy14MCBkZXZpY2Ugbm9kZXMgKG1ham9yIDIwNikKKyMgVXNhZ2U6IE1ha2VkZXZzLnNoIFtub3MgW3BhdGggdG8gZGV2XV0KKyMgJElkOiBSRUFETUUub3NzdC5rZXJuZWwsdiAxLjQgMjAwMC8xMi8yMCAxNDoxMzoxNSBnYXJsb2ZmIEV4cCAkCittYWpvcj0yMDYKK25ycz00CitkaXI9L2RldgordGVzdCAteiAiJDEiIHx8IG5ycz0kMQordGVzdCAteiAiJDIiIHx8IGRpcj0kMgorZGVjbGFyZSAtaSBucgorbnI9MAordGVzdCAtZCAkZGlyIHx8IG1rZGlyIC1wICRkaXIKK3doaWxlIHRlc3QgJG5yIC1sdCAkbnJzOyBkbworICBta25vZCAkZGlyL29zc3QkbnIgYyAkbWFqb3IgJG5yCisgIGNob3duIDAuZGlzayAkZGlyL29zc3QkbnI7IGNobW9kIDY2MCAkZGlyL29zc3QkbnI7CisgIG1rbm9kICRkaXIvbm9zc3QkbnIgYyAkbWFqb3IgJFtucisxMjhdCisgIGNob3duIDAuZGlzayAkZGlyL25vc3N0JG5yOyBjaG1vZCA2NjAgJGRpci9ub3NzdCRucjsKKyAgbWtub2QgJGRpci9vc3N0JHtucn1sIGMgJG1ham9yICRbbnIrMzJdCisgIGNob3duIDAuZGlzayAkZGlyL29zc3Qke25yfWw7IGNobW9kIDY2MCAkZGlyL29zc3Qke25yfWw7CisgIG1rbm9kICRkaXIvbm9zc3Qke25yfWwgYyAkbWFqb3IgJFtucisxNjBdCisgIGNob3duIDAuZGlzayAkZGlyL25vc3N0JHtucn1sOyBjaG1vZCA2NjAgJGRpci9ub3NzdCR7bnJ9bDsKKyAgbWtub2QgJGRpci9vc3N0JHtucn1tIGMgJG1ham9yICRbbnIrNjRdCisgIGNob3duIDAuZGlzayAkZGlyL29zc3Qke25yfW07IGNobW9kIDY2MCAkZGlyL29zc3Qke25yfW07CisgIG1rbm9kICRkaXIvbm9zc3Qke25yfW0gYyAkbWFqb3IgJFtucisxOTJdCisgIGNob3duIDAuZGlzayAkZGlyL25vc3N0JHtucn1tOyBjaG1vZCA2NjAgJGRpci9ub3NzdCR7bnJ9bTsKKyAgbWtub2QgJGRpci9vc3N0JHtucn1hIGMgJG1ham9yICRbbnIrOTZdCisgIGNob3duIDAuZGlzayAkZGlyL29zc3Qke25yfWE7IGNobW9kIDY2MCAkZGlyL29zc3Qke25yfWE7CisgIG1rbm9kICRkaXIvbm9zc3Qke25yfWEgYyAkbWFqb3IgJFtucisyMjRdCisgIGNob3duIDAuZGlzayAkZGlyL25vc3N0JHtucn1hOyBjaG1vZCA2NjAgJGRpci9ub3NzdCR7bnJ9YTsKKyAgbGV0IG5yKz0xCitkb25lCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvcHBhLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9wcGEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkYWM4OGQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvcHBhLnR4dApAQCAtMCwwICsxLDE2IEBACistLS0tLS0tLSBUZXJzZSB3aGVyZSB0byBnZXQgWklQIERyaXZlIGhlbHAgaW5mbyAtLS0tLS0tLQorCitHZW5lcmFsIElvbWVnYSBaSVAgZHJpdmUgcGFnZSBmb3IgTGludXg6CitodHRwOi8vd3d3LnRvcnF1ZS5uZXQvfmNhbXBiZWxsLworCitEcml2ZXIgYWNoaXZlIGZvciBvbGQgZHJpdmVyczoKK2h0dHA6Ly93d3cudG9ycXVlLm5ldC9+Y2FtcGJlbGwvcHBhLworCitMaW51eCBQYXJwb3J0IHBhZ2UgKHBhcmFsbGVsIHBvcnQpCitodHRwOi8vd3d3LnRvcnF1ZS5uZXQvcGFycG9ydC8KKworRW1haWwgbGlzdCBmb3IgTGludXggUGFycG9ydAorbGludXgtcGFycG9ydEB0b3JxdWUubmV0CisKK0VtYWlsIGZvciBwcm9ibGVtcyB3aXRoIFpJUCBvciBaSVAgUGx1cyBkcml2ZXJzCitjYW1wYmVsbEB0b3JxdWUubmV0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvcWxhMnh4eC5yZXZpc2lvbi5ub3RlcyBiL0RvY3VtZW50YXRpb24vc2NzaS9xbGEyeHh4LnJldmlzaW9uLm5vdGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MGNkYWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvcWxhMnh4eC5yZXZpc2lvbi5ub3RlcwpAQCAtMCwwICsxLDQ1NyBAQAorLyoKKyAqIFFMb2dpYyBJU1AyMjAwIGFuZCBJU1AyMzAwIExpbnV4IERyaXZlciBSZXZpc2lvbiBMaXN0IEZpbGUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogUmV2aXNpb24gSGlzdG9yeQorICoKKyAqICBSZXYgIDguMDAuMDBiOAlEZWNlbWJlciA1LCAyMDAzCUFWCisgKgktIEluc3RydWN0IG1pZC1sYXllciB0byBwZXJmb3JtIGluaXRpYWwgc2Nhbi4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjcJRGVjZW1iZXIgNSwgMjAwMwlBVgorICoJLSBSZXN5bmMgd2l0aCBMaW51eCBLZXJuZWwgMi42LjAtdGVzdDExLgorICoJLSBBZGQgYmFzaWMgTlZSQU0gcGFyc2VyIChleHRyYXMvcWxhX252cikuCisgKgorICogIFJldiAgOC4wMC4wMGI3LXByZTExIERlY2VtYmVyIDMsIDIwMDMJQVYKKyAqCS0gU2FuaXRpemUgdGhlIHNjc2lfcWxhX2hvc3Qgc3RydWN0dXJlOgorICoJICAtIFB1cmdlIHVudXNlZCBlbGVtZW50cy4KKyAqCSAgLSBSZW9yZ2FuaXplIGhpZ2gtcHJpb3JpdHkgbWVtYmVycyAoY2FjaGUgY29oZXJlbmN5KS4KKyAqCS0gQWRkIHN1cHBvcnQgZm9yIE5WUkFNIGFjY2VzcyB2aWEgYSBzeXNmcyBiaW5hcnkgYXR0cmlidXRlOgorICoJICAtIENvbnNvbGlkYXRlIHNlbWFwaG9yZSBsb2NraW5nIGFjY2Vzcy4KKyAqCS0gRml4IG1vcmUgUENJIHBvc3RpbmcgaXNzdWVzLgorICoJLSBBZGQgZXh0cmFzIGRpcmVjdG9yeSBmb3IgZHVtcC9OVlJBTSB0b29scy4KKyAqCS0gUmVtb3ZlIHVudXNlZCBxbGFfdmVuZG9yLmMgZmlsZS4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjctcHJlMTEgTm92ZW1iZXIgMjYsIDIwMDMJREcvQVYKKyAqCS0gTWVyZ2Ugc2V2ZXJhbCBwYXRjaGVzIGZyb20gQ2hyaXN0b3BoIEhlbGx3aWcgW2hjaEBsc3QuZGVdOgorICoJICAtIGluIExpbnV4IDIuNiBib3RoIHBjaSBhbmQgdGhlIHNjc2kgbGF5ZXIgdXNlIHRoZSBnZW5lcmljCisgKgkgICAgZG1hIGRpcmVjdGlvbiBiaXRzLCB1c2UgdGhlbSBkaXJlY3RseSBpbnN0ZWFkIG9mIHRoZSBzY3NpCisgKgkgICAgYW5kIHBjaSB2YXJpYW50cyBhbmQgdGhlIChub29wKSBjb252ZXJzaW9uIHJvdXRpbmVzLgorICoJLSBGaXggX0lPWFhfQkFEKCkgdXNhZ2UgZm9yIGV4dGVybmFsIElPQ1RMIGludGVyZmFjZS4KKyAqCS0gVXNlIGF0b21pYyBjb25zdHJ1Y3QgZm9yIEhBIGxvb3Bfc3RhdGUgbWVtYmVyLgorICoJLSBBZGQgZ2VuZXJpYyBtb2RlbCBkZXNjcmlwdGlvbiB0ZXh0IGZvciBIQkEgdHlwZXMuCisgKgorICogIFJldiAgOC4wMC4wMGI3LXByZTUJTm92ZW1iZXIgMTcsIDIwMDMJQVYKKyAqCS0gTWVyZ2Ugc2V2ZXJhbCBwYXRjaGVzIGZyb20gQ2hyaXN0b3BoIEhlbGx3aWcgW2hjaEBsc3QuZGVdOgorICoJICAtIHBhdGNoIHRvIHNwbGl0IHRoZSBkcml2ZXIgaW50byBhIGNvbW1vbiBxbGEyeHh4LmtvIGFuZCBhCisgKgkgICAgcWxhMj8wMC5rbyBmb3IgZWFjaCBIQkEgdHlwZSAtIHRoZSBsYXR0ZXIgbW9kdWxlcyBhcmUKKyAqCSAgICBvbmx5IHZlcnkgc21hbGwgd3JhcHBlcnMsIG1vc3RseSBmb3IgdGhlIGZpcm13YXJlCisgKgkgICAgaW1hZ2VzLCBhbGwgdGhlIG1lYXQgaXMgaW4gdGhlIGNvbW1vbiBxbGEyeHh4LmtvLgorICoJICAtIG1ha2UgdGhlIGZhaWxvdmVyIGNvZGUgb3B0aW9uYWwuCisgKgkgIC0ga2lsbCB1c2VsZXNzIGxvY2tfa2VybmVsIGluIGRwYyB0aHJlYWQgc3RhcnR1cC4KKyAqCSAgLSBubyBuZWVkIGZvciBtb2R2ZXJzaW9ucyBoYWNrcyBpbiAyLjYgKG9yIDIuNCkuCisgKgkgIC0ga2lsbCBxbGEyeDAwX3JlZ2lzdGVyX3dpdGhfTGludXguCisgKgkgIC0gc2ltcGxpZnkgRUggY29kZSwgY21kIG9yIGl0J3MgaG9zdGRhdGEgY2FuJ3QgYmUgTlVMTCwgbm8KKyAqCSAgICBuZWVkIHRvIHNlYXJjaCB3aGV0aGVyIHRoZSBob3N0IGl0J3Mgb3VycywgdGhlIG1pZGxheWVyCisgKgkgICAgbWFrZXMgc3VyZSBpdCB3b24ndCBjYWxsIGludG8gYSBkcml2ZXIgZm9yIHNvbWUgZWxzZQorICoJICAgIGhvc3QuCisgKgktIE1lcmdlIHNldmVyYWwgcGF0Y2hlcyBmcm9tIEplcyBTb3JlbnNlbgorICoJICBbamVzQHdpbGRvcGVuc291cmNlLmNvbV06CisgKgkgIC0gQ2FsbCBxbGEyeDAwX2NvbmZpZ19kbWFfYWRkcmVzc2luZygpIGJlZm9yZSBwZXJmb3JtaW5nCisgKgkgICAgYW55IGNvbnNpc3RlbnQgYWxsb2NhdGlvbnMuIFRoaXMgaXMgcmVxdWlyZWQgc2luY2UgdGhlCisgKgkgICAgZG1hIG1hc2sgc2V0dGluZ3Mgd2lsbCBhZmZlY3QgdGhlIG1lbW9yeQorICoJICAgIHBjaV9hbGxvY19jb25zaXN0ZW50KCkgd2lsbCByZXR1cm4uCisgKgkgIC0gQ2FsbCBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2soKSB0byBhbGxvdyBmb3IgNjQgYml0CisgKgkgICAgY29uc2lzdGVudCBhbGxvY2F0aW9ucywgcmVxdWlyZWQgb24gc29tZSBwbGF0Zm9ybXMgc3VjaAorICoJICAgIGFzIHRoZSBTTjIuCisgKgkgIC0gV2FpdCAyMCB1c2VjcyAobm90IHN1cmUgaG93IGxvbmcgaXMgcmVhbGx5IG5lY2Vzc2FyeSwKKyAqCSAgICBidXQgdGhpcyBzZWVtcyBzYWZlKSBhZnRlciBzZXR0aW5nIENTUl9JU1BfU09GVF9SRVNFVCBpbgorICoJICAgIHRoZSBjdHJsX3N0YXR1cyByZWdpc3RlciBhcyB0aGUgY2FyZCBkb2Vzbid0IHJlc3BvbmQgdG8KKyAqCSAgICBQQ0kgcmVhZHMgd2hpbGUgaW4gcmVzZXQgc3RhdGUuIFRoaXMgY2F1c2VzIGEgbWFjaGluZQorICoJICAgIGNoZWNrIG9uIHNvbWUgYXJjaGl0ZWN0dXJlcy4KKyAqCSAgLSBGbHVzaCBQQ0kgd3JpdGVzIGJlZm9yZSBjYWxsaW5nIHVkZWxheSgpIHRvIGVuc3VyZSB0aGUKKyAqCSAgICB3cml0ZSBpcyBub3Qgc2l0dGluZyBpZGxlIGluLWZsaWdodCBmb3IgYSB3aGlsZSBiZWZvcmUKKyAqCSAgICBoaXR0aW5nIHRoZSBoYXJkd2FyZS4KKyAqCSAgLSBJbmNsdWRlIGxpbnV4L3ZtYWxsb2MuaCBpbiBxbGFfb3MuYyBzaW5jZSBpdCB1c2VzCisgKgkgICAgdm1hbGxvYygpLgorICoJICAtIFVzZSBhdXRvLW5lZ290aWF0ZSBsaW5rIHNwZWVkIHdoZW4gdXNpbmcgZGVmYXVsdAorICoJICAgIHBhcmFtZXRlcnMgcmF0aGVyIHRoYW4gTlZSQU0gc2V0dGluZ3MuIERpc2FibGUgTlZSQU0KKyAqCSAgICByZWFkaW5nIG9uIFNOMiBzaW5jZSBpdCdzIG5vdCBwb3NzaWJsZSB0byBleGVjdXRlIHRoZQorICoJICAgIEhCQSdzIEJJT1Mgb24gYW4gU04yLiBJIHN1Z2dlc3QgZG9pbmcgc29tZXRoaW5nIHNpbWlsYXIKKyAqCSAgICBmb3IgYWxsIGFyY2hpdGVjdHVyZXMgdGhhdCBkbyBub3QgcHJvdmlkZSB4ODYgQklPUworICoJICAgIGVtdWxhdGlvbi4KKyAqCS0gQ2xlYW4tdXAgc2xhYi1jYWNoZSBhbGxvY2F0aW9uczoKKyAqCSAgLSBsb2NraW5nLgorICoJICAtIG1lbXBvb2wgYWxsb2NhdGlvbnMgaW4gY2FzZSBvZiBsb3ctbWVtb3J5IHNpdHVhdGlvbnMuCisgKgktIEZhbGxiYWNrIHRvIEdBX05YVCBzY2FuIGlmIEdJRF9QVCBjYWxsIHJldHVybnMgbW9yZSB0aGFuCisgKgkgIE1BWF9GSUJSRV9ERVZJQ0VTLgorICoJLSBQcmVzZXJ2ZSBpdGVyYXRpbmcgcG9ydCBJRCBhY3Jvc3MgR0FfTlhUIGNhbGxzIGluCisgKgkgIHFsYTJ4MDBfZmluZF9hbGxfZmFicmljX2RldnMoKS4KKyAqCS0gUHJlLWNhbGN1bGF0ZSBBU0NJSSBmaXJtd2FyZSBkdW1wIGxlbmd0aCBhcyB0byBub3QgaW5jdXIgdGhlCisgKgkgIGNvc3QtdG8tY2FsY3VsYXRlIGF0IGVhY2ggaW52b2NhdGlvbiBvZiBhIHJlYWQoKS4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjYJTm92ZW1iZXIgNCwgMjAwMwlBVgorICoJLSBBZGQgbmV3IDIzMDAgVFBYIGZpcm13YXJlICgzLjAyLjE4KS4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjYtcHJlMjUgT2N0b2JlciAyMCwgMjAwMwlSQS9BVgorICoJLSBSZXN5bmMgd2l0aCBMaW51eCBLZXJuZWwgMi42LjAtdGVzdDkuCisgKgktIFJld29yayBmaXJtd2FyZSBkdW1wIHByb2Nlc3M6CisgKgkgIC0gVXNlIGJpbmFyeSBhdHRyaWJ1dGUgd2l0aGluIHN5c2ZzIHRyZWUuCisgKgkgIC0gQWRkIHVzZXItc3BhY2UgdG9vbCAoZ2R1bXAuc2gpIHRvIHJldHJpZXZlIGZvcm1hdHRlZAorICoJICAgIGJ1ZmZlci4KKyAqCSAgLSBBZGQgSVNQMjEwMCBzdXBwb3J0LgorICoJLSBVc2UgYSBzbGFiIGNhY2hlIGZvciBTUkIgYWxsb2NhdGlvbnMgdG8gcmVkdWNlIG1lbW9yeQorICoJICBwcmVzc3VyZS4KKyAqCS0gSW5pdGlhbCBjb252ZXJzaW9uIG9mIGRyaXZlciBsb2dnaW5nIG1ldGhvZHMgdG8gYSBuZXcKKyAqCSAgcWxhX3ByaW50aygpIGZ1bmN0aW9uIHdoaWNoIHVzZXMgZGV2X3ByaW50ayAoRGFuaWVsCisgKgkgIFN0ZWtsb2ZmLCBJQk0pLgorICoJLSBGdXJ0aGVyIHJlZHVjZSBzdGFjayB1c2FnZSBpbiBxbGEyeDAwX2NvbmZpZ3VyZV9sb2NhbF9sb29wKCkKKyAqCSAgYW5kIHFsYTJ4MDBfZmluZF9hbGxfZmFicmljX2RldnMoKS4KKyAqCS0gU2VwYXJhdGUgcG9ydCBzdGF0ZSB1c2VkIGZvciByb3V0aW5nIG9mIEkvTydzIGZyb20gcG9ydAorICoJICBtZ210LWxvZ2luIHJldHJ5IGV0Yy4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjYtcHJlMTkgT2N0b2JlciAxMywgMjAwMwlBVgorICoJLSBSZXN5bmMgd2l0aCBMaW51eCBLZXJuZWwgMi42LjAtdGVzdDctYms1LgorICoJLSBBZGQgaW50ZWxsaWdlbnQgUlNDTiBldmVudCBoYW5kbGluZzoKKyAqCSAgLSByZWR1Y2Ugc2NhbiB0aW1lIGR1cmluZyAncG9ydCcgUlNDTiBldmVudHMgYnkgb25seQorICoJICAgIHF1ZXJ5aW5nIHNwZWNpZmllZCBwb3J0IGlkcy4KKyAqCSAgLSBBdmFpbGFibGUgb24gSVNQMjN4eCBjYXJkcyBvbmx5LgorICoJLSBJbmNyZWFzZSBtYXhpbXVtIG51bWJlciBvZiByZWNvZ25pemFibGUgdGFyZ2V0cyBmcm9tIDI1NgorICoJICB0byA1MTIuCisgKgkgIC0gQmFja2VuZCBjaGFuZ2VzIHdlcmUgcHJldmlvdXNseSBhZGRlZCB0byBzdXBwb3J0IFRQWAorICoJICAgICgySyBsb2dpbnMpIGZpcm13YXJlLiAgTWlkLWxheWVyIGNhbiBub3cgc2NhbiBmb3IgdGFyZ2V0cworICoJICAgIChILCBCLCBULCBMKSB3aGVyZSA1MTIgPCBUID49IDAuCisgKgktIFJlbW92ZSBJUCBzdXBwb3J0IGZyb20gZHJpdmVyLgorICoJICAtIFN3aXRjaCBmaXJtd2FyZSB0eXBlcyBmcm9tIElQLT5UUCBmb3IgSVNQMjJ4eCBhbmQKKyAqCSAgICBJUFgtPlRQWCBmb3IgSVNQMjN4eCBjYXJkcy4KKyAqCSAgLSBSZW1vdmUgZmlsZXMgcWxhX2lwLltjaF0uCisgKgktIFJlbW92ZSB0eXBlIGRlc2lnbmF0aW9ucyBmcm9tIGZpcm13YXJlIGZpbGVuYW1lcy4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjYtcHJlMTEgU2VwdGVtYmVyIDE1LCAyMDAzCURHL0FWCisgKgktIFJlc3luYyB3aXRoIDYuMDYuMDAuCisgKgktIFJlc3luYyB3aXRoIExpbnV4IEtlcm5lbCAyLjYuMC10ZXN0NS1iazMuCisgKgktIEFkZCBuZXcgMjMwMCBJUFggZmlybXdhcmUgKDMuMDIuMTUpLgorICoKKyAqICBSZXYgIDguMDAuMDBiNQlKdWx5IDMxLCAyMDAzCQlBVgorICoJLSBBbHdheXMgY3JlYXRlIGFuIGZjX2x1bl90IGVudHJ5IGZvciBsdW4gMCAtIGFzIHRoZSBtaWQtCisgKgkgIGxheWVyIHJlcXVpcmVzIGFjY2VzcyB0byB0aGlzIGx1biBmb3IgZGlzY292ZXJ5IHRvIG9jY3VyLgorICoJLSBHZW5lcmFsIHNhbml0aXppbmc6CisgKgkgIC0gQWRkIGdlbmVyaWMgZmlybXdhcmUgb3B0aW9uIGRlZmluaXRpb25zLgorICoJICAtIEdlbmVyYWxpemUgcmV0cmlldmFsL3VwZGF0ZSBvZiBmaXJtd2FyZSBvcHRpb25zLgorICoJICAtIEZpeCBjb21waWxlIGVycm9ycyB3aGljaCBvY2N1ciB3aXRoIGV4dGVuZGVkIGRlYnVnLgorICoJICAtIEhhbmRsZSBmYWlsdXJlIGNhc2VzIGZvciBzY3NpX2FkZF9ob3N0KCkgYW5kCisgKgkgICAgZG93bl9pbnRlcnJ1cHRpYmxlKCkuCisgKgktIEhvc3QgdGVtcGxhdGUgdXBkYXRlczoKKyAqCSAgLSBVc2Ugc3RhbmRhcmQgYmlvc19wYXJhbSBjYWxsYmFjayBmdW5jdGlvbi4KKyAqCSAgLSBEaXNhYmxlIGNsdXN0ZXJpbmcuCisgKgkgIC0gUmVtb3ZlIHVuY2hlY2tlZF9pc19kbWEgZW50cnkuCisgKgorICogIFJldiAgOC4wMC4wMGI1LXByZTUJSnVseSAyOSwgMjAwMwkJREcvQVYKKyAqCS0gUmVzeW5jIHdpdGggNi4wNi4wMGIxMy4KKyAqCS0gUmVzeW5jIHdpdGggTGludXggS2VybmVsIDIuNi4wLXRlc3QyLgorICoJLSBQYXNzIHRoZSBjb21wbGV0ZSBsb29wX2lkLCBub3QgdGhlIG1hc2tlZCAoMHhmZikgdmFsdWUKKyAqCSAgd2hpbGUgaXNzdWluZyBtYWlsYm94IGNvbW1hbmRzIChxbGFfbWJ4LmMvcWxhX2ZvLmMvCisgKgkgIHFsYV9pb2NiLmMvcWxhX2luaXQuYykuCisgKgktIFByb3Blcmx5IGhhbmRsZSB6ZXJvLWxlbmd0aCByZXR1cm4gc3RhdHVzIGZvciBhbiBSTEMgQ0RCLgorICoJLSBDcmVhdGUgYW4gZmNsdW5fdCBzdHJ1Y3R1cmUgZm9yICdkaXNjb25uZWN0ZWQnIGx1bnMsCisgKgkgIHBlcmlwaGVyYWwtcXVhbGlmaWVyIG9mIDAwMWIuCisgKgktIFJlbW92ZSB1bnVzZWQgTElQLXNlcXVlbmNlIHJlZ2lzdGVyIGFjY2VzcyBkdXJpbmcgQUUgODAxMC4KKyAqCS0gR2VuZXJhbGl6ZSBxbGEyeDAwX21hcmtfZGV2aWNlX2xvc3QoKSB0byBoYW5kbGUgZm9yY2VkIAorICoJICBsb2dpbiByZXF1ZXN0IC0tIG1vZGlmeSBhbGwgZGlyZWN0L2luZGlyZWN0IGludm9jYXRpb25zIAorICoJICB3aXRoIHByb3BlciBmbGFnLgorICoJLSBTYXZlIFJTQ04gbm90aWZpY2F0aW9uIChBRSA4MDE1aCkgZGF0YSBpbiBhIHByb3BlciBhbmQgCisgKgkgIGNvbnNpc3RlbnQgZm9ybWF0IChkb21haW4sIGFyZWEsIGFsX3BhKS4KKyAqCS0gR2VuZXJhbCBzYW5pdGl6aW5nOgorICoJICAtIHNjc2lfcWxhX2hvc3Qgc3RydWN0dXJlIG1lbWJlciByZW9yZGVyaW5nIGZvciBjYWNoZS1saW5lCisgKgkgICAgY29oZXJlbmN5LgorICoJICAtIFJlbW92ZSB1bnVzZWQgU0NTSSBvcGNvZGVzLCBlbmRpYW4tc3dhcCBkZWZpbml0aW9ucy4KKyAqCSAgLSBSZW1vdmUgQ01EXyogcHJlLXByb2Nlc3NvciBkZWZpbmVzLgorICoJICAtIFJlbW92ZSB1bnVzZWQgU0NTSUZDSE9UU1dBUC9HQU1BUC9NVUxUSUhPU1QgY29kZXMuCisgKgktIEJhY2tvdXQgcGF0Y2ggd2hpY2ggYWRkZWQgYSBwZXItc2NzaV9xbGFfaG9zdCBzY3NpIGhvc3QKKyAqCSAgc3BpbmxvY2ssIHNpbmNlIG1pZC1sYXllciBhbHJlYWR5IGRlZmluZXMgb25lLgorICoJLSBBZGQgbmV3IDIzMDAgSVBYIGZpcm13YXJlICgzLjAyLjE1KS4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjQJSnVseSAxNCwgMjAwMwkJUkEvREcvQVYKKyAqCS0gUmVzeW5jIHdpdGggNi4wNi4wMGIxMi4KKyAqCS0gUmVzeW5jIHdpdGggTGludXggS2VybmVsIDIuNi4wLXRlc3QxLgorICoJLSBSZW1vdmUgSU9DQiB0aHJvdHRsaW5nIGNvZGUgLS0gb3JpZ2luYWxseSAjaWYnZC4KKyAqCS0gUmVtb3ZlIGFwaWRldl8qKCkgcm91dGluZXMgc2luY2UgcHJvY19ta25vZCgpIGhhcyBiZWVuCisgKgkgIHJlbW92ZWQgLS0gbmVlZCBhbHRlcm5hdGUgSU9DVEwgaW50ZXJmYWNlLgorICoJLSBNZXJnZSBzZXZlcmFsIHBlcmZvcm1hbmNlL2ZpeCBwYXRjaGVzIGZyb20gQXJqYW4gdmFuIGRlCisgKgkgIFZlbjoKKyAqCSAgLSBVbmRlZmluZWQgb3BlcmF0aW9uID4+IDMyLgorICoJICAtIE5vIG5lZWQgdG8gYWNxdWlyZSBtaWQtbGF5ZXIgbG9jayBkdXJpbmcgY29tbWFuZAorICoJICAgIGNhbGxiYWNrLiAKKyAqCSAgLSBVc2UgYSBwZXItSEJBIG1pZC1sYXllciBsb2NrLgorICoJICAtIFVzZSBhIG5vbi1sb2NrZWQgY3ljbGUgZm9yIHNldHRpbmcgdGhlIGNvdW50IG9mIHRoZQorICoJICAgIG5ld2x5IGFsbG9jYXRlZCBzcCAocWxhMngwMF9nZXRfbmV3X3NwKCkpLgorICoJICAtIE1vZGlmeSBzZW1hbnRpYyBiZWhhdmlvciBvZiBxbGEyeDAwX3F1ZXVlY29tbWFuZCgpOgorICoJICAgIC0gUmVkdWNlIGNhY2hlbGluZSBib3VuY2luZyBieSBoYXZpbmcgSS9PcyBzdWJtaXR0ZWQKKyAqCSAgICAgIGJ5IHRoZSBJUlEgaGFuZGxlci4KKyAqCSAgICAtIFJlbW92ZSBleHRyYW5lb3VzIGNhbGxzIHRvIHFsYTJ4MDBfbmV4dCgpIGR1cmluZyBJL08KKyAqCSAgICAgIHF1ZXVpbmcuCisgKgkgIC0gVXNlIGxpc3Rfc3BsaWNlX2luaXQoKSBkdXJpbmcgcWxhMngwMF9kb25lKCkgaGFuZGxpbmcKKyAqCSAgICBvZiBjb21tYW5kcyB0byByZWR1Y2UgbGlzdF9sb2NrIGNvbnRlbnRpb24uCisgKgkgIC0gUklPIG1vZGUgc3VwcG9ydCBmb3IgSVNQMjIwMDoKKyAqCSAgICAtIEltcGxlbWVudGF0aW9uIGRpZmZlcnMgc2xpZ2h0bHkgZnJvbSBvcmlnaW5hbCBwYXRjaC4KKyAqCSAgLSBEbyBub3QgdXNlIGJvdHRvbS1oYWxmIGhhbmRsZXIgKHRhc2tsZXQvd29yayBxdWV1ZSkKKyAqCSAgICBmb3IgcWxhMngwMF9kb25lKCkgcHJvY2Vzc2luZy4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjQtcHJlMjIgSnVseSAxMiwgMjAwMwkJQVYKKyAqCS0gQ2hlY2sgZm9yICdQcm9jZXNzIFJlc3BvbnNlIFF1ZXVlJyByZXF1ZXN0cyBlYXJseSBkdXJpbmcKKyAqCSAgdGhlIEhvc3QgU3RhdHVzIGNoZWNrLgorICoJLSBHZW5lcmFsIHNhbml0aXppbmc6CisgKgkgIC0gc3JiX3Qgc3RydWN0dXJlIHJld3JpdGUsIHJlbW92YWwgb2YgdW51c2VkIG1lbWJlcnMuCisgKgkgIC0gUmVtb3ZlIHVudXNlZCBmY2RldiBhcnJheSwgZmFicmljaWQsIGFuZCBQT1JUXyoKKyAqCSAgICBkZWZpbml0aW9ucy4KKyAqCSAgLSBSZW1vdmUgdW51c2VkIGNvbmZpZ19yZWdfdCBQQ0kgZGVmaW5pdGlvbnMuCisgKgktIEFkZCBuZXcgMjIwMCBJUCBmaXJtd2FyZSAoMi4wMi4wNikuCisgKgktIEFkZCBuZXcgMjMwMCBJUFggZmlybXdhcmUgKDMuMDIuMTQpLgorICoKKyAqICBSZXYgIDguMDAuMDBiNC1wcmUxOSBKdW5lIDMwLCAyMDAzCQlBVgorICoJLSBSZXN5bmMgd2l0aCBMaW51eCBLZXJuZWwgMi41LjczLWJrOC4KKyAqCS0gUmV3b3JrIElPQ0IgY29tbWFuZCBxdWV1aW5nIG1ldGhvZHM6CisgKgkgIC0gVXBwZXItbGF5ZXIgZHJpdmVyICpNVVNUKiBwcm9wZXJseSBzZXQgdGhlIGRpcmVjdGlvbgorICoJICAgIGJpdCBvZiBTQ1NJIGNvbW1hbmRzLgorICoJICAtIEdlbmVyYWxpemUgMzJiaXQvNjRiaXQgcXVldWluZyBwYXRoIGZ1bmN0aW9ucy4KKyAqCSAgLSBSZW1vdmUgY29zdGx5IHBhZ2UtYm91bmRhcnkgY3Jvc3MgY2hlY2sgd2hlbiB1c2luZworICoJICAgIDY0Yml0IGFkZHJlc3MgY2FwYWJsZSBJT0NCcy4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjQtcHJlMTUgSnVuZSAxOSwgMjAwMwkJQVYKKyAqCS0gUmVzeW5jIHdpdGggNi4wNi4wMGIxMS4KKyAqCS0gQ29udGludWUgZmNwb3J0IGxpc3QgY29uc29saWRhdGlvbiB3b3JrOgorICoJICAtIFVwZGF0ZWQgSU9DVEwgaW1wbGVtZW50YXRpb25zIHRvIHVzZSBuZXcgZmNwb3J0cyAKKyAqCSAgICBsaXN0LgorICoJLSBNb2RpZmllZCBwcm9kdWN0IElEIGNoZWNrIHRvIG5vdCB2ZXJpZnkgSVNQIGNoaXAKKyAqCSAgcmV2aXNpb24gLS0gSVNQMjMxMiB2MyAocWxhMngwMF9jaGlwX2RpYWcoKSkuCisgKgktIEFkZCBuZXcgMjMwMCBJUFggZmlybXdhcmUgKDMuMDIuMTMpOgorICoKKyAqICBSZXYgIDguMDAuMDBiNC1wcmUxMyBKdW5lIDE5LCAyMDAzCQlBVgorICoJLSBGaXggYnVpbGQgcHJvY2VzcyBmb3IgcWxhMjEwMCBkcml2ZXIgLS0gbm8gc3VwcG9ydAorICoJICBmb3IgSVAuCisgKgktIFNDU0kgaG9zdCB0ZW1wbGF0ZSBtb2RpZmljYXRpb25zOgorICoJICAtIFNldCBzZ190YWJsZXNpemUgYmFzZWQgb24gdGhlIGRlcml2ZWQgRE1BIG1hc2suCisgKgkgIC0gSW5jcmVhc2UgbWF4X3NlY3RvcnMgc2luY2Ugb25seSBsaW1pdCB3aXRoaW4gUklTQworICoJICAgIGlzIHRyYW5zZmVyIG9mICgoKDJeMzIpIC0gMSkgPj4gOSkgc2VjdG9ycy4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjQtcHJlMTIgSnVuZSAxOCwgMjAwMwkJUkEsIERHLCBSTCwgQVYKKyAqCS0gUmVzeW5jIHdpdGggNi4wNi4wMGIxMC4KKyAqCS0gUmVzeW5jIHdpdGggTGludXggS2VybmVsIDIuNS43Mi4KKyAqCS0gSW5pdGlhbCBmY3BvcnQgbGlzdCBjb25zb2xpZGF0aW9uIHdvcms6CisgKgkgIC0gZmNwb3J0cy9mY2luaXRpYXRvcnMvZmNkZXYvZmNfaXAgLS0+IGhhLT5mY3BvcnRzCisgKgkgICAgbGlzdC4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjQtcHJlNwkgSnVuZSAwNSwgMjAwMwkJQVYKKyAqCS0gUHJvcGVybHkgcmVsZWFzZSBQQ0kgcmVzb3VjZXMgaW4gaW5pdC1mYWlsdXJlIGNhc2UuCisgKgktIFJlY29uY2lsZSBkaXNwYXJpdGUgZnVuY3Rpb24gcmV0dXJuIGNvZGUgZGVmaW5pdGlvbnMuCisgKgorICogIFJldiAgOC4wMC4wMGI0LXByZTQJIEp1bmUgMDMsIDIwMDMJCUFWCisgKgktIFJlc3luYyB3aXRoIExpbnV4IEtlcm5lbCAyLjUuNzAtYms4OgorICoJICAtIFNIVCBwcm9jX2luZm8oKSBjaGFuZ2VzLgorICoJLSBSZXN0cnVjdHVyZSBTTlMgR2VuZXJpYyBTZXJ2aWNlcyByb3V0aW5lczoKKyAqCSAgLSBBZGQgcWxhX2dzLmMgZmlsZSB0byBkcml2ZXIgZGlzdHJpYnV0aW9uLgorICoJLSBDb25maWd1cmUgUENJIGxhdGVuY3kgdGltZXIgZm9yIElTUDIzeHguCisgKgorICogIFJldiAgOC4wMC4wMGI0LXByZTMJIEp1bmUgMDIsIDIwMDMJCVJBLCBERywgUkwsIEFWCisgKgktIFJlc3luYyB3aXRoIDYuMDYuMDBiNS4KKyAqCS0gUmV3b3JrIChhZ2FpbikgUENJIEkvTyBzcGFjZSBjb25maWd1cmF0aW9uCisgKgkgIChBbnRvbiBCbGFuY2hhcmQpOgorICoJICAtIFVzZSBwY2lfc2V0X213aSgpIHJvdXRpbmU7CisgKgkgICAgLSBSZW1vdmUgdW5lZWRlZCBxbGEyeDAwX3NldF9jYWNoZV9saW5lKCkgZnVuY3Rpb24uCisgKgkgIC0gUmVtb3ZlIGV4dHJhbmVvdXMgbW9kaWZpY2F0aW9uIG9mIFBDSV9DT01NQU5EIHdvcmQuCisgKgorICogIFJldiAgOC4wMC4wMGIzIAkgTWF5IDI5LCAyMDAzCQlBVgorICoJLSBSZXN5bmMgd2l0aCBMaW51eCBLZXJuZWwgMi41LjcwLgorICoJLSBNb3ZlIFJJU0MgcGF1c2VkIGNoZWNrIGZyb20gSVNSIGZhc3QtcGF0aC4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjMtcHJlOCBNYXkgMjYsIDIwMDMJCUFWCisgKgktIEFkZCBuZXcgMjMwMCBJUFggZmlybXdhcmUgKDMuMDIuMTIpOgorICoJLSBSZXdvcmsgUENJIEkvTyBzcGFjZSBjb25maWd1cmF0aW9uLgorICoKKyAqICBSZXYgIDguMDAuMDBiMy1wcmU2CU1heSAyMiwgMjAwMwkJUkEsIERHLCBSTCwgQVYKKyAqCS0gUmVzeW5jIHdpdGggNi4wNi4wMGIzLgorICoKKyAqICBSZXYgIDguMDAuMDBiMy1wcmU0CU1heSAyMSAyMDAzCQlBVgorICoJLSBBZGQgbmV3IDIzMDAgSVBYIGZpcm13YXJlICgzLjAyLjExKToKKyAqCSAgLSBSZW1vdmUgMjMwMCBUUFggZmlybXdhcmUgZnJvbSBkaXN0cmlidXRpb24uCisgKgorICogIFJldiAgOC4wMC4wMGIzLXByZTMJTWF5IDIxIDIwMDMJCUFWCisgKgktIFByb3Blcmx5IHNldHVwIFBDSSBjb25maWd1YXRpb24gc3BhY2UgZHVyaW5nCisgKgkgIGluaXRpYWxpemF0aW9uOgorICoJICAtIFByb3Blcmx5IGNvbmZpZ3VyZSBNZW1vcnktTWFwcGVkIEkvTyBkdXJpbmcgZWFybHkKKyAqCSAgICBjb25maWd1cmF0aW9uIHN0YWdlLgorICoJLSBSZXdvcmsgSVAgZnVuY3Rpb25hbGl0eSB0byBzdXBwb3J0IDJrIGxvZ2lucy4KKyAqCS0gQWRkIG5ldyAyMzAwIElQWCBmaXJtd2FyZSAoMy4wMi4xMSk6CisgKgkgIC0gUmVtb3ZlIDIzMDAgVFBYIGZpcm13YXJlIGZyb20gZGlzdHJpYnV0aW9uLgorICoKKyAqICBSZXYgIDguMDAuMDBiMy1wcmUyCU1heSA/PywgMjAwMwkJUkEsIERHLCBSTCwgQVYKKyAqCS0gUmVzeW5jIHdpdGggNi4wNi4wMGIxLgorICoKKyAqICBSZXYgIDguMDAuMDBiMy1wcmUxCU1heSA/PywgMjAwMwkJUkEsIERHLCBSTCwgQVYKKyAqCS0gUmVzeW5jIHdpdGggNi4wNS4wMC4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjIJTWF5IDE5LCAyMDAzCQlBVgorICoJLSBTaW1wbGlmeSBkbWFfYWRkcl90IGhhbmRsaW5nIGR1cmluZyBjb21tYW5kIHF1ZXVpbmcgZ2l2ZW4KKyAqCSAgbmV3IGJsb2NrLWxheWVyIGRlZmluZWQgcmVzdHJpY3Rpb25zOgorICoJICAtIFBoeXNpY2FsIGFkZHJlc3NlcyBub3Qgc3Bhbm5pbmcgNEdCIGJvdW5kYXJpZXMuCisgKgktIEZpcm13YXJlIHZlcnNpb25zOiAyMTAwIFRQICgxLjE5LjI0KSwgMjIwMCBJUCAoMi4wMi4wNSksCisgKgkgIDIzMDAgVFBYICgzLjAyLjEwKS4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjItcHJlMQlNYXkgMTMsIDIwMDMJCUFWCisgKgktIEFkZCBzdXBwb3J0IGZvciBuZXcgJ0hvdHBsdWcgaW5pdGlhbGl6YXRpb24nIG1vZGVsLiAKKyAqCS0gU2ltcGxpZnkgaG9zdCB0ZW1wbGF0ZSBieSByZW1vdmluZyB1bnVzZWQgY2FsbGJhY2tzLgorICoJLSBVc2Ugc2NzaWNhbSBmYWNpbGl0aWVzIHRvIGRldGVybWluZSBnZW9tZXRyeS4KKyAqCS0gRml4IGNvbXBpbGF0aW9uIGlzc3VlcyBmb3Igbm9uLUlTUDIzeHggYnVpbGRzOgorICoJICAtIENvcnJlY3QgcmVnaXN0ZXIgcmVmZXJlbmNlcyBpbiBxbGFfZGJnLmMuCisgKgkgIC0gQ29ycmVjdCBNYWtlZmlsZSBidWlsZCBwcm9jZXNzLgorICoKKyAqICBSZXYgIDguMDAuMDBiMQlNYXkgMDUsIDIwMDMJCUFWCisgKgktIFJlc3luYyB3aXRoIExpbnV4IEtlcm5lbCAyLjUuNjkuCisgKgktIEZpcm13YXJlIHZlcnNpb25zOiAyMTAwIFRQICgxLjE5LjI0KSwgMjIwMCBUUCAoMi4wMi4wNSksCisgKgkgIDIzMDAgVFBYICgzLjAyLjEwKS4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjEtcHJlNDUgQXByaWwgPz8sIDIwMDMJCUFWCisgKgktIFJlc3luYyB3aXRoIExpbnV4IEtlcm5lbCAyLjUuNjgtYmsxMToKKyAqCS0gRml4IGltcHJvcGVyIHJldHVybi1jb2RlIGFzc2lnbm1lbnQgZHVyaW5nIGZhYnJpYworICoJICBkaXNjb3ZlcnkuCisgKgktIFJlbW92ZSBhZGRpdGlvbmFsIGV4dHJhbmVvdXMgI2RlZmluZXMgZnJvbQorICoJICBxbGFfc2V0dGluZ3MuaC4KKyAqCSAgLSBVU0VfUE9SVE5BTUUgLS0gRk8gd2lsbCBhbHdheXMgdXNlIHBvcnRuYW1lLgorICoJLSBEZWZhdWx0IHF1ZXVlIGRlcHRoIHNpemUgc2V0IHRvIDY0LgorICoKKyAqICBSZXYgIDguMDAuMDBiMS1wcmU0MiBBcHJpbCA/PywgMjAwMwkJQVYKKyAqCS0gQ29udmVydCBib3R0b20taGFsZiB0YXNrbGV0IHRvIGEgd29ya19xdWV1ZS4KKyAqCS0gSW5pdGlhbCBiYXNpYyBjb2Rpbmcgb2YgZHluYW1pYyBxdWV1ZSBkZXB0aCBoYW5kbGluZworICoJICBkdXJpbmcgUVVFVUUgRlVMTCBzdGF0dXNlcy4KKyAqCS0gRml4IG1haWxib3ggaW50ZXJmYWNlIHByb2JsZW0gd2l0aAorICoJICBxbGEyeDAwX2dldF9yZXRyeV9jbnQoKS4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjEtcHJlNDEgQXByaWwgPz8sIDIwMDMJCUFWCisgKgktIENvbnZlcnQgYnVpbGQgZGVmaW5lcyBxbGEyWzF8MnwzXTAwIG1hY3JvcyB0bworICoJICBxbGEyWzF8MnwzXXh4IGR1ZSB0byBtb2R1bGUgbmFtZSBzdHJpbmdpZmljYXRpb24gY2xhc2hlcy4KKyAqCS0gQWRkIGFkZGl0aW9uYWwgSVNQMjMyMiBjaGVja3MgZHVyaW5nIGJvYXJkIGNvbmZpZ3VyYXRpb24uCisgKgorICogIFJldiAgOC4wMC4wMGIxLXByZTQwIEFwcmlsID8/LCAyMDAzCQlBVgorICoJLSBSZXN5bmMgd2l0aCBMaW51eCBLZXJuZWwgMi41LjY4LWJrODoKKyAqCSAgLSBVcGRhdGVkIElSUSBoYW5kbGVyIGludGVyZmFjZS4KKyAqCS0gQWRkIElTUCBkdW1wIGNvZGUgKHN0dWIpIGluIGNhc2Ugb2YgU1lTVEVNX0VSUk9SIG9uCisgKgkgIElTUDIxMDAuCisgKgktIEFkZCBuZXcgMjIwMCBJUCBmaXJtd2FyZSAoMi4wMi4wNSkuCisgKgorICogIFJldiAgOC4wMC4wMGIxLXByZTM5IEFwcmlsID8/LCAyMDAzCQlBVgorICoJLSBSZXN5bmMgd2l0aCBMaW51eCBLZXJuZWwgMi41LjY4LgorICoJLSBBZGQgc2ltcGxlIGJ1aWxkLnNoIHNjcmlwdCB0byBhaWQgaW4gZXh0ZXJuYWwgY29tcGlsYXRpb24uCisgKgktIENsZWFuLWJyZWFrIHdpdGggS2VybmVsIDIuNCBjb21wYXRpYmlsaXR5LgorICoJICAtIFJld29yayBEUEMgcm91dGluZSAtLSBjb21wbGV0aW9uIHJvdXRpbmVzIGZvciBzaWduYWxpbmcuCisgKgktIFJlLWFkZCBIQkFBUEkgY2hhcmFjdGVyIGRldmljZSBub2RlIGZvciBJT0NUTCBzdXBwb3J0LgorICoJLSBSZW1vdmUgcmVzaWR1YWwgUUxBMlhfUEVSRk9STUFOQ0UgZGVmaW5lcy4KKyAqCS0gQWxsb2NhdGUgU1AgcG9vbCB2aWEgX19nZXRfZnJlZV9wYWdlcygpIHJhdGhlciB0aGFuCisgKgkgIGluZGl2aWR1YWwga21hbGxvYygpJ3MuCisgKgktIEluZm9ybSBTQ1NJIG1pZC1sYXllciBvZiAxNi1ieXRlIENEQiBzdXBwb3J0CisgKgkgIChob3N0LT5tYXhfY21kX2xlbik6CisgKgkgIC0gUmVtb3ZlIHVuZWNlc3NhcnkgJ21vcmVfY2RiJyBoYW5kbGluZyBjb2RlIGZyb20KKyAqCSAgICBxbGFfaW9jYi5jIGFuZCBxbGFfeGlvY3QuYy4KKyAqCS0gUmVkdWNlIGR1cGxpY2F0ZSBjb2RlIGluIGZhYnJpYyBzY2FubmluZyBsb2dpYyAoTVMgSU9DQgorICoJICBwcmVwYXJhdGlvbikuCisgKgktIEFkZCBJU1AgZHVtcCBjb2RlIGluIGNhc2Ugb2YgU1lTVEVNX0VSUk9SLgorICoJLSBSZW1vdmUgMjMwMCBWSVggZmlybXdhcmUgZnJvbSBkaXN0cmlidXRpb246CisgKgkgIC0gQWRkIGluaXRpYWwgY29kZSBmb3IgSVBYIHN1cHBvcnQuCisgKgktIEFkZCBuZXcgMjMwMCBUUFggZmlybXdhcmUgKDMuMDIuMTApLgorICoKKyAqICBSZXYgIDguMDAuMDBiMS1wcmUzNCBBcHJpbCA/PywgMjAwMwkJQVYKKyAqCS0gUmVzeW5jIHdpdGggTGludXggS2VybmVsIDIuNS42Ny4KKyAqCS0gVXNlIGRvbWFpbi9hcmVhL2FsX3BhIGZpZWxkcyB3aGVuIGRpc3BsYXlpbmcgUG9ydElEIAorICoJICB2YWx1ZXMgLS0gYWRkcmVzc2VzIGVuZGlhbmVzcyBpc3N1ZXMuCisgKgktIFJld29yayBsYXJnZSBjYXNlIHN0YXRlbWVudCB0byBjaGVjayAnY29tbW9uJyBDREIgY29tbWFuZHMKKyAqCSAgZWFybHkgaW4gcWxhMngwMF9nZXRfY21kX2RpcmVjdGlvbigpLgorICoKKyAqICBSZXYgIDguMDAuMDBiMS1wcmUzMSBBcHJpbCA/PywgMjAwMwkJQVYKKyAqCS0gVXBkYXRlIG1ha2VmaWxlIHRvIHN1cHBvcnQgUFBDNjQgYnVpbGQuCisgKgktIFJldG9vbCBOVlJBTSBjb25maWd1cmF0aW9uIHJvdXRpbmUgYW5kIHN0cnVjdHVyZXM6CisgKgkgIC0gQ29uc29sZGF0ZSBJU1AyMXh4L0lTUDIyeHgvSVNQMjN4eCBjb25maWd1cmF0aW9uCisgKgkgICAgKHN0cnVjdCBudnJhbV90KS4KKyAqCSAgLSBSZW1vdmUgYmlnL2xpdHRsZSBlbmRpYW4gc3VwcG9ydCBzdHJ1Y3R1cmVzIGluIGZhdm9yIG9mCisgKgkgICAgc2ltcGxpZmllZCBiaXQtb3BlcmF0aW9ucyB3aXRoaW4gYnl0ZSBmaWVsZHMuCisgKgktIEZpeCBsb25nLXN0YW5kaW5nICdzdGF0aWMnIGJ1ZmZlciBzaGFyaW5nIHByb2JsZW0gaW4gCisgKgkgIHFsYTJ4MDBfY29uZmlndXJlX2ZhYnJpYygpLgorICoKKyAqICBSZXYgIDguMDAuMDBiMS1wcmUzMCBBcHJpbCA/PywgMjAwMwkJQVYKKyAqCS0gQ29tcGxldGUgaW1wbGVtZW50YXRpb24gb2YgR0lEX1BUIHNjYW4uCisgKgktIFVzZSBjb25zaXN0ZW50IE1TIElPQ0IgaW52b2NhdGlvbiBtZXRob2QgdG8gcXVlcnkgU05TOgorICoJICAtIEFkZCBSTk5fSUQgYW5kIFJTTk5fTk4gcmVnaXN0cmF0aW9ucyBpbiBhIGZhYnJpYy4KKyAqCS0gUmVtb3ZlIHVudXNlZCBNYWlsYm94IENvbW1hbmQgNkVoIChTZW5kIFNOUykgc3VwcG9ydAorICoJICBzdHJ1Y3R1cmVzLgorICoJLSBVc2UgNjRiaXQgc2FmZSBJT0NCcyB3aGlsZSBpc3N1aW5nIElOUVVJUlkgYW5kIFJMQyBkdXJpbmcKKyAqCSAgdG9wb2xvZ3kgc2Nhbi4KKyAqCS0gVW50aWwgcmVpbXBsZW1lbnRhdGlvbiBvZiBmY2Rldl90L2ZjcG9ydCBsaXN0CisgKgkgIGNvbnNvbGlkYXRpb24sIHZhbGlkIGxvb3BfaWQgcmFuZ2VzIGFyZSBzdGlsbCBsaW1pdGVkIGZyb20KKyAqCSAgMHgwMCB0aHJvdWdoIDB4RkYgLS0gZW5mb3JjZSB0aGlzIHdpdGhpbiB0aGUgY29kZS4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjEtcHJlMjcgTWFyY2ggPz8sIDIwMDMJCUFWCisgKgktIFJlc3luYyB3aXRoIDYuMDUuMDBiOS4KKyAqCS0gUmV0b29sIEhCQSBQQ0kgY29uZmlndXJhdGlvbiAtLSBxbGEyeDAwX3BjaV9jb25maWcoKS4KKyAqCS0gUmVtb3ZlIGluY29uc2lzdGVudCB1c2Ugb2YgZGVsYXkgcm91dGluZXMgKFVERUxBWS9TWVMqKS4KKyAqCS0gQ29udGludWUgdG8gdGVhcmRvd24vY2xlYW4vYWRkIGNvbW1lbnRzIGFuZCBkZWJ1ZworICoJICByb3V0aW5lcy4KKyAqCS0gUHJvcGVybHkgc3dhcCBieXRlcyBvZiB0aGUgZGV2aWNlJ3Mgbm9kZW5hbWUgaW4KKyAqCSAgcWxhMngwMF9jb25maWd1cmVfbG9jYWxfbG9vcCgpLgorICoKKyAqICBSZXYgIDguMDAuMDBiMS1wcmUyNSBNYXJjaCA/PywgMjAwMwkJQVYKKyAqCS0gUmVzeW5jIHdpdGggNi4wNS4wMGI4LgorICoKKyAqICBSZXYgIDguMDAuMDBiMS1wcmUyMyBNYXJjaCA/PywgMjAwMwkJQVYKKyAqCS0gUmVtb3ZlICgjZGVmaW5lKSBJT0NCIHVzYWdlIHRocm90dGxpbmcuCisgKgktIEFic3RyYWN0IGludGVycnVwdCBwb2xsaW5nIHdpdGggcWxhMngwMF9wb2xsKCkuCisgKgktIE1vZGlmeSBsdW4gc2Nhbm5pbmcgbG9naWM6CisgKgkgIC0gSWYgdGhlIGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoZSBTQ1NJIFJlcG9ydCBMdW5zCisgKgkgICAgY29tbWFuZCwgdGhlIGRyaXZlciB3aWxsIG5vdyBvbmx5IHNjYW4gZnJvbSAwIHRvIHRoZQorICoJICAgIG1heCMtbHVucyBhcyBkZWZpbmVkIGluIHRoZSBOVlJBTSAoQklPUyksIHJhdGhlciB0aGFuCisgKgkgICAgYmxpbmRseSBzY2FubmluZyBmcm9tIDAgdG8gMjU1IC0tIHdoaWNoIGNvdWxkIHJlc3VsdCBpbgorICoJICAgIGFuIGluY3JlYXNlIGluIHN0YXJ0dXAgdGltZSB3aGVuIHJ1bm5pbmcgYWdhaW5zdCBzbG93CisgKgkgICAgKEpCT0QpIGRldmljZXMuCisgKgktIFJld29yayByZXNldCBsb2dpYyBpbiBxbGEyeDAwX3Jlc2V0X2NoaXAoKSAoc3BlYykuCisgKgorICogIFJldiAgOC4wMC4wMGIxLXByZTIyIE1hcmNoID8/LCAyMDAzCQlBVgorICoJLSBSZXN5bmMgd2l0aCA2LjA1LjAwYjcuCisgKgktIENsZWFudXAgKHJld3JpdGUpIElTUiBoYW5kbGVyLgorICoJLSBSZW5hbWUga21lbV96YWxsb2MgLS0+IHFsYTJ4MDBfa21lbV96YWxsb2MoKToKKyAqCSAgLSBUaGlzIGZ1bmN0aW9uIHdpbGwgZXZlbnR1YWxseSBiZSByZW1vdmVkLgorICoJLSBBZGQgbmV3IDIzMDAgVklYIGZpcm13YXJlICgzLjAyLjA5KToKKyAqCSAgLSBTdXBwb3J0IGZvciBUYXBlLCBGYWJyaWMsIDJLIGxvZ2lucywgSVAsIGFuZCBWSS4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjEtcHJlMTggTWFyY2ggPz8sIDIwMDMJCUFWCisgKgktIFN1cHBvcnQgMjMyeCB0eXBlIElTUHMuCisgKgktIFN1cHBvcnQgc2luZ2xlIGZpcm13YXJlIGZvciBlYWNoIElTUCB0eXBlOgorICoJICAtIFJlc3RydWN0dXJlIGJyZF9pbmZvL2Z3X2luZm8gbWV0aG9kcy4KKyAqCSAgLSBTdHJlYW1saW5lIGZpcm13YXJlIGxvYWQgcHJvY2Vzcy4KKyAqCSAgLSBQcm9wZXJseSBxdWVyeSBmaXJtd2FyZSBmb3IgdmVyc2lvbiBpbmZvcm1hdGlvbi4KKyAqCS0gUmVtb3ZlIGV4dHJhbmVvdXMgc2NzaV9xbGFfaG9zdCBtZW1iZXJzOgorICoJICAtIGRldmljZV9pZCA9PT4gcGRldi0+ZGV2aWNlCisgKgktIEZpeCBmYzQgZmVhdHVyZXMgKFJGRl9JRCkgcmVnaXN0cmF0aW9uLgorICoJLSBDb252ZXJ0IGttZW1femFsbG9jIC0tPiBxbGEyeDAwX2ttZW1femFsbG9jKCkuCisgKgktIFJlbW92ZSB1bnVzZWQvZXh0cmFuZW91cyAjZGVmaW5lcyAoVVNFX1BPUlROQU1FKS4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjEtcHJlMTQgTWFyY2ggPz8sIDIwMDMJCUFWCisgKgktIFJlc3luYyB3aXRoIDYuMDUuMDBiNi4KKyAqCS0gSW5pdGlhbCBzb3VyY2UtY29kZSByZXN0cnVjdHVyaW5nIGVmZm9ydC4KKyAqCSAgLSBCdWlsZCBwcm9jZWR1cmUuCisgKgkgIC0gU291cmNlIGZpbGUgbGF5b3V0IC0tIGludHVpdGl2ZSBjb21wb25lbnQgbGF5b3V0LgorICoJICAtIFJlbW92ZSB1bnVzZWQgI2RlZmluZXMgKCpQRVJGT1JNQU5DRSwgV09SRF9GV19MT0FELCBldGMpLgorICoJLSBBZGQgc3VwcG9ydCBmb3IgMksgbG9naW5zIChUUFggLS0gZmlybXdhcmUpLgorICoJLSBBZGQgbW9kdWxlIHBhcmFtZXRlciBxbDJ4c3VzcGVuZGNvdW50LgorICoJLSBBZGQgbmV3IDIyMDAgSVAvVFAgZmlybXdhcmUgKDIuMDIuMDQpLgorICoKKyAqICBSZXYgIDguMDAuMDBiMS1wcmU5CU1hcmNoID8/LCAyMDAzCVJML0RHL1JBL0FWCisgKgktIFVzZSBrZXJuZWwgc3RydWN0IGxpc3RfaGVhZCBmb3IgZmNwb3J0IGFuZCBmY2x1biBsaXN0cy4KKyAqCS0gUmVtb3ZlIGV4dHJhbmVvdXMgKEx8TSlTXzY0QklUUygpIGFuZCBRTDIxXzY0KigpIGRlZmluZXMuCisgKgorICogIFJldiAgOC4wMC4wMGIxLXByZTgJRmVicnVhcnkgMjgsIDIwMDMJUkwvREcvUkEvQVYKKyAqCS0gUmVzeW5jIHdpdGggNi4wNS4wMGIzLgorICoKKyAqICBSZXYgIDguMDAuMDBiMS1wcmU3CUZlYnJ1YXJ5IDIzLCAyMDAzCVJML0RHL1JBL0FWCisgKgktIEFkZCBhbHRlcm5hdGUgZmFicmljIHNjYW5uaW5nIGxvZ2ljIChHSURfUFQvR05OX0lEL0dQTl9JRCkuCisgKgktIFJlbW92ZSB1c2Ugb2YgZGVwcmVjYXRlZCBmdW5jdGlvbiBjaGVja19yZWdpb24oKS4KKyAqCS0gQWRkIG5ldyAyMzAwIElQL1RQIGZpcm13YXJlICgzLjAyLjA4KS4KKyAqCisgKiAgUmV2ICA4LjAwLjAwYjEtcHJlNQlKYW51YXJ5IDI4LCAyMDAzCVJML0RHL1JBL0FWCisgKgktIFJlc3luYyB3aXRoIDYuMDUuMDBiMy4KKyAqCS0gQ29uc29saWRhdGUgZGV2aWNlX3JlZyBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgZm9yIElTUCB0eXBlcy4KKyAqCS0gQWRkIHN1cHBvcnQgZm9yIG5ldyBxdWV1ZS1kZXB0aCBzZWxlY3Rpb24uCisgKgktIEFkZCBuZXcgMjMwMCBJUC9UUCBmaXJtd2FyZSAoMy4wMi4wNykuCisgKgorICogIFJldiAgOC4wMC4wMGIxLXByZTEJSmFudWFyeSAxNywgMjAwMwlBVgorICoJLSBJbml0aWFsIGJyYW5jaCBmcm9tIDYuMDQuMDBiOCBkcml2ZXIuCisgKgktIFJlbW92ZSBWTVdBUkUgc3BlY2lmaWMgY29kZS4KKyAqCS0gQWRkIHN1cHBvcnQgZm9yIHBjaV9kcml2ZXIgaW50ZXJmYWNlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9xbG9naWNmYXMudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Fsb2dpY2Zhcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk4Zjk5MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9xbG9naWNmYXMudHh0CkBAIC0wLDAgKzEsNzkgQEAKKworVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIFFsb2dpYyBGQVNYWFggZmFtaWx5IG9mIGNoaXBzLiAgVGhpcyBkcml2ZXIKK29ubHkgd29ya3Mgd2l0aCB0aGUgSVNBLCBWTEIsIGFuZCBQQ01DSUEgdmVyc2lvbnMgb2YgdGhlIFFsb2dpYworRmFzdFNDU0khICBjYXJkcyBhcyB3ZWxsIGFzIGFueSBvdGhlciBjYXJkIGJhc2VkIG9uIHRoZSBGQVNYWCBjaGlwCisoaW5jbHVkaW5nIHRoZSBDb250cm9sIENvbmNlcHRzIFNDU0kvSURFL1NJTy9QSU8vRkRDIGNhcmRzKS4KKworVGhpcyBkcml2ZXIgZG9lcyBOT1Qgc3VwcG9ydCB0aGUgUENJIHZlcnNpb24uICBTdXBwb3J0IGZvciB0aGVzZSBQQ0kKK1Fsb2dpYyBib2FyZHM6CisKKwkqIElRLVBDSQorCSogSVEtUENJLTEwCisJKiBJUS1QQ0ktRAorCitpcyBwcm92aWRlZCBieSB0aGUgcWxvZ2ljaXNwLmMgZHJpdmVyLiAgQ2hlY2sgUkVBRE1FLnFsb2dpY2lzcCBmb3IKK2RldGFpbHMuCisKK05vciBkb2VzIGl0IHN1cHBvcnQgdGhlIFBDSS1CYXNpYywgd2hpY2ggaXMgc3VwcG9ydGVkIGJ5IHRoZQorJ2FtNTNjOTc0JyBkcml2ZXIuCisKK1BDTUNJQSBTVVBQT1JUCisKK1RoaXMgY3VycmVudGx5IG9ubHkgd29ya3MgaWYgdGhlIGNhcmQgaXMgZW5hYmxlZCBmaXJzdCBmcm9tIERPUy4gIFRoaXMKK21lYW5zIHlvdSB3aWxsIGhhdmUgdG8gbG9hZCB5b3VyIHNvY2tldCBhbmQgY2FyZCBzZXJ2aWNlcywgYW5kCitRTDQxRE9TLlNZUyBhbmQgUUw0MEVOQkwuU1lTLiAgVGhlc2UgYXJlIGEgbWluaW11bSwgYnV0IGxvYWRpbmcgdGhlCityZXN0IG9mIHRoZSBtb2R1bGVzIHdvbid0IGludGVyZmVyZSB3aXRoIHRoZSBvcGVyYXRpb24uICBUaGUgbmV4dAordGhpbmcgdG8gZG8gaXMgbG9hZCB0aGUga2VybmVsIHdpdGhvdXQgcmVzZXR0aW5nIHRoZSBoYXJkd2FyZSwgd2hpY2gKK2NhbiBiZSBhIHNpbXBsZSBjdHJsLWFsdC1kZWxldGUgd2l0aCBhIGJvb3QgZmxvcHB5LCBvciBieSB1c2luZworbG9hZGxpbiB3aXRoIHRoZSBrZXJuZWwgaW1hZ2UgYWNjZXNzaWJsZSBmcm9tIERPUy4gIElmIHlvdSBhcmUgdXNpbmcKK3RoZSBMaW51eCBQQ01DSUEgZHJpdmVyLCB5b3Ugd2lsbCBoYXZlIHRvIGFkanVzdCBpdCBvciBvdGhlcndpc2Ugc3RvcAoraXQgZnJvbSBjb25maWd1cmluZyB0aGUgY2FyZC4KKworSSBhbSB3b3JraW5nIHdpdGggdGhlIFBDTUNJQSBncm91cCB0byBtYWtlIGl0IG1vcmUgZmxleGlibGUsIGJ1dCB0aGF0CittYXkgdGFrZSBhIHdoaWxlLgorCitBTEwgQ0FSRFMKKworVGhlIHRvcCBvZiB0aGUgcWxvZ2ljLmMgZmlsZSBoYXMgYSBudW1iZXIgb2YgZGVmaW5lcyB0aGF0IGNvbnRyb2xzCitjb25maWd1cmF0aW9uLiAgQXMgc2hpcHBlZCwgaXQgcHJvdmlkZXMgYSBiYWxhbmNlIGJldHdlZW4gc3BlZWQgYW5kCitmdW5jdGlvbi4gIElmIHRoZXJlIGFyZSBhbnkgcHJvYmxlbXMsIHRyeSBzZXR0aW5nIFNMT1dfQ0FCTEUgdG8gMSwgYW5kCit0aGVuIHRyeSBjaGFuZ2luZyBVU0VfSVJRIGFuZCBUVVJCT19QRE1BIHRvIHplcm8uICBJZiB5b3UgYXJlIGZhbWlsaWFyCit3aXRoIFNDU0ksIHRoZXJlIGFyZSBvdGhlciBzZXR0aW5ncyB3aGljaCBjYW4gdHVuZSB0aGUgYnVzLgorCitJdCBtYXkgYmUgYSBnb29kIGlkZWEgdG8gZW5hYmxlIFJFU0VUX0FUX1NUQVJULCBlc3BlY2lhbGx5IGlmIHRoZQorZGV2aWNlcyBtYXkgbm90IGhhdmUgYmVlbiBqdXN0IHBvd2VyZWQgdXAsIG9yIGlmIHlvdSBhcmUgcmVzdGFydGluZworYWZ0ZXIgYSBjcmFzaCwgc2luY2UgdGhleSBtYXkgYmUgYnVzeSB0cnlpbmcgdG8gY29tcGxldGUgdGhlIGxhc3QKK2NvbW1hbmQgb3Igc29tZXRoaW5nLiAgSXQgY29tZXMgdXAgZmFzdGVyIGlmIHRoaXMgaXMgc2V0IHRvIHplcm8sIGFuZAoraWYgeW91IGhhdmUgcmVsaWFibGUgaGFyZHdhcmUgYW5kIGNvbm5lY3Rpb25zIGl0IG1heSBiZSBtb3JlIHVzZWZ1bCB0bworbm90IHJlc2V0IHRoaW5ncy4KKworU09NRSBUUk9VQkxFU0hPT1RJTkcgVElQUworCitNYWtlIHN1cmUgaXQgd29ya3MgcHJvcGVybHkgdW5kZXIgRE9TLiAgWW91IHNob3VsZCBhbHNvIGRvIGFuIGluaXRpYWwgRkRJU0sKK29uIGEgbmV3IGRyaXZlIGlmIHlvdSB3YW50IHBhcnRpdGlvbnMuCisKK0Rvbid0IGVuYWJsZSBhbGwgdGhlIHNwZWVkdXBzIGZpcnN0LiAgSWYgYW55dGhpbmcgaXMgd3JvbmcsIHRoZXkgd2lsbCBtYWtlCithbnkgcHJvYmxlbSB3b3JzZS4KKworSU1QT1JUQU5UCisKK1RoZSBiZXN0IHdheSB0byB0ZXN0IGlmIHlvdXIgY2FibGVzLCB0ZXJtaW5hdGlvbiwgZXRjLiBhcmUgZ29vZCBpcyB0bworY29weSBhIHZlcnkgYmlnIGZpbGUgKGUuZy4gYSBkb3VibGVzcGFjZSBjb250YWluZXIgZmlsZSwgb3IgYSB2ZXJ5CitsYXJnZSBleGVjdXRhYmxlIG9yIGFyY2hpdmUpLiAgSXQgc2hvdWxkIGJlIGF0IGxlYXN0IDUgbWVnYWJ5dGVzLCBidXQKK3lvdSBjYW4gZG8gbXVsdGlwbGUgdGVzdHMgb24gc21hbGxlciBmaWxlcy4gIFRoZW4gZG8gYSBDT01QIHRvIHZlcmlmeQordGhhdCB0aGUgZmlsZSBjb3BpZWQgcHJvcGVybHkuICAoVHVybiBvZmYgYWxsIGNhY2hpbmcgd2hlbiBkb2luZyB0aGVzZQordGVzdHMsIG90aGVyd2lzZSB5b3Ugd2lsbCB0ZXN0IHlvdXIgUkFNIGFuZCBub3QgdGhlIGZpbGVzKS4gIFRoZW4gZG8KKzEwIENPTVBzLCBjb21wYXJpbmcgdGhlIHNhbWUgZmlsZSBvbiB0aGUgU0NTSSBoYXJkIGRyaXZlLCBpLmUuICJDT01QCityZWFsYmlnLmRvYyByZWFsYmlnLmRvYyIuICBUaGVuIGRvIGl0IGFmdGVyIHRoZSBjb21wdXRlciBnZXRzIHdhcm0uCisKK0kgbm90aWNlZCBteSBzeXN0ZW0gd2hpY2ggc2VlbXMgdG8gd29yayAxMDAlIHdvdWxkIGZhaWwgdGhpcyB0ZXN0IGlmCit0aGUgY29tcHV0ZXIgd2FzIGxlZnQgb24gZm9yIGEgZmV3IGhvdXJzLiAgSXQgd2FzIHdvcnNlIHdpdGggbG9uZ2VyCitjYWJsZXMsIGFuZCBtb3JlIGRldmljZXMgb24gdGhlIFNDU0kgYnVzLiAgV2hhdCBzZWVtcyB0byBoYXBwZW4gaXMKK3RoYXQgaXQgZ2V0cyBhIGZhbHNlIEFDSyBjYXVzaW5nIGFuIGV4dHJhIGJ5dGUgdG8gYmUgaW5zZXJ0ZWQgaW50byB0aGUKK3N0cmVhbSAoYW5kIHRoaXMgaXMgbm90IGRldGVjdGVkKS4gIFRoaXMgY2FuIGJlIGNhdXNlZCBieSBiYWQKK3Rlcm1pbmF0aW9uICh0aGUgQUNLIGNhbiBiZSByZWZsZWN0ZWQpLCBvciBieSBub2lzZSB3aGVuIHRoZSBjaGlwcword29yayBsZXNzIHdlbGwgYmVjYXVzZSBvZiB0aGUgaGVhdCwgb3Igd2hlbiBjYWJsZXMgZ2V0IHRvbyBsb25nIGZvcgordGhlIHNwZWVkLgorCitSZW1lbWJlciwgaWYgaXQgZG9lc24ndCB3b3JrIHVuZGVyIERPUywgaXQgcHJvYmFibHkgd29uJ3Qgd29yayB1bmRlcgorTGludXguCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvcWxvZ2ljaXNwLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9xbG9naWNpc3AudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MjBmNmM3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Fsb2dpY2lzcC50eHQKQEAgLTAsMCArMSwzMCBAQAorTm90ZXMgZm9yIHRoZSBRTG9naWMgSVNQMTAyMCBQQ0kgU0NTSSBEcml2ZXI6CisKK1RoaXMgZHJpdmVyIHdvcmtzIHdlbGwgaW4gcHJhY3RpY2UsIGJ1dCBkb2VzIG5vdCBzdXBwb3J0IGRpc2Nvbm5lY3QvCityZWNvbm5lY3QsIHdoaWNoIG1ha2VzIHVzaW5nIGl0IHdpdGggdGFwZSBkcml2ZXMgaW1wcmFjdGljYWwuCisKK0l0IHNob3VsZCB3b3JrIGZvciBtb3N0IGhvc3QgYWRhcHRvcnMgd2l0aCB0aGUgSVNQMTAyMCBjaGlwLiAgVGhlCitRTG9naWMgQ29ycG9yYXRpb24gcHJvZHVjZXMgc2V2ZXJhbCBQQ0kgU0NTSSBhZGFwdGVycyB3aGljaCBzaG91bGQKK3dvcms6CisKKwkqIElRLVBDSQorCSogSVEtUENJLTEwCisJKiBJUS1QQ0ktRAorCitUaGlzIGRyaXZlciBtYXkgd29yayB3aXRoIGJvYXJkcyBjb250YWluaW5nIHRoZSBJU1AxMDIwQSBvciBJU1AxMDQwQQorY2hpcHMsIGJ1dCB0aGF0IGhhcyBub3QgYmVlbiB0ZXN0ZWQuCisKK1RoaXMgZHJpdmVyIHdpbGwgTk9UIHdvcmsgd2l0aDoKKworCSogSVNBIG9yIFZMIEJ1cyBRbG9naWMgY2FyZHMgKHRoZXkgdXNlIHRoZSAncWxvZ2ljZmFzJyBkcml2ZXIpCisJKiBQQ0ktYmFzaWMgKGl0IHVzZXMgdGhlICdhbTUzYzk3NCcgZHJpdmVyKQorCitNdWNoIHRoYW5rcyB0byBRTG9naWMncyB0ZWNoIHN1cHBvcnQgZm9yIHByb3ZpZGluZyB0aGUgbGF0ZXN0IElTUDEwMjAKK2Zpcm13YXJlLCBhbmQgZm9yIHRha2luZyB0aGUgdGltZSB0byByZXZpZXcgbXkgY29kZS4KKworRXJpayBNb2UKK2VobUBjcmlzLmNvbQorCitSZXZpc2VkOgorTWljaGFlbCBBLiBHcmlmZml0aAorZ3JpZkBjcy51Y3IuZWR1CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaS1nZW5lcmljLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpLWdlbmVyaWMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzOGUyYjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaS1nZW5lcmljLnR4dApAQCAtMCwwICsxLDEwMSBAQAorICAgICAgICAgICAgTm90ZXMgb24gTGludXggU0NTSSBHZW5lcmljIChzZykgZHJpdmVyCisgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMjAxMjYKK0ludHJvZHVjdGlvbgorPT09PT09PT09PT09CitUaGUgU0NTSSBHZW5lcmljIGRyaXZlciAoc2cpIGlzIG9uZSBvZiB0aGUgZm91ciAiaGlnaCBsZXZlbCIgU0NTSSBkZXZpY2UKK2RyaXZlcnMgYWxvbmcgd2l0aCBzZCwgc3QgYW5kIHNyIChkaXNrLCB0YXBlIGFuZCBDRFJPTSByZXNwZWN0aXZlbHkpLiBTZworaXMgbW9yZSBnZW5lcmFsaXplZCAoYnV0IGxvd2VyIGxldmVsKSB0aGFuIGl0cyBzaWJsaW5ncyBhbmQgdGVuZHMgdG8gYmUKK3VzZWQgb24gU0NTSSBkZXZpY2VzIHRoYXQgZG9uJ3QgZml0IGludG8gdGhlIGFscmVhZHkgc2VydmljZWQgY2F0ZWdvcmllcy4KK1RodXMgc2cgaXMgdXNlZCBmb3Igc2Nhbm5lcnMsIENEIHdyaXRlcnMgYW5kIHJlYWRpbmcgYXVkaW8gQ0RzIGRpZ2l0YWxseQorYW1vbmdzdCBvdGhlciB0aGluZ3MuCisKK1JhdGhlciB0aGFuIGRvY3VtZW50IHRoZSBkcml2ZXIncyBpbnRlcmZhY2UgaGVyZSwgdmVyc2lvbiBpbmZvcm1hdGlvbgoraXMgcHJvdmlkZWQgcGx1cyBwb2ludGVycyAoaS5lLiBVUkxzKSB3aGVyZSB0byBmaW5kIGRvY3VtZW50YXRpb24KK2FuZCBleGFtcGxlcy4KKworCitNYWpvciB2ZXJzaW9ucyBvZiB0aGUgc2cgZHJpdmVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitUaGVyZSBhcmUgdGhyZWUgbWFqb3IgdmVyc2lvbnMgb2Ygc2cgZm91bmQgaW4gdGhlIGxpbnV4IGtlcm5lbCAobGspOgorICAgICAgLSBzZyB2ZXJzaW9uIDEgKG9yaWdpbmFsKSBmcm9tIDE5OTIgdG8gZWFybHkgMTk5OSAobGsgMi4yLjUpIC4gCisJSXQgaXMgYmFzZWQgaW4gdGhlIHNnX2hlYWRlciBpbnRlcmZhY2Ugc3RydWN0dXJlLgorICAgICAgLSBzZyB2ZXJzaW9uIDIgZnJvbSBsayAyLjIuNiBpbiB0aGUgMi4yIHNlcmllcy4gSXQgaXMgYmFzZWQgb24KKwlhbiBleHRlbmRlZCB2ZXJzaW9uIG9mIHRoZSBzZ19oZWFkZXIgaW50ZXJmYWNlIHN0cnVjdHVyZS4KKyAgICAgIC0gc2cgdmVyc2lvbiAzIGZvdW5kIGluIHRoZSBsayAyLjQgc2VyaWVzIChhbmQgdGhlIGxrIDIuNSBzZXJpZXMpLgorCUl0IGFkZHMgdGhlIHNnX2lvX2hkciBpbnRlcmZhY2Ugc3RydWN0dXJlLgorCisKK1NnIGRyaXZlciBkb2N1bWVudGF0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PQorVGhlIG1vc3QgcmVjZW50IGRvY3VtZW50YXRpb24gb2YgdGhlIHNnIGRyaXZlciBpcyBrZXB0IGF0IHRoZSBMaW51eAorRG9jdW1lbnRhdGlvbiBQcm9qZWN0J3MgKExEUCkgc2l0ZTogCitodHRwOi8vd3d3LnRsZHAub3JnL0hPV1RPL1NDU0ktR2VuZXJpYy1IT1dUTworVGhpcyBkZXNjcmliZXMgdGhlIHNnIHZlcnNpb24gMyBkcml2ZXIgZm91bmQgaW4gdGhlIGxrIDIuNCBzZXJpZXMuCitUaGUgTERQIHJlbmRlcnMgZG9jdW1lbnRzIGluIHNpbmdsZSBhbmQgbXVsdGlwbGUgcGFnZSBIVE1MLCBwb3N0c2NyaXB0CithbmQgcGRmLiBUaGlzIGRvY3VtZW50IGNhbiBhbHNvIGJlIGZvdW5kIGF0OgoraHR0cDovL3d3dy50b3JxdWUubmV0L3NnL3Avc2dfdjNfaG8uaHRtbAorCitEb2N1bWVudGF0aW9uIGZvciB0aGUgdmVyc2lvbiAyIHNnIGRyaXZlciBmb3VuZCBpbiB0aGUgbGsgMi4yIHNlcmllcyBjYW4KK2JlIGZvdW5kIGF0IGh0dHA6Ly93d3cudG9ycXVlLm5ldC9zZy9wL3Njc2ktZ2VuZXJpYy50eHQgLiBBIGxhcmdlciB2ZXJzaW9uCitpcyBhdDogIGh0dHA6Ly93d3cudG9ycXVlLm5ldC9zZy9wL3Njc2ktZ2VuZXJpY19sb25nLnR4dCAuCisKK1RoZSBvcmlnaW5hbCBkb2N1bWVudGF0aW9uIGZvciB0aGUgc2cgZHJpdmVyIChwcmlvciB0byBsayAyLjIuNikgY2FuIGJlCitmb3VuZCBhdCBodHRwOi8vd3d3LnRvcnF1ZS5uZXQvc2cvcC9vcmlnaW5hbC9TQ1NJLVByb2dyYW1taW5nLUhPV1RPLnR4dAorYW5kIGluIHRoZSBMRFAgYXJjaGl2ZXMuCisKK0EgY2hhbmdlbG9nIHdpdGggYnJpZWYgbm90ZXMgY2FuIGJlIGZvdW5kIGluIHRoZQorL3Vzci9zcmMvbGludXgvaW5jbHVkZS9zY3NpL3NnLmggZmlsZS4gTm90ZSB0aGF0IHRoZSBnbGliYyBtYWludGFpbmVycyBjb3B5IAorYW5kIGVkaXQgdGhpcyBmaWxlIChyZW1vdmluZyBpdHMgY2hhbmdlbG9nIGZvciBleGFtcGxlKSBiZWZvcmUgcGxhY2luZyBpdCAKK2luIC91c3IvaW5jbHVkZS9zY3NpL3NnLmggLiBEcml2ZXIgZGVidWdnaW5nIGluZm9ybWF0aW9uIGFuZCBvdGhlciBub3RlcyAKK2NhbiBiZSBmb3VuZCBhdCB0aGUgdG9wIG9mIHRoZSAvdXNyL3NyYy9saW51eC9kcml2ZXJzL3Njc2kvc2cuYyBmaWxlLgorCitBIG1vcmUgZ2VuZXJhbCBkZXNjcmlwdGlvbiBvZiB0aGUgTGludXggU0NTSSBzdWJzeXN0ZW0gb2Ygd2hpY2ggc2cgaXMgYSAKK3BhcnQgY2FuIGJlIGZvdW5kIGF0IGh0dHA6Ly93d3cudGxkcC5vcmcvSE9XVE8vU0NTSS0yLjQtSE9XVE8gLgorCisKK0V4YW1wbGUgY29kZSBhbmQgdXRpbGl0aWVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhlcmUgYXJlIHR3byBwYWNrYWdlcyBvZiBzZyB1dGlsaXRpZXM6CisgIC0gc2czX3V0aWxzICAgZm9yIHRoZSBzZyB2ZXJzaW9uIDMgZHJpdmVyIGZvdW5kIGluIGxrIDIuNAorICAtIHNnX3V0aWxzICAgIGZvciB0aGUgc2cgdmVyc2lvbiAyIChhbmQgb3JpZ2luYWwpIGRyaXZlciBmb3VuZCBpbiBsayAyLjIKKyAgICAgICAgICAgICAgICBhbmQgZWFybGllcgorQm90aCBwYWNrYWdlcyB3aWxsIHdvcmsgaW4gdGhlIGxrIDIuNCBzZXJpZXMgaG93ZXZlciBzZzNfdXRpbHMgb2ZmZXJzIG1vcmUKK2NhcGFiaWxpdGllcy4gVGhleSBjYW4gYmUgZm91bmQgYXQ6IGh0dHA6Ly93d3cudG9ycXVlLm5ldC9zZyBhbmQgCitmcmVzaG1lYXQubmV0CisKK0Fub3RoZXIgYXBwcm9hY2ggaXMgdG8gbG9vayBhdCB0aGUgYXBwbGljYXRpb25zIHRoYXQgdXNlIHRoZSBzZyBkcml2ZXIuCitUaGVzZSBpbmNsdWRlIGNkcmVjb3JkLCBjZHBhcmFub2lhLCBTQU5FIGFuZCBjZHJkYW8uCisKKworTWFwcGluZyBvZiBMaW51eCBrZXJuZWwgdmVyc2lvbnMgdG8gc2cgZHJpdmVyIHZlcnNpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0hlcmUgaXMgYSBsaXN0IG9mIGxpbnV4IGtlcm5lbHMgaW4gdGhlIDIuNCBzZXJpZXMgdGhhdCBoYWQgbmV3IHZlcnNpb24KK29mIHRoZSBzZyBkcml2ZXI6CisgICAgICBsayAyLjQuMCA6IHNnIHZlcnNpb24gMy4xLjE3CisgICAgICBsayAyLjQuNyA6IHNnIHZlcnNpb24gMy4xLjE5IAorICAgICAgbGsgMi40LjEwIDogc2cgdmVyc2lvbiAzLjEuMjAgICoqCisgICAgICBsayAyLjQuMTcgOiBzZyB2ZXJzaW9uIDMuMS4yMiAKKworKiogVGhlcmUgd2VyZSAzIGNoYW5nZXMgdG8gc2cgdmVyc2lvbiAzLjEuMjAgYnkgdGhpcmQgcGFydGllcyBpbiB0aGUKKyAgIG5leHQgc2l4IGxpbnV4IGtlcm5lbCB2ZXJzaW9ucy4KKworRm9yIHJlZmVyZW5jZSBoZXJlIGlzIGEgbGlzdCBvZiBsaW51eCBrZXJuZWxzIGluIHRoZSAyLjIgc2VyaWVzIHRoYXQgaGFkIAorbmV3IHZlcnNpb24gb2YgdGhlIHNnIGRyaXZlcjoKKyAgICAgIGxrIDIuMi4wIDogb3JpZ2luYWwgc2cgdmVyc2lvbiBbd2l0aCBubyB2ZXJzaW9uIG51bWJlcl0KKyAgICAgIGxrIDIuMi42IDogc2cgdmVyc2lvbiAyLjEuMzEKKyAgICAgIGxrIDIuMi44IDogc2cgdmVyc2lvbiAyLjEuMzIKKyAgICAgIGxrIDIuMi4xMCA6IHNnIHZlcnNpb24gMi4xLjM0IFtTR19HRVRfVkVSU0lPTl9OVU0gaW9jdGwgZmlyc3QgYXBwZWFyZWRdCisgICAgICBsayAyLjIuMTQgOiBzZyB2ZXJzaW9uIDIuMS4zNgorICAgICAgbGsgMi4yLjE2IDogc2cgdmVyc2lvbiAyLjEuMzgKKyAgICAgIGxrIDIuMi4xNyA6IHNnIHZlcnNpb24gMi4xLjM5CisgICAgICBsayAyLjIuMjAgOiBzZyB2ZXJzaW9uIDIuMS40MAorCitUaGUgbGsgMi41IGRldmVsb3BtZW50IHNlcmllcyBoYXMgcmVjZW50bHkgY29tbWVuY2VkIGFuZCBpdCBjdXJyZW50bHkKK2NvbnRhaW5zIHNnIHZlcnNpb24gMy41LjIzIHdoaWNoIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIHNnCit2ZXJzaW9uIDMuMS4yMiBmb3VuZCBpbiBsayAyLjQuMTcgLgorCisKK0RvdWdsYXMgR2lsYmVydAorMjZ0aCBKYW51YXJ5IDIwMDIKK2RnaWxiZXJ0QGludGVybG9nLmNvbQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2kudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2kudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMWJiZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc2NzaS50eHQKQEAgLTAsMCArMSw0NCBAQAorU0NTSSBzdWJzeXN0ZW0gZG9jdW1lbnRhdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhlIExpbnV4IERvY3VtZW50YXRpb24gUHJvamVjdCAoTERQKSBtYWludGFpbnMgYSBkb2N1bWVudCBkZXNjcmliaW5nCit0aGUgU0NTSSBzdWJzeXN0ZW0gaW4gdGhlIExpbnV4IGtlcm5lbCAobGspIDIuNCBzZXJpZXMuIFNlZToKK2h0dHA6Ly93d3cudGxkcC5vcmcvSE9XVE8vU0NTSS0yLjQtSE9XVE8gLiBUaGUgTERQIGhhcyBzaW5nbGUKK2FuZCBtdWx0aXBsZSBwYWdlIEhUTUwgcmVuZGVyaW5ncyBhcyB3ZWxsIGFzIHBvc3RzY3JpcHQgYW5kIHBkZi4KK0l0IGNhbiBhbHNvIGJlIGZvdW5kIGF0IGh0dHA6Ly93d3cudG9ycXVlLm5ldC9zY3NpL1NDU0ktMi40LUhPV1RPIC4KKworCitOb3RlcyBvbiB1c2luZyBtb2R1bGVzIGluIHRoZSBTQ1NJIHN1YnN5c3RlbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoZSBzY3NpIHN1cHBvcnQgaW4gdGhlIGxpbnV4IGtlcm5lbCBjYW4gYmUgbW9kdWxhcml6ZWQgaW4gYSBudW1iZXIgb2YgCitkaWZmZXJlbnQgd2F5cyBkZXBlbmRpbmcgdXBvbiB0aGUgbmVlZHMgb2YgdGhlIGVuZCB1c2VyLiAgVG8gdW5kZXJzdGFuZAoreW91ciBvcHRpb25zLCB3ZSBzaG91bGQgZmlyc3QgZGVmaW5lIGEgZmV3IHRlcm1zLgorCitUaGUgc2NzaS1jb3JlIChhbHNvIGtub3duIGFzIHRoZSAibWlkIGxldmVsIikgY29udGFpbnMgdGhlIGNvcmUgb2Ygc2NzaSAKK3N1cHBvcnQuICBXaXRob3V0IGl0IHlvdSBjYW4gZG8gbm90aGluZyB3aXRoIGFueSBvZiB0aGUgb3RoZXIgc2NzaSBkcml2ZXJzLgorVGhlIHNjc2kgY29yZSBzdXBwb3J0IGNhbiBiZSBhIG1vZHVsZSAoc2NzaV9tb2QubyksIG9yIGl0IGNhbiBiZSBidWlsdCBpbnRvCit0aGUga2VybmVsLiBJZiB0aGUgY29yZSBpcyBhIG1vZHVsZSwgaXQgbXVzdCBiZSB0aGUgZmlyc3Qgc2NzaSBtb2R1bGUgCitsb2FkZWQsIGFuZCBpZiB5b3UgdW5sb2FkIHRoZSBtb2R1bGVzLCBpdCB3aWxsIGhhdmUgdG8gYmUgdGhlIGxhc3Qgb25lIAordW5sb2FkZWQuICBJbiBwcmFjdGljZSB0aGUgbW9kcHJvYmUgYW5kIHJtbW9kIGNvbW1hbmRzIChhbmQgImF1dG9jbGVhbiIpCit3aWxsIGVuZm9yY2UgdGhlIGNvcnJlY3Qgb3JkZXJpbmcgb2YgbG9hZGluZyBhbmQgdW5sb2FkaW5nIG1vZHVsZXMgaW4KK3RoZSBTQ1NJIHN1YnN5c3RlbS4KKworVGhlIGluZGl2aWR1YWwgdXBwZXIgYW5kIGxvd2VyIGxldmVsIGRyaXZlcnMgY2FuIGJlIGxvYWRlZCBpbiBhbnkgb3JkZXIgCitvbmNlIHRoZSBzY3NpIGNvcmUgaXMgcHJlc2VudCBpbiB0aGUga2VybmVsIChlaXRoZXIgY29tcGlsZWQgaW4gb3IgbG9hZGVkCithcyBhIG1vZHVsZSkuICBUaGUgZGlzayBkcml2ZXIgKHNkX21vZC5vKSwgY2Ryb20gZHJpdmVyIChzcl9tb2QubyksCit0YXBlIGRyaXZlciAqKiAoc3QubykgYW5kIHNjc2kgZ2VuZXJpY3MgZHJpdmVyIChzZy5vKSByZXByZXNlbnQgdGhlIHVwcGVyIAorbGV2ZWwgZHJpdmVycyB0byBzdXBwb3J0IHRoZSB2YXJpb3VzIGFzc29ydGVkIGRldmljZXMgd2hpY2ggY2FuIGJlIAorY29udHJvbGxlZC4gIFlvdSBjYW4gZm9yIGV4YW1wbGUgbG9hZCB0aGUgdGFwZSBkcml2ZXIgdG8gdXNlIHRoZSB0YXBlIGRyaXZlLCAKK2FuZCB0aGVuIHVubG9hZCBpdCBvbmNlIHlvdSBoYXZlIG5vIGZ1cnRoZXIgbmVlZCBmb3IgdGhlIGRyaXZlciAoYW5kIHJlbGVhc2UKK3RoZSBhc3NvY2lhdGVkIG1lbW9yeSkuCisKK1RoZSBsb3dlciBsZXZlbCBkcml2ZXJzIGFyZSB0aGUgb25lcyB0aGF0IHN1cHBvcnQgdGhlIGluZGl2aWR1YWwgY2FyZHMgdGhhdAorYXJlIHN1cHBvcnRlZCBmb3IgdGhlIGhhcmR3YXJlIHBsYXRmb3JtIHRoYXQgeW91IGFyZSBydW5uaW5nIHVuZGVyLiBUaG9zZQoraW5kaXZpZHVhbCBjYXJkcyBhcmUgb2Z0ZW4gY2FsbGVkIEhvc3QgQnVzIEFkYXB0ZXJzIChIQkFzKS4gRm9yIGV4YW1wbGUgdGhlCithaWM3eHh4Lm8gZHJpdmVyIGlzIHVzZWQgdG8gY29udHJvbCBhbGwgcmVjZW50IFNDU0kgY29udHJvbGxlciBjYXJkcyBmcm9tIAorQWRhcHRlYy4gQWxtb3N0IGFsbCBsb3dlciBsZXZlbCBkcml2ZXJzIGNhbiBiZSBidWlsdCBlaXRoZXIgYXMgbW9kdWxlcyBvciAKK2J1aWx0IGludG8gdGhlIGtlcm5lbC4KKworCisqKiBUaGVyZSBpcyBhIHZhcmlhbnQgb2YgdGhlIHN0IGRyaXZlciBmb3IgY29udHJvbGxpbmcgT25TdHJlYW0gdGFwZQorICAgZGV2aWNlcy4gSXRzIG1vZHVsZSBuYW1lIGlzIG9zc3QubyAuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpX21pZF9sb3dfYXBpLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9zY3NpX21pZF9sb3dfYXBpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjI0MTI5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Njc2lfbWlkX2xvd19hcGkudHh0CkBAIC0wLDAgKzEsMTU0NiBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICBMaW51eCBLZXJuZWwgMi42IHNlcmllcworICAgICAgICAgICAgICAgICBTQ1NJIG1pZF9sZXZlbCAtIGxvd2VyX2xldmVsIGRyaXZlciBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ludHJvZHVjdGlvbgorPT09PT09PT09PT09CitUaGlzIGRvY3VtZW50IG91dGxpbmVzIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgTGludXggU0NTSSBtaWQgbGV2ZWwgYW5kCitTQ1NJIGxvd2VyIGxldmVsIGRyaXZlcnMuIExvd2VyIGxldmVsIGRyaXZlcnMgKExMRHMpIGFyZSB2YXJpb3VzbHkgY2FsbGVkIAoraG9zdCBidXMgYWRhcHRlciAoSEJBKSBkcml2ZXJzIGFuZCBob3N0IGRyaXZlcnMgKEhEKS4gQSAiaG9zdCIgaW4gdGhpcworY29udGV4dCBpcyBhIGJyaWRnZSBiZXR3ZWVuIGEgY29tcHV0ZXIgSU8gYnVzIChlLmcuIFBDSSBvciBJU0EpIGFuZCBhCitzaW5nbGUgU0NTSSBpbml0aWF0b3IgcG9ydCBvbiBhIFNDU0kgdHJhbnNwb3J0LiBBbiAiaW5pdGlhdG9yIiBwb3J0CisoU0NTSSB0ZXJtaW5vbG9neSwgc2VlIFNBTS0zIGF0IGh0dHA6Ly93d3cudDEwLm9yZykgc2VuZHMgU0NTSSBjb21tYW5kcwordG8gInRhcmdldCIgU0NTSSBwb3J0cyAoZS5nLiBkaXNrcykuIFRoZXJlIGNhbiBiZSBtYW55IExMRHMgaW4gYSBydW5uaW5nCitzeXN0ZW0sIGJ1dCBvbmx5IG9uZSBwZXIgaGFyZHdhcmUgdHlwZS4gTW9zdCBMTERzIGNhbiBjb250cm9sIG9uZSBvciBtb3JlCitTQ1NJIEhCQXMuIFNvbWUgSEJBcyBjb250YWluIG11bHRpcGxlIGhvc3RzLgorCitJbiBzb21lIGNhc2VzIHRoZSBTQ1NJIHRyYW5zcG9ydCBpcyBhbiBleHRlcm5hbCBidXMgdGhhdCBhbHJlYWR5IGhhcworaXRzIG93biBzdWJzeXN0ZW0gaW4gTGludXggKGUuZy4gVVNCIGFuZCBpZWVlMTM5NCkuIEluIHN1Y2ggY2FzZXMgdGhlCitTQ1NJIHN1YnN5c3RlbSBMTEQgaXMgYSBzb2Z0d2FyZSBicmlkZ2UgdG8gdGhlIG90aGVyIGRyaXZlciBzdWJzeXN0ZW0uCitFeGFtcGxlcyBhcmUgdGhlIHVzYi1zdG9yYWdlIGRyaXZlciAoZm91bmQgaW4gdGhlIGRyaXZlcnMvdXNiL3N0b3JhZ2UKK2RpcmVjdG9yeSkgYW5kIHRoZSBpZWVlMTM5NC9zYnAyIGRyaXZlciAoZm91bmQgaW4gdGhlIGRyaXZlcnMvaWVlZTEzOTQKK2RpcmVjdG9yeSkuCisKK0ZvciBleGFtcGxlLCB0aGUgYWljN3h4eCBMTEQgY29udHJvbHMgQWRhcHRlYyBTQ1NJIHBhcmFsbGVsIGludGVyZmFjZQorKFNQSSkgY29udHJvbGxlcnMgYmFzZWQgb24gdGhhdCBjb21wYW55J3MgN3h4eCBjaGlwIHNlcmllcy4gVGhlIGFpYzd4eHgKK0xMRCBjYW4gYmUgYnVpbHQgaW50byB0aGUga2VybmVsIG9yIGxvYWRlZCBhcyBhIG1vZHVsZS4gVGhlcmUgY2FuIG9ubHkgYmUKK29uZSBhaWM3eHh4IExMRCBydW5uaW5nIGluIGEgTGludXggc3lzdGVtIGJ1dCBpdCBtYXkgYmUgY29udHJvbGxpbmcgbWFueSAKK0hCQXMuIFRoZXNlIEhCQXMgbWlnaHQgYmUgZWl0aGVyIG9uIFBDSSBkYXVnaHRlci1ib2FyZHMgb3IgYnVpbHQgaW50byAKK3RoZSBtb3RoZXJib2FyZCAob3IgYm90aCkuIFNvbWUgYWljN3h4eCBiYXNlZCBIQkFzIGFyZSBkdWFsIGNvbnRyb2xsZXJzCithbmQgdGh1cyByZXByZXNlbnQgdHdvIGhvc3RzLiBMaWtlIG1vc3QgbW9kZXJuIEhCQXMsIGVhY2ggYWljN3h4eCBob3N0CitoYXMgaXRzIG93biBQQ0kgZGV2aWNlIGFkZHJlc3MuIFtUaGUgb25lLXRvLW9uZSBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuCithIFNDU0kgaG9zdCBhbmQgYSBQQ0kgZGV2aWNlIGlzIGNvbW1vbiBidXQgbm90IHJlcXVpcmVkIChlLmcuIHdpdGgKK0lTQSBvciBNQ0EgYWRhcHRlcnMpLl0KKworVGhlIFNDU0kgbWlkIGxldmVsIGlzb2xhdGVzIGFuIExMRCBmcm9tIG90aGVyIGxheWVycyBzdWNoIGFzIHRoZSBTQ1NJCit1cHBlciBsYXllciBkcml2ZXJzIGFuZCB0aGUgYmxvY2sgbGF5ZXIuCisKK1RoaXMgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQgcm91Z2hseSBtYXRjaGVzIGxpbnV4IGtlcm5lbCB2ZXJzaW9uIDIuNi44IC4KKworRG9jdW1lbnRhdGlvbgorPT09PT09PT09PT09PQorVGhlcmUgaXMgYSBTQ1NJIGRvY3VtZW50YXRpb24gZGlyZWN0b3J5IHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZSB0cmVlLCAKK3R5cGljYWxseSBEb2N1bWVudGF0aW9uL3Njc2kgLiBNb3N0IGRvY3VtZW50cyBhcmUgaW4gcGxhaW4KKyhpLmUuIEFTQ0lJKSB0ZXh0LiBUaGlzIGZpbGUgaXMgbmFtZWQgc2NzaV9taWRfbG93X2FwaS50eHQgYW5kIGNhbiBiZSAKK2ZvdW5kIGluIHRoYXQgZGlyZWN0b3J5LiBBIG1vcmUgcmVjZW50IGNvcHkgb2YgdGhpcyBkb2N1bWVudCBtYXkgYmUgZm91bmQKK2F0IGh0dHA6Ly93d3cudG9ycXVlLm5ldC9zY3NpL3Njc2lfbWlkX2xvd19hcGkudHh0Lmd6IC4gCitNYW55IExMRHMgYXJlIGRvY3VtZW50ZWQgdGhlcmUgKGUuZy4gYWljN3h4eC50eHQpLiBUaGUgU0NTSSBtaWQtbGV2ZWwgaXMKK2JyaWVmbHkgZGVzY3JpYmVkIGluIHNjc2kudHh0IHdoaWNoIGNvbnRhaW5zIGEgdXJsIHRvIGEgZG9jdW1lbnQgCitkZXNjcmliaW5nIHRoZSBTQ1NJIHN1YnN5c3RlbSBpbiB0aGUgbGsgMi40IHNlcmllcy4gVHdvIHVwcGVyIGxldmVsIAorZHJpdmVycyBoYXZlIGRvY3VtZW50cyBpbiB0aGF0IGRpcmVjdG9yeTogc3QudHh0IChTQ1NJIHRhcGUgZHJpdmVyKSBhbmQgCitzY3NpLWdlbmVyaWMudHh0IChmb3IgdGhlIHNnIGRyaXZlcikuCisKK1NvbWUgZG9jdW1lbnRhdGlvbiAob3IgdXJscykgZm9yIExMRHMgbWF5IGJlIGZvdW5kIGluIHRoZSBDIHNvdXJjZSBjb2RlCitvciBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIEMgc291cmNlIGNvZGUuIEZvciBleGFtcGxlIHRvIGZpbmQgYSB1cmwKK2Fib3V0IHRoZSBVU0IgbWFzcyBzdG9yYWdlIGRyaXZlciBzZWUgdGhlIAorL3Vzci9zcmMvbGludXgvZHJpdmVycy91c2Ivc3RvcmFnZSBkaXJlY3RvcnkuCisKK1RoZSBMaW51eCBrZXJuZWwgc291cmNlIERvY3VtZW50YXRpb24vRG9jQm9vay9zY3NpZHJpdmVycy50bXBsIGZpbGUKK3JlZmVycyB0byB0aGlzIGZpbGUuIFdpdGggdGhlIGFwcHJvcHJpYXRlIERvY0Jvb2sgdG9vbC1zZXQsIHRoaXMgcGVybWl0cwordXNlcnMgdG8gZ2VuZXJhdGUgaHRtbCwgcHMgYW5kIHBkZiByZW5kZXJpbmdzIG9mIGluZm9ybWF0aW9uIHdpdGhpbiB0aGlzCitmaWxlIChlLmcuIHRoZSBpbnRlcmZhY2UgZnVuY3Rpb25zKS4KKworRHJpdmVyIHN0cnVjdHVyZQorPT09PT09PT09PT09PT09PQorVHJhZGl0aW9uYWxseSBhbiBMTEQgZm9yIHRoZSBTQ1NJIHN1YnN5c3RlbSBoYXMgYmVlbiBhdCBsZWFzdCB0d28gZmlsZXMgaW4KK3RoZSBkcml2ZXJzL3Njc2kgZGlyZWN0b3J5LiBGb3IgZXhhbXBsZSwgYSBkcml2ZXIgY2FsbGVkICJ4eXoiIGhhcyBhIGhlYWRlcgorZmlsZSAieHl6LmgiIGFuZCBhIHNvdXJjZSBmaWxlICJ4eXouYyIuIFtBY3R1YWxseSB0aGVyZSBpcyBubyBnb29kIHJlYXNvbgord2h5IHRoaXMgY291bGRuJ3QgYWxsIGJlIGluIG9uZSBmaWxlOyB0aGUgaGVhZGVyIGZpbGUgaXMgc3VwZXJmbHVvdXMuXSBTb21lCitkcml2ZXJzIHRoYXQgaGF2ZSBiZWVuIHBvcnRlZCB0byBzZXZlcmFsIG9wZXJhdGluZyBzeXN0ZW1zIGhhdmUgbW9yZSB0aGFuCit0d28gZmlsZXMuIEZvciBleGFtcGxlIHRoZSBhaWM3eHh4IGRyaXZlciBoYXMgc2VwYXJhdGUgZmlsZXMgZm9yIGdlbmVyaWMgCithbmQgT1Mtc3BlY2lmaWMgY29kZSAoZS5nLiBGcmVlQlNEIGFuZCBMaW51eCkuIFN1Y2ggZHJpdmVycyB0ZW5kIHRvIGhhdmUKK3RoZWlyIG93biBkaXJlY3RvcnkgdW5kZXIgdGhlIGRyaXZlcnMvc2NzaSBkaXJlY3RvcnkuCisKK1doZW4gYSBuZXcgTExEIGlzIGJlaW5nIGFkZGVkIHRvIExpbnV4LCB0aGUgZm9sbG93aW5nIGZpbGVzIChmb3VuZCBpbiB0aGUKK2RyaXZlcnMvc2NzaSBkaXJlY3RvcnkpIHdpbGwgbmVlZCBzb21lIGF0dGVudGlvbjogTWFrZWZpbGUgYW5kIEtjb25maWcgLgorSXQgaXMgcHJvYmFibHkgYmVzdCB0byBzdHVkeSBob3cgZXhpc3RpbmcgTExEcyBhcmUgb3JnYW5pemVkLgorCitBcyB0aGUgMi41IHNlcmllcyBkZXZlbG9wbWVudCBrZXJuZWxzIGV2b2x2ZSBpbnRvIHRoZSAyLjYgc2VyaWVzCitwcm9kdWN0aW9uIHNlcmllcywgY2hhbmdlcyBhcmUgYmVpbmcgaW50cm9kdWNlZCBpbnRvIHRoaXMgaW50ZXJmYWNlLiBBbgorZXhhbXBsZSBvZiB0aGlzIGlzIGRyaXZlciBpbml0aWFsaXphdGlvbiBjb2RlIHdoZXJlIHRoZXJlIGFyZSBub3cgMiBtb2RlbHMKK2F2YWlsYWJsZS4gVGhlIG9sZGVyIG9uZSwgc2ltaWxhciB0byB3aGF0IHdhcyBmb3VuZCBpbiB0aGUgbGsgMi40IHNlcmllcywKK2lzIGJhc2VkIG9uIGhvc3RzIHRoYXQgYXJlIGRldGVjdGVkIGF0IEhCQSBkcml2ZXIgbG9hZCB0aW1lLiBUaGlzIHdpbGwgYmUKK3JlZmVycmVkIHRvIHRoZSAicGFzc2l2ZSIgaW5pdGlhbGl6YXRpb24gbW9kZWwuIFRoZSBuZXdlciBtb2RlbCBhbGxvd3MgSEJBcwordG8gYmUgaG90IHBsdWdnZWQgKGFuZCB1bnBsdWdnZWQpIGR1cmluZyB0aGUgbGlmZXRpbWUgb2YgdGhlIExMRCBhbmQgd2lsbAorYmUgcmVmZXJyZWQgdG8gYXMgdGhlICJob3RwbHVnIiBpbml0aWFsaXphdGlvbiBtb2RlbC4gVGhlIG5ld2VyIG1vZGVsIGlzCitwcmVmZXJyZWQgYXMgaXQgY2FuIGhhbmRsZSBib3RoIHRyYWRpdGlvbmFsIFNDU0kgZXF1aXBtZW50IHRoYXQgaXMKK3Blcm1hbmVudGx5IGNvbm5lY3RlZCBhcyB3ZWxsIGFzIG1vZGVybiAiU0NTSSIgZGV2aWNlcyAoZS5nLiBVU0Igb3IKK0lFRUUgMTM5NCBjb25uZWN0ZWQgZGlnaXRhbCBjYW1lcmFzKSB0aGF0IGFyZSBob3RwbHVnZ2VkLiBCb3RoIAoraW5pdGlhbGl6YXRpb24gbW9kZWxzIGFyZSBkaXNjdXNzZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KKworQW4gTExEIGludGVyZmFjZXMgdG8gdGhlIFNDU0kgc3Vic3lzdGVtIHNldmVyYWwgd2F5czoKKyAgYSkgZGlyZWN0bHkgaW52b2tpbmcgZnVuY3Rpb25zIHN1cHBsaWVkIGJ5IHRoZSBtaWQgbGV2ZWwKKyAgYikgcGFzc2luZyBhIHNldCBvZiBmdW5jdGlvbiBwb2ludGVycyB0byBhIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbgorICAgICBzdXBwbGllZCBieSB0aGUgbWlkIGxldmVsLiBUaGUgbWlkIGxldmVsIHdpbGwgdGhlbiBpbnZva2UgdGhlc2UKKyAgICAgZnVuY3Rpb25zIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZS4gVGhlIExMRCB3aWxsIHN1cHBseQorICAgICBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlc2UgZnVuY3Rpb25zLgorICBjKSBkaXJlY3QgYWNjZXNzIHRvIGluc3RhbmNlcyBvZiB3ZWxsIGtub3duIGRhdGEgc3RydWN0dXJlcyBtYWludGFpbmVkCisgICAgIGJ5IHRoZSBtaWQgbGV2ZWwKKworVGhvc2UgZnVuY3Rpb25zIGluIGdyb3VwIGEpIGFyZSBsaXN0ZWQgaW4gYSBzZWN0aW9uIGVudGl0bGVkICJNaWQgbGV2ZWwKK3N1cHBsaWVkIGZ1bmN0aW9ucyIgYmVsb3cuCisKK1Rob3NlIGZ1bmN0aW9ucyBpbiBncm91cCBiKSBhcmUgbGlzdGVkIGluIGEgc2VjdGlvbiBlbnRpdGxlZCAiSW50ZXJmYWNlCitmdW5jdGlvbnMiIGJlbG93LiBUaGVpciBmdW5jdGlvbiBwb2ludGVycyBhcmUgcGxhY2VkIGluIHRoZSBtZW1iZXJzIG9mCisic3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSIsIGFuIGluc3RhbmNlIG9mIHdoaWNoIGlzIHBhc3NlZCB0bworc2NzaV9ob3N0X2FsbG9jKCkgKiogLiAgVGhvc2UgaW50ZXJmYWNlIGZ1bmN0aW9ucyB0aGF0IHRoZSBMTEQgZG9lcyBub3QgCit3aXNoIHRvIHN1cHBseSBzaG91bGQgaGF2ZSBOVUxMIHBsYWNlZCBpbiB0aGUgY29ycmVzcG9uZGluZyBtZW1iZXIgb2YgCitzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlLiAgRGVmaW5pbmcgYW4gaW5zdGFuY2Ugb2Ygc3RydWN0IAorc2NzaV9ob3N0X3RlbXBsYXRlIGF0IGZpbGUgc2NvcGUgd2lsbCBjYXVzZSBOVUxMIHRvIGJlICBwbGFjZWQgaW4gZnVuY3Rpb24KKyBwb2ludGVyIG1lbWJlcnMgbm90IGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuCisKK1Rob3NlIHVzYWdlcyBpbiBncm91cCBjKSBzaG91bGQgYmUgaGFuZGxlZCB3aXRoIGNhcmUsIGVzcGVjaWFsbHkgaW4gYQorImhvdHBsdWciIGVudmlyb25tZW50LiBMTERzIHNob3VsZCBiZSBhd2FyZSBvZiB0aGUgbGlmZXRpbWUgb2YgaW5zdGFuY2VzCit0aGF0IGFyZSBzaGFyZWQgd2l0aCB0aGUgbWlkIGxldmVsIGFuZCBvdGhlciBsYXllcnMuCisKK0FsbCBmdW5jdGlvbnMgZGVmaW5lZCB3aXRoaW4gYW4gTExEIGFuZCBhbGwgZGF0YSBkZWZpbmVkIGF0IGZpbGUgc2NvcGUKK3Nob3VsZCBiZSBzdGF0aWMuIEZvciBleGFtcGxlIHRoZSBzbGF2ZV9hbGxvYygpIGZ1bmN0aW9uIGluIGFuIExMRAorY2FsbGVkICJ4eHgiIGNvdWxkIGJlIGRlZmluZWQgYXMgCisic3RhdGljIGludCB4eHhfc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICogc2RldikgeyAvKiBjb2RlICovIH0iCisKKyoqIHRoZSBzY3NpX2hvc3RfYWxsb2MoKSBmdW5jdGlvbiBpcyBhIHJlcGxhY2VtZW50IGZvciB0aGUgcmF0aGVyIHZhZ3VlbHkKK25hbWVkIHNjc2lfcmVnaXN0ZXIoKSBmdW5jdGlvbiBpbiBtb3N0IHNpdHVhdGlvbnMuIFRoZSBzY3NpX3JlZ2lzdGVyKCkKK2FuZCBzY3NpX3VucmVnaXN0ZXIoKSBmdW5jdGlvbnMgcmVtYWluIHRvIHN1cHBvcnQgbGVnYWN5IExMRHMgdGhhdCB1c2UKK3RoZSBwYXNzaXZlIGluaXRpYWxpemF0aW9uIG1vZGVsLgorCisKK0hvdHBsdWcgaW5pdGlhbGl6YXRpb24gbW9kZWwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0luIHRoaXMgbW9kZWwgYW4gTExEIGNvbnRyb2xzIHdoZW4gU0NTSSBob3N0cyBhcmUgaW50cm9kdWNlZCBhbmQgcmVtb3ZlZAorZnJvbSB0aGUgU0NTSSBzdWJzeXN0ZW0uIEhvc3RzIGNhbiBiZSBpbnRyb2R1Y2VkIGFzIGVhcmx5IGFzIGRyaXZlcgoraW5pdGlhbGl6YXRpb24gYW5kIHJlbW92ZWQgYXMgbGF0ZSBhcyBkcml2ZXIgc2h1dGRvd24uIFR5cGljYWxseSBhIGRyaXZlcgord2lsbCByZXNwb25kIHRvIGEgc3lzZnMgcHJvYmUoKSBjYWxsYmFjayB0aGF0IGluZGljYXRlcyBhbiBIQkEgaGFzIGJlZW4KK2RldGVjdGVkLiBBZnRlciBjb25maXJtaW5nIHRoYXQgdGhlIG5ldyBkZXZpY2UgaXMgb25lIHRoYXQgdGhlIExMRCB3YW50cwordG8gY29udHJvbCwgdGhlIExMRCB3aWxsIGluaXRpYWxpemUgdGhlIEhCQSBhbmQgdGhlbiByZWdpc3RlciBhIG5ldyBob3N0Cit3aXRoIHRoZSBTQ1NJIG1pZCBsZXZlbC4KKworRHVyaW5nIExMRCBpbml0aWFsaXphdGlvbiB0aGUgZHJpdmVyIHNob3VsZCByZWdpc3RlciBpdHNlbGYgd2l0aCB0aGUKK2FwcHJvcHJpYXRlIElPIGJ1cyBvbiB3aGljaCBpdCBleHBlY3RzIHRvIGZpbmQgSEJBKHMpIChlLmcuIHRoZSBQQ0kgYnVzKS4KK1RoaXMgY2FuIHByb2JhYmx5IGJlIGRvbmUgdmlhIHN5c2ZzLiBBbnkgZHJpdmVyIHBhcmFtZXRlcnMgKGVzcGVjaWFsbHkKK3Rob3NlIHRoYXQgYXJlIHdyaXRhYmxlIGFmdGVyIHRoZSBkcml2ZXIgaXMgbG9hZGVkKSBjb3VsZCBhbHNvIGJlCityZWdpc3RlcmVkIHdpdGggc3lzZnMgYXQgdGhpcyBwb2ludC4gVGhlIFNDU0kgbWlkIGxldmVsIGZpcnN0IGJlY29tZXMKK2F3YXJlIG9mIGFuIExMRCB3aGVuIHRoYXQgTExEIHJlZ2lzdGVycyBpdHMgZmlyc3QgSEJBLgorCitBdCBzb21lIGxhdGVyIHRpbWUsIHRoZSBMTEQgYmVjb21lcyBhd2FyZSBvZiBhbiBIQkEgYW5kIHdoYXQgZm9sbG93cworaXMgYSB0eXBpY2FsIHNlcXVlbmNlIG9mIGNhbGxzIGJldHdlZW4gdGhlIExMRCBhbmQgdGhlIG1pZCBsZXZlbC4KK1RoaXMgZXhhbXBsZSBzaG93cyB0aGUgbWlkIGxldmVsIHNjYW5uaW5nIHRoZSBuZXdseSBpbnRyb2R1Y2VkIEhCQSBmb3IgMyAKK3Njc2kgZGV2aWNlcyBvZiB3aGljaCBvbmx5IHRoZSBmaXJzdCAyIHJlc3BvbmQ6CisKKyAgICAgSEJBIFBST0JFOiBhc3N1bWUgMiBTQ1NJIGRldmljZXMgZm91bmQgaW4gc2NhbgorTExEICAgICAgICAgICAgICAgICAgIG1pZCBsZXZlbCAgICAgICAgICAgICAgICAgICAgTExECis9PT0tLS0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09LS0tLS0tLS0tLS0tLS0tLS0tLS09PT0tLS0tLS0KK3Njc2lfaG9zdF9hbGxvYygpICAtLT4KK3Njc2lfYWRkX2hvc3QoKSAgLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICBzbGF2ZV9hbGxvYygpCisgICAgICAgICAgICAgICAgICAgIHNsYXZlX2NvbmZpZ3VyZSgpIC0tPiAgc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoKQorICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgc2xhdmVfYWxsb2MoKQorICAgICAgICAgICAgICAgICAgICBzbGF2ZV9jb25maWd1cmUoKQorICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgc2xhdmVfYWxsb2MoKSAgICoqKgorICAgICAgICAgICAgICAgICAgICBzbGF2ZV9kZXN0cm95KCkgKioqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgdGhlIExMRCB3YW50cyB0byBhZGp1c3QgdGhlIGRlZmF1bHQgcXVldWUgc2V0dGluZ3MsIGl0IGNhbiBpbnZva2UKK3Njc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKCkgaW4gaXRzIHNsYXZlX2NvbmZpZ3VyZSgpIHJvdXRpbmUuCisKKyoqKiBGb3Igc2NzaSBkZXZpY2VzIHRoYXQgdGhlIG1pZCBsZXZlbCB0cmllcyB0byBzY2FuIGJ1dCBkbyBub3QKKyAgICByZXNwb25kLCBhIHNsYXZlX2FsbG9jKCksIHNsYXZlX2Rlc3Ryb3koKSBwYWlyIGlzIGNhbGxlZC4KKworV2hlbiBhbiBIQkEgaXMgYmVpbmcgcmVtb3ZlZCBpdCBjb3VsZCBiZSBhcyBwYXJ0IG9mIGFuIG9yZGVybHkgc2h1dGRvd24KK2Fzc29jaWF0ZWQgd2l0aCB0aGUgTExEIG1vZHVsZSBiZWluZyB1bmxvYWRlZCAoZS5nLiB3aXRoIHRoZSAicm1tb2QiCitjb21tYW5kKSBvciBpbiByZXNwb25zZSB0byBhICJob3QgdW5wbHVnIiBpbmRpY2F0ZWQgYnkgc3lzZnMoKSdzCityZW1vdmUoKSBjYWxsYmFjayBiZWluZyBpbnZva2VkLiBJbiBlaXRoZXIgY2FzZSwgdGhlIHNlcXVlbmNlIGlzIHRoZQorc2FtZToKKworICAgICAgICBIQkEgUkVNT1ZFOiBhc3N1bWUgMiBTQ1NJIGRldmljZXMgYXR0YWNoZWQKK0xMRCAgICAgICAgICAgICAgICAgICAgICBtaWQgbGV2ZWwgICAgICAgICAgICAgICAgIExMRAorPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PT09PT09PS0tLS0tLS0tLS0tLS0tLS0tPT09LS0tLS0tCitzY3NpX3JlbW92ZV9ob3N0KCkgLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgIHNsYXZlX2Rlc3Ryb3koKQorICAgICAgICAgICAgICAgICAgICAgc2xhdmVfZGVzdHJveSgpCitzY3NpX2hvc3RfcHV0KCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgCitJdCBtYXkgYmUgdXNlZnVsIGZvciBhIExMRCB0byBrZWVwIHRyYWNrIG9mIHN0cnVjdCBTY3NpX0hvc3QgaW5zdGFuY2VzCisoYSBwb2ludGVyIGlzIHJldHVybmVkIGJ5IHNjc2lfaG9zdF9hbGxvYygpKS4gU3VjaCBpbnN0YW5jZXMgYXJlICJvd25lZCIKK2J5IHRoZSBtaWQtbGV2ZWwuICBzdHJ1Y3QgU2NzaV9Ib3N0IGluc3RhbmNlcyBhcmUgZnJlZWQgZnJvbQorc2NzaV9ob3N0X3B1dCgpIHdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudCBoaXRzIHplcm8uCisKK0hvdCB1bnBsdWdnaW5nIGFuIEhCQSB0aGF0IGNvbnRyb2xzIGEgZGlzayB3aGljaCBpcyBwcm9jZXNzaW5nIFNDU0kKK2NvbW1hbmRzIG9uIGEgbW91bnRlZCBmaWxlIHN5c3RlbSBpcyBhbiBpbnRlcmVzdGluZyBzaXR1YXRpb24uIFJlZmVyZW5jZQorY291bnRpbmcgbG9naWMgaXMgYmVpbmcgaW50cm9kdWNlZCBpbnRvIHRoZSBtaWQgbGV2ZWwgdG8gY29wZSB3aXRoIG1hbnkKK29mIHRoZSBpc3N1ZXMgaW52b2x2ZWQuIFNlZSB0aGUgc2VjdGlvbiBvbiByZWZlcmVuY2UgY291bnRpbmcgYmVsb3cuCisKKworVGhlIGhvdHBsdWcgY29uY2VwdCBtYXkgYmUgZXh0ZW5kZWQgdG8gU0NTSSBkZXZpY2VzLiBDdXJyZW50bHksIHdoZW4gYW4KK0hCQSBpcyBhZGRlZCwgdGhlIHNjc2lfYWRkX2hvc3QoKSBmdW5jdGlvbiBjYXVzZXMgYSBzY2FuIGZvciBTQ1NJIGRldmljZXMKK2F0dGFjaGVkIHRvIHRoZSBIQkEncyBTQ1NJIHRyYW5zcG9ydC4gT24gbmV3ZXIgU0NTSSB0cmFuc3BvcnRzIHRoZSBIQkEKK21heSBiZWNvbWUgYXdhcmUgb2YgYSBuZXcgU0NTSSBkZXZpY2UgX2FmdGVyXyB0aGUgc2NhbiBoYXMgY29tcGxldGVkLgorQW4gTExEIGNhbiB1c2UgdGhpcyBzZXF1ZW5jZSB0byBtYWtlIHRoZSBtaWQgbGV2ZWwgYXdhcmUgb2YgYSBTQ1NJIGRldmljZToKKworICAgICAgICAgICAgICAgICBTQ1NJIERFVklDRSBob3RwbHVnCitMTEQgICAgICAgICAgICAgICAgICAgbWlkIGxldmVsICAgICAgICAgICAgICAgICAgICBMTEQKKz09PS0tLS0tLS0tLS0tLS0tLS0tLS09PT09PT09PT0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS0tLS0tLQorc2NzaV9hZGRfZGV2aWNlKCkgIC0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgIHNsYXZlX2FsbG9jKCkKKyAgICAgICAgICAgICAgICAgICAgc2xhdmVfY29uZmlndXJlKCkgICBbLS0+IHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKCldCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gYSBzaW1pbGFyIGZhc2hpb24sIGFuIExMRCBtYXkgYmVjb21lIGF3YXJlIHRoYXQgYSBTQ1NJIGRldmljZSBoYXMgYmVlbgorcmVtb3ZlZCAodW5wbHVnZ2VkKSBvciB0aGUgY29ubmVjdGlvbiB0byBpdCBoYXMgYmVlbiBpbnRlcnJ1cHRlZC4gU29tZQorZXhpc3RpbmcgU0NTSSB0cmFuc3BvcnRzIChlLmcuIFNQSSkgbWF5IG5vdCBiZWNvbWUgYXdhcmUgdGhhdCBhIFNDU0kKK2RldmljZSBoYXMgYmVlbiByZW1vdmVkIHVudGlsIGEgc3Vic2VxdWVudCBTQ1NJIGNvbW1hbmQgZmFpbHMgd2hpY2ggd2lsbAorcHJvYmFibHkgY2F1c2UgdGhhdCBkZXZpY2UgdG8gYmUgc2V0IG9mZmxpbmUgYnkgdGhlIG1pZCBsZXZlbC4gQW4gTExEIHRoYXQKK2RldGVjdHMgdGhlIHJlbW92YWwgb2YgYSBTQ1NJIGRldmljZSBjYW4gaW5zdGlnYXRlIGl0cyByZW1vdmFsIGZyb20KK3VwcGVyIGxheWVycyB3aXRoIHRoaXMgc2VxdWVuY2U6CisKKyAgICAgICAgICAgICAgICAgIFNDU0kgREVWSUNFIGhvdCB1bnBsdWcKK0xMRCAgICAgICAgICAgICAgICAgICAgICBtaWQgbGV2ZWwgICAgICAgICAgICAgICAgIExMRAorPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PT09PT09PS0tLS0tLS0tLS0tLS0tLS0tPT09LS0tLS0tCitzY3NpX3JlbW92ZV9kZXZpY2UoKSAtLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgIHNsYXZlX2Rlc3Ryb3koKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0l0IG1heSBiZSB1c2VmdWwgZm9yIGFuIExMRCB0byBrZWVwIHRyYWNrIG9mIHN0cnVjdCBzY3NpX2RldmljZSBpbnN0YW5jZXMKKyhhIHBvaW50ZXIgaXMgcGFzc2VkIGFzIHRoZSBwYXJhbWV0ZXIgdG8gc2xhdmVfYWxsb2MoKSBhbmQKK3NsYXZlX2NvbmZpZ3VyZSgpIGNhbGxiYWNrcykuIFN1Y2ggaW5zdGFuY2VzIGFyZSAib3duZWQiIGJ5IHRoZSBtaWQtbGV2ZWwuCitzdHJ1Y3Qgc2NzaV9kZXZpY2UgaW5zdGFuY2VzIGFyZSBmcmVlZCBhZnRlciBzbGF2ZV9kZXN0cm95KCkuCisKKworUGFzc2l2ZSBpbml0aWFsaXphdGlvbiBtb2RlbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhlc2Ugb2xkZXIgTExEcyBpbmNsdWRlIGEgZmlsZSBjYWxsZWQgInNjc2lfbW9kdWxlLmMiIFt5ZXMgdGhlICIuYyIgaXMgYQorbGl0dGxlIHN1cnByaXNpbmddIGluIHRoZWlyIHNvdXJjZSBjb2RlLiBGb3IgdGhhdCBmaWxlIHRvIHdvcmsgYW4KK2luc3RhbmNlIG9mIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgd2l0aCB0aGUgbmFtZSAiZHJpdmVyX3RlbXBsYXRlIgorbmVlZHMgdG8gYmUgZGVmaW5lZC4gSGVyZSBpcyBhIHR5cGljYWwgY29kZSBzZXF1ZW5jZSB1c2VkIGluIHRoaXMgbW9kZWw6CisgICAgc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgZHJpdmVyX3RlbXBsYXRlID0geworICAgICAgICAuLi4KKyAgICB9OworICAgICNpbmNsdWRlICJzY3NpX21vZHVsZS5jIgorCitUaGUgc2NzaV9tb2R1bGUuYyBmaWxlIGNvbnRhaW5zIHR3byBmdW5jdGlvbnM6CisgIC0gaW5pdF90aGlzX3Njc2lfZHJpdmVyKCkgd2hpY2ggaXMgZXhlY3V0ZWQgd2hlbiB0aGUgTExEIGlzCisgICAgaW5pdGlhbGl6ZWQgKGkuZS4gYm9vdCB0aW1lIG9yIG1vZHVsZSBsb2FkIHRpbWUpCisgIC0gZXhpdF90aGlzX3Njc2lfZHJpdmVyKCkgd2hpY2ggaXMgZXhlY3V0ZWQgd2hlbiB0aGUgTExEIGlzIHNodXQKKyAgICBkb3duIChpLmUuIG1vZHVsZSB1bmxvYWQgdGltZSkKK05vdGU6IHNpbmNlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdGFnZ2VkIHdpdGggX19pbml0IGFuZCBfX2V4aXQgcXVhbGlmaWVycworYW4gTExEIHNob3VsZCBub3QgY2FsbCB0aGVtIGV4cGxpY2l0bHkgKHNpbmNlIHRoZSBrZXJuZWwgZG9lcyB0aGF0KS4KKworSGVyZSBpcyBhbiBleGFtcGxlIG9mIGFuIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIHdoZW4gdHdvIGhvc3RzIGFyZQorZGV0ZWN0ZWQgKHNvIGRldGVjdCgpIHJldHVybnMgMikgYW5kIHRoZSBTQ1NJIGJ1cyBzY2FuIG9uIGVhY2ggaG9zdAorZmluZHMgMSBTQ1NJIGRldmljZSAoYW5kIGEgc2Vjb25kIGRldmljZSBkb2VzIG5vdCByZXNwb25kKS4KKworTExEICAgICAgICAgICAgICAgICAgICAgIG1pZCBsZXZlbCAgICAgICAgICAgICAgICAgTExECis9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09LS0tLS0tLS0tLS0tLS0tLS09PT0tLS0tLS0KK2luaXRfdGhpc19zY3NpX2RyaXZlcigpIC0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgIGRldGVjdCgpICAtLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBzY3NpX3JlZ2lzdGVyKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIHNjc2lfcmVnaXN0ZXIoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICBzbGF2ZV9hbGxvYygpCisgICAgICAgICAgICAgICAgICAgICAgc2xhdmVfY29uZmlndXJlKCkgIC0tPiAgc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoKQorICAgICAgICAgICAgICAgICAgICAgIHNsYXZlX2FsbG9jKCkgICAqKioKKyAgICAgICAgICAgICAgICAgICAgICBzbGF2ZV9kZXN0cm95KCkgKioqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgIHNsYXZlX2FsbG9jKCkKKyAgICAgICAgICAgICAgICAgICAgICBzbGF2ZV9jb25maWd1cmUoKQorICAgICAgICAgICAgICAgICAgICAgIHNsYXZlX2FsbG9jKCkgICAqKioKKyAgICAgICAgICAgICAgICAgICAgICBzbGF2ZV9kZXN0cm95KCkgKioqCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG1pZCBsZXZlbCBpbnZva2VzIHNjc2lfYWRqdXN0X3F1ZXVlX2RlcHRoKCkgd2l0aCB0YWdnZWQgcXVldWluZyBvZmYgYW5kCisiY21kX3Blcl9sdW4iIGZvciB0aGF0IGhvc3QgYXMgdGhlIHF1ZXVlIGxlbmd0aC4gVGhlc2Ugc2V0dGluZ3MgY2FuIGJlCitvdmVycmlkZGVuIGJ5IGEgc2xhdmVfY29uZmlndXJlKCkgc3VwcGxpZWQgYnkgdGhlIExMRC4KKworKioqIEZvciBzY3NpIGRldmljZXMgdGhhdCB0aGUgbWlkIGxldmVsIHRyaWVzIHRvIHNjYW4gYnV0IGRvIG5vdAorICAgIHJlc3BvbmQsIGEgc2xhdmVfYWxsb2MoKSwgc2xhdmVfZGVzdHJveSgpIHBhaXIgaXMgY2FsbGVkLgorCitIZXJlIGlzIGFuIExMRCBzaHV0ZG93biBzZXF1ZW5jZToKKworTExEICAgICAgICAgICAgICAgICAgICAgIG1pZCBsZXZlbCAgICAgICAgICAgICAgICAgTExECis9PT0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09PT09PT09LS0tLS0tLS0tLS0tLS0tLS09PT0tLS0tLS0KK2V4aXRfdGhpc19zY3NpX2RyaXZlcigpIC0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgc2xhdmVfZGVzdHJveSgpCisgICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlKCkgICAtLT4gICBzY3NpX3VucmVnaXN0ZXIoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgIHNsYXZlX2Rlc3Ryb3koKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZSgpICAgLS0+ICAgc2NzaV91bnJlZ2lzdGVyKCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbiBMTEQgbmVlZCBub3QgZGVmaW5lIHNsYXZlX2Rlc3Ryb3koKSAoaS5lLiBpdCBpcyBvcHRpb25hbCkuIAorCitUaGUgc2hvcnRjb21pbmcgb2YgdGhlICJwYXNzaXZlIGluaXRpYWxpemF0aW9uIG1vZGVsIiBpcyB0aGF0IGhvc3QKK3JlZ2lzdHJhdGlvbiBhbmQgZGUtcmVnaXN0cmF0aW9uIGFyZSAodHlwaWNhbGx5KSB0aWVkIHRvIExMRCBpbml0aWFsaXphdGlvbgorYW5kIHNodXRkb3duLiBPbmNlIHRoZSBMTEQgaXMgaW5pdGlhbGl6ZWQgdGhlbiBhIG5ldyBob3N0IHRoYXQgYXBwZWFycworKGUuZy4gdmlhIGhvdHBsdWdnaW5nKSBjYW5ub3QgZWFzaWx5IGJlIGFkZGVkIHdpdGhvdXQgYSByZWR1bmRhbnQKK2RyaXZlciBzaHV0ZG93biBhbmQgcmUtaW5pdGlhbGl6YXRpb24uIEl0IG1heSBiZSBwb3NzaWJsZSB0byB3cml0ZSBhbiBMTEQKK3RoYXQgdXNlcyBib3RoIGluaXRpYWxpemF0aW9uIG1vZGVscy4KKworCitSZWZlcmVuY2UgQ291bnRpbmcKKz09PT09PT09PT09PT09PT09PQorVGhlIFNjc2lfSG9zdCBzdHJ1Y3R1cmUgaGFzIGhhZCByZWZlcmVuY2UgY291bnRpbmcgaW5mcmFzdHJ1Y3R1cmUgYWRkZWQuCitUaGlzIGVmZmVjdGl2ZWx5IHNwcmVhZHMgdGhlIG93bmVyc2hpcCBvZiBzdHJ1Y3QgU2NzaV9Ib3N0IGluc3RhbmNlcworYWNyb3NzIHRoZSB2YXJpb3VzIFNDU0kgbGF5ZXJzIHdoaWNoIHVzZSB0aGVtLiBQcmV2aW91c2x5IHN1Y2ggaW5zdGFuY2VzCit3ZXJlIGV4Y2x1c2l2ZWx5IG93bmVkIGJ5IHRoZSBtaWQgbGV2ZWwuIExMRHMgd291bGQgbm90IHVzdWFsbHkgbmVlZCB0bworZGlyZWN0bHkgbWFuaXB1bGF0ZSB0aGVzZSByZWZlcmVuY2UgY291bnRzIGJ1dCB0aGVyZSBtYXkgYmUgc29tZSBjYXNlcword2hlcmUgdGhleSBkby4KKworVGhlcmUgYXJlIDMgcmVmZXJlbmNlIGNvdW50aW5nIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCBhc3NvY2lhdGVkIHdpdGgKK3N0cnVjdCBTY3NpX0hvc3Q6CisgIC0gc2NzaV9ob3N0X2FsbG9jKCk6IHJldHVybnMgYSBwb2ludGVyIHRvIG5ldyBpbnN0YW5jZSBvZiBzdHJ1Y3QgCisgICAgICAgIFNjc2lfSG9zdCB3aGljaCBoYXMgaXRzIHJlZmVyZW5jZSBjb3VudCBeXiBzZXQgdG8gMQorICAtIHNjc2lfaG9zdF9nZXQoKTogYWRkcyAxIHRvIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGdpdmVuIGluc3RhbmNlCisgIC0gc2NzaV9ob3N0X3B1dCgpOiBkZWNyZW1lbnRzIDEgZnJvbSB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBnaXZlbgorICAgICAgICBpbnN0YW5jZS4gSWYgdGhlIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIDAgdGhlbiB0aGUgZ2l2ZW4gaW5zdGFuY2UKKyAgICAgICAgaXMgZnJlZWQKKworVGhlIFNjc2lfZGV2aWNlIHN0cnVjdHVyZSBoYXMgaGFkIHJlZmVyZW5jZSBjb3VudGluZyBpbmZyYXN0cnVjdHVyZSBhZGRlZC4KK1RoaXMgZWZmZWN0aXZlbHkgc3ByZWFkcyB0aGUgb3duZXJzaGlwIG9mIHN0cnVjdCBTY3NpX2RldmljZSBpbnN0YW5jZXMKK2Fjcm9zcyB0aGUgdmFyaW91cyBTQ1NJIGxheWVycyB3aGljaCB1c2UgdGhlbS4gUHJldmlvdXNseSBzdWNoIGluc3RhbmNlcword2VyZSBleGNsdXNpdmVseSBvd25lZCBieSB0aGUgbWlkIGxldmVsLiBTZWUgdGhlIGFjY2VzcyBmdW5jdGlvbnMgZGVjbGFyZWQKK3Rvd2FyZHMgdGhlIGVuZCBvZiBpbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaCAuIElmIGFuIExMRCB3YW50cyB0byBrZWVwCithIGNvcHkgb2YgYSBwb2ludGVyIHRvIGEgU2NzaV9kZXZpY2UgaW5zdGFuY2UgaXQgc2hvdWxkIHVzZSBzY3NpX2RldmljZV9nZXQoKQordG8gYnVtcCBpdHMgcmVmZXJlbmNlIGNvdW50LiBXaGVuIGl0IGlzIGZpbmlzaGVkIHdpdGggdGhlIHBvaW50ZXIgaXQgY2FuCit1c2Ugc2NzaV9kZXZpY2VfcHV0KCkgdG8gZGVjcmVtZW50IGl0cyByZWZlcmVuY2UgY291bnQgKGFuZCBwb3RlbnRpYWxseQorZGVsZXRlIGl0KS4KKworXl4gc3RydWN0IFNjc2lfSG9zdCBhY3R1YWxseSBoYXMgMiByZWZlcmVuY2UgY291bnRzIHdoaWNoIGFyZSBtYW5pcHVsYXRlZAoraW4gcGFyYWxsZWwgYnkgdGhlc2UgZnVuY3Rpb25zLgorCisKK0NvbnZlbnRpb25zCis9PT09PT09PT09PQorRmlyc3QsIExpbnVzIFRvcnZhbGRzJ3MgdGhvdWdodHMgb24gQyBjb2Rpbmcgc3R5bGUgY2FuIGJlIGZvdW5kIGluIHRoZQorRG9jdW1lbnRhdGlvbi9Db2RpbmdTdHlsZSBmaWxlLiAKKworTmV4dCwgdGhlcmUgaXMgYSBtb3ZlbWVudCB0byAib3V0bGF3IiB0eXBlZGVmcyBpbnRyb2R1Y2luZyBzeW5vbnltcyBmb3IgCitzdHJ1Y3QgdGFncy4gQm90aCBjYW4gYmUgc3RpbGwgZm91bmQgaW4gdGhlIFNDU0kgc3Vic3lzdGVtLCBidXQKK3RoZSB0eXBlZGVmcyBoYXZlIGJlZW4gbW92ZWQgdG8gYSBzaW5nbGUgZmlsZSwgc2NzaV90eXBlZGVmcy5oIHRvCittYWtlIHRoZWlyIGZ1dHVyZSByZW1vdmFsIGVhc2llciwgZm9yIGV4YW1wbGU6IAorInR5cGVkZWYgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBTY3NpX0hvc3RfVGVtcGxhdGU7IgorCitBbHNvLCBtb3N0IEM5OSBlbmhhbmNlbWVudHMgYXJlIGVuY291cmFnZWQgdG8gdGhlIGV4dGVudCB0aGV5IGFyZSBzdXBwb3J0ZWQKK2J5IHRoZSByZWxldmFudCBnY2MgY29tcGlsZXJzLiBTbyBDOTkgc3R5bGUgc3RydWN0dXJlIGFuZCBhcnJheQoraW5pdGlhbGl6ZXJzIGFyZSBlbmNvdXJhZ2VkIHdoZXJlIGFwcHJvcHJpYXRlLiBEb24ndCBnbyB0b28gZmFyLAorVkxBcyBhcmUgbm90IHByb3Blcmx5IHN1cHBvcnRlZCB5ZXQuICBBbiBleGNlcHRpb24gdG8gdGhpcyBpcyB0aGUgdXNlIG9mCisiLy8iIHN0eWxlIGNvbW1lbnRzOyAvKi4uLiovIGNvbW1lbnRzIGFyZSBzdGlsbCBwcmVmZXJyZWQgaW4gTGludXguCisKK1dlbGwgd3JpdHRlbiwgdGVzdGVkIGFuZCBkb2N1bWVudGVkIGNvZGUsIG5lZWQgbm90IGJlIHJlLWZvcm1hdHRlZCB0bworY29tcGx5IHdpdGggdGhlIGFib3ZlIGNvbnZlbnRpb25zLiBGb3IgZXhhbXBsZSwgdGhlIGFpYzd4eHggZHJpdmVyCitjb21lcyB0byBMaW51eCBmcm9tIEZyZWVCU0QgYW5kIEFkYXB0ZWMncyBvd24gbGFicy4gTm8gZG91YnQgRnJlZUJTRAorYW5kIEFkYXB0ZWMgaGF2ZSB0aGVpciBvd24gY29kaW5nIGNvbnZlbnRpb25zLgorCisKK01pZCBsZXZlbCBzdXBwbGllZCBmdW5jdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoZXNlIGZ1bmN0aW9ucyBhcmUgc3VwcGxpZWQgYnkgdGhlIFNDU0kgbWlkIGxldmVsIGZvciB1c2UgYnkgTExEcy4KK1RoZSBuYW1lcyAoaS5lLiBlbnRyeSBwb2ludHMpIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgCitzbyBhbiBMTEQgdGhhdCBpcyBhIG1vZHVsZSBjYW4gYWNjZXNzIHRoZW0uIFRoZSBrZXJuZWwgd2lsbAorYXJyYW5nZSBmb3IgdGhlIFNDU0kgbWlkIGxldmVsIHRvIGJlIGxvYWRlZCBhbmQgaW5pdGlhbGl6ZWQgYmVmb3JlIGFueSBMTEQKK2lzIGluaXRpYWxpemVkLiBUaGUgZnVuY3Rpb25zIGJlbG93IGFyZSBsaXN0ZWQgYWxwaGFiZXRpY2FsbHkgYW5kIHRoZWlyCituYW1lcyBhbGwgc3RhcnQgd2l0aCAic2NzaV8iLgorCitTdW1tYXJ5OgorICAgc2NzaV9hY3RpdmF0ZV90Y3EgLSB0dXJuIG9uIHRhZyBjb21tYW5kIHF1ZXVlaW5nCisgICBzY3NpX2FkZF9kZXZpY2UgLSBjcmVhdGVzIG5ldyBzY3NpIGRldmljZSAobHUpIGluc3RhbmNlCisgICBzY3NpX2FkZF9ob3N0IC0gcGVyZm9ybSBzeXNmcyByZWdpc3RyYXRpb24gYW5kIFNDU0kgYnVzIHNjYW4uCisgICBzY3NpX2FkZF90aW1lciAtIChyZS0pc3RhcnQgdGltZXIgb24gYSBTQ1NJIGNvbW1hbmQuCisgICBzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aCAtIGNoYW5nZSB0aGUgcXVldWUgZGVwdGggb24gYSBTQ1NJIGRldmljZQorICAgc2NzaV9hc3NpZ25fbG9jayAtIHJlcGxhY2UgZGVmYXVsdCBob3N0X2xvY2sgd2l0aCBnaXZlbiBsb2NrCisgICBzY3NpX2Jpb3NfcHRhYmxlIC0gcmV0dXJuIGNvcHkgb2YgYmxvY2sgZGV2aWNlJ3MgcGFydGl0aW9uIHRhYmxlCisgICBzY3NpX2Jsb2NrX3JlcXVlc3RzIC0gcHJldmVudCBmdXJ0aGVyIGNvbW1hbmRzIGJlaW5nIHF1ZXVlZCB0byBnaXZlbiBob3N0CisgICBzY3NpX2RlYWN0aXZhdGVfdGNxIC0gdHVybiBvZmYgdGFnIGNvbW1hbmQgcXVldWVpbmcKKyAgIHNjc2lfZGVsZXRlX3RpbWVyIC0gY2FuY2VsIHRpbWVyIG9uIGEgU0NTSSBjb21tYW5kLgorICAgc2NzaV9ob3N0X2FsbG9jIC0gcmV0dXJuIGEgbmV3IHNjc2lfaG9zdCBpbnN0YW5jZSB3aG9zZSByZWZjb3VudD09MQorICAgc2NzaV9ob3N0X2dldCAtIGluY3JlbWVudHMgU2NzaV9Ib3N0IGluc3RhbmNlJ3MgcmVmY291bnQKKyAgIHNjc2lfaG9zdF9wdXQgLSBkZWNyZW1lbnRzIFNjc2lfSG9zdCBpbnN0YW5jZSdzIHJlZmNvdW50IChmcmVlIGlmIDApCisgICBzY3NpX3BhcnRzaXplIC0gcGFyc2UgcGFydGl0aW9uIHRhYmxlIGludG8gY3lsaW5kZXJzLCBoZWFkcyArIHNlY3RvcnMKKyAgIHNjc2lfcmVnaXN0ZXIgLSBjcmVhdGUgYW5kIHJlZ2lzdGVyIGEgc2NzaSBob3N0IGFkYXB0ZXIgaW5zdGFuY2UuCisgICBzY3NpX3JlbW92ZV9kZXZpY2UgLSBkZXRhY2ggYW5kIHJlbW92ZSBhIFNDU0kgZGV2aWNlCisgICBzY3NpX3JlbW92ZV9ob3N0IC0gZGV0YWNoIGFuZCByZW1vdmUgYWxsIFNDU0kgZGV2aWNlcyBvd25lZCBieSBob3N0CisgICBzY3NpX3JlcG9ydF9idXNfcmVzZXQgLSByZXBvcnQgc2NzaSBfYnVzXyByZXNldCBvYnNlcnZlZAorICAgc2NzaV9zZXRfZGV2aWNlIC0gcGxhY2UgZGV2aWNlIHJlZmVyZW5jZSBpbiBob3N0IHN0cnVjdHVyZQorICAgc2NzaV90b19wY2lfZG1hX2RpciAtIGNvbnZlcnQgU0NTSSBzdWJzeXN0ZW0gZGlyZWN0aW9uIGZsYWcgdG8gUENJCisgICBzY3NpX3RvX3NidXNfZG1hX2RpciAtIGNvbnZlcnQgU0NTSSBzdWJzeXN0ZW0gZGlyZWN0aW9uIGZsYWcgdG8gU0JVUworICAgc2NzaV90cmFja19xdWV1ZV9mdWxsIC0gdHJhY2sgc3VjY2Vzc2l2ZSBRVUVVRV9GVUxMIGV2ZW50cyAKKyAgIHNjc2lfdW5ibG9ja19yZXF1ZXN0cyAtIGFsbG93IGZ1cnRoZXIgY29tbWFuZHMgdG8gYmUgcXVldWVkIHRvIGdpdmVuIGhvc3QKKyAgIHNjc2lfdW5yZWdpc3RlciAtIFtjYWxscyBzY3NpX2hvc3RfcHV0KCldCisKKworRGV0YWlsczoKKworLyoqCisgKiBzY3NpX2FjdGl2YXRlX3RjcSAtIHR1cm4gb24gdGFnIGNvbW1hbmQgcXVldWVpbmcgKCJvcmRlcmVkIiB0YXNrIGF0dHJpYnV0ZSkKKyAqIEBzZGV2OiAgICAgICBkZXZpY2UgdG8gdHVybiBvbiBUQ1EgZm9yCisgKiBAZGVwdGg6ICAgICAgcXVldWUgZGVwdGgKKyAqCisgKiAgICAgIFJldHVybnMgbm90aGluZworICoKKyAqICAgICAgTWlnaHQgYmxvY2s6IG5vCisgKgorICogICAgICBOb3RlczogRXZlbnR1YWxseSwgaXQgaXMgaG9wZWQgZGVwdGggd291bGQgYmUgdGhlIG1heGltdW0gZGVwdGgKKyAqICAgICAgdGhlIGRldmljZSBjb3VsZCBjb3BlIHdpdGggYW5kIHRoZSByZWFsIHF1ZXVlIGRlcHRoCisgKiAgICAgIHdvdWxkIGJlIGFkanVzdGFibGUgZnJvbSAwIHRvIGRlcHRoLgorICoKKyAqICAgICAgRGVmaW5lZCAoaW5saW5lKSBpbjogaW5jbHVkZS9zY3NpL3Njc2lfdGNxLmgKKyAqKi8KK3ZvaWQgc2NzaV9hY3RpdmF0ZV90Y3Eoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgZGVwdGgpCisKKworLyoqCisgKiBzY3NpX2FkZF9kZXZpY2UgLSBjcmVhdGVzIG5ldyBzY3NpIGRldmljZSAobHUpIGluc3RhbmNlCisgKiBAc2hvc3Q6ICAgcG9pbnRlciB0byBzY3NpIGhvc3QgaW5zdGFuY2UKKyAqIEBjaGFubmVsOiBjaGFubmVsIG51bWJlciAocmFyZWx5IG90aGVyIHRoYW4gMCkKKyAqIEBpZDogICAgICB0YXJnZXQgaWQgbnVtYmVyCisgKiBAbHVuOiAgICAgbG9naWNhbCB1bml0IG51bWJlcgorICoKKyAqICAgICAgUmV0dXJucyBwb2ludGVyIHRvIG5ldyBzdHJ1Y3Qgc2NzaV9kZXZpY2UgaW5zdGFuY2Ugb3IgCisgKiAgICAgIEVSUl9QVFIoLUVOT0RFVikgKG9yIHNvbWUgb3RoZXIgYmVudCBwb2ludGVyKSBpZiBzb21ldGhpbmcgaXMKKyAqICAgICAgd3JvbmcgKGUuZy4gbm8gbHUgcmVzcG9uZHMgYXQgZ2l2ZW4gYWRkcmVzcykKKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiB5ZXMKKyAqCisgKiAgICAgIE5vdGVzOiBUaGlzIGNhbGwgaXMgdXN1YWxseSBwZXJmb3JtZWQgaW50ZXJuYWxseSBkdXJpbmcgYSBzY3NpCisgKiAgICAgIGJ1cyBzY2FuIHdoZW4gYW4gSEJBIGlzIGFkZGVkIChpLmUuIHNjc2lfYWRkX2hvc3QoKSkuIFNvIGl0CisgKiAgICAgIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBpZiB0aGUgSEJBIGJlY29tZXMgYXdhcmUgb2YgYSBuZXcgc2NzaQorICogICAgICBkZXZpY2UgKGx1KSBhZnRlciBzY3NpX2FkZF9ob3N0KCkgaGFzIGNvbXBsZXRlZC4gSWYgc3VjY2Vzc2Z1bAorICogICAgICB0aGlzIGNhbGwgd2UgbGVhZCB0byBzbGF2ZV9hbGxvYygpIGFuZCBzbGF2ZV9jb25maWd1cmUoKSBjYWxsYmFja3MKKyAqICAgICAgaW50byB0aGUgTExELgorICoKKyAqICAgICAgRGVmaW5lZCBpbjogZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCisgKiovCitzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiBzY3NpX2FkZF9kZXZpY2Uoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpZCwgdW5zaWduZWQgaW50IGx1bikKKworCisvKioKKyAqIHNjc2lfYWRkX2hvc3QgLSBwZXJmb3JtIHN5c2ZzIHJlZ2lzdHJhdGlvbiBhbmQgU0NTSSBidXMgc2Nhbi4KKyAqIEBzaG9zdDogICBwb2ludGVyIHRvIHNjc2kgaG9zdCBpbnN0YW5jZQorICogQGRldjogICAgIHBvaW50ZXIgdG8gc3RydWN0IGRldmljZSBvZiB0eXBlIHNjc2kgY2xhc3MKKyAqCisgKiAgICAgIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvZiBmYWlsdXJlIChlLmcuIC1FTk9NRU0pCisgKgorICogICAgICBNaWdodCBibG9jazogbm8KKyAqCisgKiAgICAgIE5vdGVzOiBPbmx5IHJlcXVpcmVkIGluICJob3RwbHVnIGluaXRpYWxpemF0aW9uIG1vZGVsIiBhZnRlciBhCisgKiAgICAgIHN1Y2Nlc3NmdWwgY2FsbCB0byBzY3NpX2hvc3RfYWxsb2MoKS4KKyAqCisgKiAgICAgIERlZmluZWQgaW46IGRyaXZlcnMvc2NzaS9ob3N0cy5jCisgKiovCitpbnQgc2NzaV9hZGRfaG9zdChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwgc3RydWN0IGRldmljZSAqIGRldikKKworCisvKioKKyAqIHNjc2lfYWRkX3RpbWVyIC0gKHJlLSlzdGFydCB0aW1lciBvbiBhIFNDU0kgY29tbWFuZC4KKyAqIEBzY21kOiAgICBwb2ludGVyIHRvIHNjc2kgY29tbWFuZCBpbnN0YW5jZQorICogQHRpbWVvdXQ6IGR1cmF0aW9uIG9mIHRpbWVvdXQgaW4gImppZmZpZXMiCisgKiBAY29tcGxldGU6IHBvaW50ZXIgdG8gZnVuY3Rpb24gdG8gY2FsbCBpZiB0aW1lb3V0IGV4cGlyZXMKKyAqCisgKiAgICAgIFJldHVybnMgbm90aGluZworICoKKyAqICAgICAgTWlnaHQgYmxvY2s6IG5vCisgKgorICogICAgICBOb3RlczogRWFjaCBzY3NpIGNvbW1hbmQgaGFzIGl0cyBvd24gdGltZXIsIGFuZCBhcyBpdCBpcyBhZGRlZAorICogICAgICB0byB0aGUgcXVldWUsIHdlIHNldCB1cCB0aGUgdGltZXIuIFdoZW4gdGhlIGNvbW1hbmQgY29tcGxldGVzLCAKKyAqICAgICAgd2UgY2FuY2VsIHRoZSB0aW1lci4gQW4gTExEIGNhbiB1c2UgdGhpcyBmdW5jdGlvbiB0byBjaGFuZ2UKKyAqICAgICAgdGhlIGV4aXN0aW5nIHRpbWVvdXQgdmFsdWUuCisgKgorICogICAgICBEZWZpbmVkIGluOiBkcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCisgKiovCit2b2lkIHNjc2lfYWRkX3RpbWVyKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQsIGludCB0aW1lb3V0LCAKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAoKmNvbXBsZXRlKShzdHJ1Y3Qgc2NzaV9jbW5kICopKQorCisKKy8qKgorICogc2NzaV9hZGp1c3RfcXVldWVfZGVwdGggLSBhbGxvdyBMTEQgdG8gY2hhbmdlIHF1ZXVlIGRlcHRoIG9uIGEgU0NTSSBkZXZpY2UKKyAqIEBzZGV2OiAgICAgICBwb2ludGVyIHRvIFNDU0kgZGV2aWNlIHRvIGNoYW5nZSBxdWV1ZSBkZXB0aCBvbgorICogQHRhZ2dlZDogICAgIDAgLSBubyB0YWdnZWQgcXVldWluZworICogICAgICAgICAgICAgIE1TR19TSU1QTEVfVEFHIC0gc2ltcGxlIHRhZ2dlZCBxdWV1aW5nCisgKiAgICAgICAgICAgICAgTVNHX09SREVSRURfVEFHIC0gb3JkZXJlZCB0YWdnZWQgcXVldWluZworICogQHRhZ3MgICAgICAgIE51bWJlciBvZiB0YWdzIGFsbG93ZWQgaWYgdGFnZ2VkIHF1ZXVpbmcgZW5hYmxlZCwKKyAqICAgICAgICAgICAgICBvciBudW1iZXIgb2YgY29tbWFuZHMgdGhlIExMRCBjYW4gcXVldWUgdXAKKyAqICAgICAgICAgICAgICBpbiBub24tdGFnZ2VkIG1vZGUgKGFzIHBlciBjbWRfcGVyX2x1bikuCisgKgorICogICAgICBSZXR1cm5zIG5vdGhpbmcKKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiBubworICoKKyAqICAgICAgTm90ZXM6IENhbiBiZSBpbnZva2VkIGFueSB0aW1lIG9uIGEgU0NTSSBkZXZpY2UgY29udHJvbGxlZCBieSB0aGlzCisgKiAgICAgIExMRC4gW1NwZWNpZmljYWxseSBkdXJpbmcgYW5kIGFmdGVyIHNsYXZlX2NvbmZpZ3VyZSgpIGFuZCBwcmlvciB0bworICogICAgICBzbGF2ZV9kZXN0cm95KCkuXSBDYW4gc2FmZWx5IGJlIGludm9rZWQgZnJvbSBpbnRlcnJ1cHQgY29kZS4gQWN0dWFsCisgKiAgICAgIHF1ZXVlIGRlcHRoIGNoYW5nZSBtYXkgYmUgZGVsYXllZCB1bnRpbCB0aGUgbmV4dCBjb21tYW5kIGlzIGJlaW5nCisgKiAgICAgIHByb2Nlc3NlZC4gU2VlIGFsc28gc2NzaV9hY3RpdmF0ZV90Y3EoKSBhbmQgc2NzaV9kZWFjdGl2YXRlX3RjcSgpLgorICoKKyAqICAgICAgRGVmaW5lZCBpbjogZHJpdmVycy9zY3NpL3Njc2kuYyBbc2VlIHNvdXJjZSBjb2RlIGZvciBtb3JlIG5vdGVzXQorICoKKyAqKi8KK3ZvaWQgc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoc3RydWN0IHNjc2lfZGV2aWNlICogc2RldiwgaW50IHRhZ2dlZCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0YWdzKQorCisKKy8qKgorICogc2NzaV9hc3NpZ25fbG9jayAtIHJlcGxhY2UgZGVmYXVsdCBob3N0X2xvY2sgd2l0aCBnaXZlbiBsb2NrCisgKiBAc2hvc3Q6IGEgcG9pbnRlciB0byBhIHNjc2kgaG9zdCBpbnN0YW5jZQorICogQGxvY2s6IHBvaW50ZXIgdG8gbG9jayB0byByZXBsYWNlIGhvc3RfbG9jayBmb3IgdGhpcyBob3N0CisgKgorICogICAgICBSZXR1cm5zIG5vdGhpbmcKKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiBubworICoKKyAqICAgICAgRGVmaW5lZCBpbjogaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oIC4KKyAqKi8KK3ZvaWQgc2NzaV9hc3NpZ25fbG9jayhzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwgc3BpbmxvY2tfdCAqbG9jaykKKworCisvKioKKyAqIHNjc2lfYmlvc19wdGFibGUgLSByZXR1cm4gY29weSBvZiBibG9jayBkZXZpY2UncyBwYXJ0aXRpb24gdGFibGUKKyAqIEBkZXY6ICAgICAgICBwb2ludGVyIHRvIGJsb2NrIGRldmljZQorICoKKyAqICAgICAgUmV0dXJucyBwb2ludGVyIHRvIHBhcnRpdGlvbiB0YWJsZSwgb3IgTlVMTCBmb3IgZmFpbHVyZQorICoKKyAqICAgICAgTWlnaHQgYmxvY2s6IHllcworICoKKyAqICAgICAgTm90ZXM6IENhbGxlciBvd25zIG1lbW9yeSByZXR1cm5lZCAoZnJlZSB3aXRoIGtmcmVlKCkgKQorICoKKyAqICAgICAgRGVmaW5lZCBpbjogZHJpdmVycy9zY3NpL3Njc2ljYW0uYworICoqLwordW5zaWduZWQgY2hhciAqc2NzaV9iaW9zX3B0YWJsZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpkZXYpCisKKworLyoqCisgKiBzY3NpX2Jsb2NrX3JlcXVlc3RzIC0gcHJldmVudCBmdXJ0aGVyIGNvbW1hbmRzIGJlaW5nIHF1ZXVlZCB0byBnaXZlbiBob3N0CisgKgorICogQHNob3N0OiBwb2ludGVyIHRvIGhvc3QgdG8gYmxvY2sgY29tbWFuZHMgb24KKyAqCisgKiAgICAgIFJldHVybnMgbm90aGluZworICoKKyAqICAgICAgTWlnaHQgYmxvY2s6IG5vCisgKgorICogICAgICBOb3RlczogVGhlcmUgaXMgbm8gdGltZXIgbm9yIGFueSBvdGhlciBtZWFucyBieSB3aGljaCB0aGUgcmVxdWVzdHMKKyAqICAgICAgZ2V0IHVuYmxvY2tlZCBvdGhlciB0aGFuIHRoZSBMTEQgY2FsbGluZyBzY3NpX3VuYmxvY2tfcmVxdWVzdHMoKS4KKyAqCisgKiAgICAgIERlZmluZWQgaW46IGRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCisqKi8KK3ZvaWQgc2NzaV9ibG9ja19yZXF1ZXN0cyhzdHJ1Y3QgU2NzaV9Ib3N0ICogc2hvc3QpCisKKworLyoqCisgKiBzY3NpX2RlYWN0aXZhdGVfdGNxIC0gdHVybiBvZmYgdGFnIGNvbW1hbmQgcXVldWVpbmcKKyAqIEBzZGV2OiAgICAgICBkZXZpY2UgdG8gdHVybiBvZmYgVENRIGZvcgorICogQGRlcHRoOiAgICAgIHF1ZXVlIGRlcHRoIChzdG9yZWQgaW4gc2RldikKKyAqCisgKiAgICAgIFJldHVybnMgbm90aGluZworICoKKyAqICAgICAgTWlnaHQgYmxvY2s6IG5vCisgKgorICogICAgICBEZWZpbmVkIChpbmxpbmUpIGluOiBpbmNsdWRlL3Njc2kvc2NzaV90Y3EuaAorICoqLwordm9pZCBzY3NpX2RlYWN0aXZhdGVfdGNxKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IGRlcHRoKQorCisKKy8qKgorICogc2NzaV9kZWxldGVfdGltZXIgLSBjYW5jZWwgdGltZXIgb24gYSBTQ1NJIGNvbW1hbmQuCisgKiBAc2NtZDogICAgcG9pbnRlciB0byBzY3NpIGNvbW1hbmQgaW5zdGFuY2UKKyAqCisgKiAgICAgIFJldHVybnMgMSBpZiBhYmxlIHRvIGNhbmNlbCB0aW1lciBlbHNlIDAgKGkuZS4gdG9vIGxhdGUgb3IgYWxyZWFkeQorICogICAgICBjYW5jZWxsZWQpLgorICoKKyAqICAgICAgTWlnaHQgYmxvY2s6IG5vIFttYXkgaW4gdGhlIGZ1dHVyZSBpZiBpdCBpbnZva2VzIGRlbF90aW1lcl9zeW5jKCldCisgKgorICogICAgICBOb3RlczogQWxsIGNvbW1hbmRzIGlzc3VlZCBieSB1cHBlciBsZXZlbHMgYWxyZWFkeSBoYXZlIGEgdGltZW91dAorICogICAgICBhc3NvY2lhdGVkIHdpdGggdGhlbS4gQW4gTExEIGNhbiB1c2UgdGhpcyBmdW5jdGlvbiB0byBjYW5jZWwgdGhlCisgKiAgICAgIHRpbWVyLgorICoKKyAqICAgICAgRGVmaW5lZCBpbjogZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYworICoqLworaW50IHNjc2lfZGVsZXRlX3RpbWVyKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpCisKKworLyoqCisgKiBzY3NpX2hvc3RfYWxsb2MgLSBjcmVhdGUgYSBzY3NpIGhvc3QgYWRhcHRlciBpbnN0YW5jZSBhbmQgcGVyZm9ybSBiYXNpYworICogICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6YXRpb24uCisgKiBAc2h0OiAgICAgICAgcG9pbnRlciB0byBzY3NpIGhvc3QgdGVtcGxhdGUKKyAqIEBwcml2c2l6ZTogICBleHRyYSBieXRlcyB0byBhbGxvY2F0ZSBpbiBob3N0ZGF0YSBhcnJheSAod2hpY2ggaXMgdGhlCisgKiAgICAgICAgICAgICAgbGFzdCBtZW1iZXIgb2YgdGhlIHJldHVybmVkIFNjc2lfSG9zdCBpbnN0YW5jZSkKKyAqCisgKiAgICAgIFJldHVybnMgcG9pbnRlciB0byBuZXcgU2NzaV9Ib3N0IGluc3RhbmNlIG9yIE5VTEwgb24gZmFpbHVyZQorICoKKyAqICAgICAgTWlnaHQgYmxvY2s6IHllcworICoKKyAqICAgICAgTm90ZXM6IFdoZW4gdGhpcyBjYWxsIHJldHVybnMgdG8gdGhlIExMRCwgdGhlIFNDU0kgYnVzIHNjYW4gb24KKyAqICAgICAgdGhpcyBob3N0IGhhcyBfbm90XyB5ZXQgYmVlbiBkb25lLgorICogICAgICBUaGUgaG9zdGRhdGEgYXJyYXkgKGJ5IGRlZmF1bHQgemVybyBsZW5ndGgpIGlzIGEgcGVyIGhvc3Qgc2NyYXRjaCAKKyAqICAgICAgYXJlYSBmb3IgdGhlIExMRCdzIGV4Y2x1c2l2ZSB1c2UuCisgKiAgICAgIEJvdGggYXNzb2NpYXRlZCByZWZjb3VudGluZyBvYmplY3RzIGhhdmUgdGhlaXIgcmVmY291bnQgc2V0IHRvIDEuCisgKiAgICAgIEZ1bGwgcmVnaXN0cmF0aW9uIChpbiBzeXNmcykgYW5kIGEgYnVzIHNjYW4gYXJlIHBlcmZvcm1lZCBsYXRlciB3aGVuCisgKiAgICAgIHNjc2lfYWRkX2hvc3QoKSBpcyBjYWxsZWQuCisgKgorICogICAgICBEZWZpbmVkIGluOiBkcml2ZXJzL3Njc2kvaG9zdHMuYyAuCisgKiovCitzdHJ1Y3QgU2NzaV9Ib3N0ICogc2NzaV9ob3N0X2FsbG9jKHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKiBzaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwcml2c2l6ZSkKKworCisvKioKKyAqIHNjc2lfaG9zdF9nZXQgLSBpbmNyZW1lbnQgU2NzaV9Ib3N0IGluc3RhbmNlIHJlZmNvdW50CisgKiBAc2hvc3Q6ICAgcG9pbnRlciB0byBzdHJ1Y3QgU2NzaV9Ib3N0IGluc3RhbmNlCisgKgorICogICAgICBSZXR1cm5zIG5vdGhpbmcKKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiBjdXJyZW50bHkgbWF5IGJsb2NrIGJ1dCBtYXkgYmUgY2hhbmdlZCB0byBub3QgYmxvY2sKKyAqCisgKiAgICAgIE5vdGVzOiBBY3R1YWxseSBpbmNyZW1lbnRzIHRoZSBjb3VudHMgaW4gdHdvIHN1Yi1vYmplY3RzCisgKgorICogICAgICBEZWZpbmVkIGluOiBkcml2ZXJzL3Njc2kvaG9zdHMuYworICoqLwordm9pZCBzY3NpX2hvc3RfZ2V0KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQorCisKKy8qKgorICogc2NzaV9ob3N0X3B1dCAtIGRlY3JlbWVudCBTY3NpX0hvc3QgaW5zdGFuY2UgcmVmY291bnQsIGZyZWUgaWYgMAorICogQHNob3N0OiAgIHBvaW50ZXIgdG8gc3RydWN0IFNjc2lfSG9zdCBpbnN0YW5jZQorICoKKyAqICAgICAgUmV0dXJucyBub3RoaW5nCisgKgorICogICAgICBNaWdodCBibG9jazogY3VycmVudGx5IG1heSBibG9jayBidXQgbWF5IGJlIGNoYW5nZWQgdG8gbm90IGJsb2NrCisgKgorICogICAgICBOb3RlczogQWN0dWFsbHkgZGVjcmVtZW50cyB0aGUgY291bnRzIGluIHR3byBzdWItb2JqZWN0cy4gSWYgdGhlCisgKiAgICAgIGxhdHRlciByZWZjb3VudCByZWFjaGVzIDAsIHRoZSBTY3NpX0hvc3QgaW5zdGFuY2UgaXMgZnJlZWQuCisgKiAgICAgIFRoZSBMTEQgbmVlZCBub3Qgd29ycnkgZXhhY3RseSB3aGVuIHRoZSBTY3NpX0hvc3QgaW5zdGFuY2UgaXMKKyAqICAgICAgZnJlZWQsIGl0IGp1c3Qgc2hvdWxkbid0IGFjY2VzcyB0aGUgaW5zdGFuY2UgYWZ0ZXIgaXQgaGFzIGJhbGFuY2VkCisgKiAgICAgIG91dCBpdHMgcmVmY291bnQgdXNhZ2UuCisgKgorICogICAgICBEZWZpbmVkIGluOiBkcml2ZXJzL3Njc2kvaG9zdHMuYworICoqLwordm9pZCBzY3NpX2hvc3RfcHV0KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQorCisKKy8qKgorICogc2NzaV9wYXJ0c2l6ZSAtIHBhcnNlIHBhcnRpdGlvbiB0YWJsZSBpbnRvIGN5bGluZGVycywgaGVhZHMgKyBzZWN0b3JzCisgKiBAYnVmOiBwb2ludGVyIHRvIHBhcnRpdGlvbiB0YWJsZQorICogQGNhcGFjaXR5OiBzaXplIG9mICh0b3RhbCkgZGlzayBpbiA1MTIgYnl0ZSBzZWN0b3JzCisgKiBAY3lsczogb3V0cHV0cyBudW1iZXIgb2YgY3lsaW5kZXJzIGNhbGN1bGF0ZWQgdmlhIHRoaXMgcG9pbnRlcgorICogQGhkczogb3V0cHV0cyBudW1iZXIgb2YgaGVhZHMgY2FsY3VsYXRlZCB2aWEgdGhpcyBwb2ludGVyCisgKiBAc2Vjczogb3V0cHV0cyBudW1iZXIgb2Ygc2VjdG9ycyBjYWxjdWxhdGVkIHZpYSB0aGlzIHBvaW50ZXIKKyAqCisgKiAgICAgIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlCisgKgorICogICAgICBNaWdodCBibG9jazogbm8KKyAqCisgKiAgICAgIE5vdGVzOiBDYWxsZXIgb3ducyBtZW1vcnkgcmV0dXJuZWQgKGZyZWUgd2l0aCBrZnJlZSgpICkKKyAqCisgKiAgICAgIERlZmluZWQgaW46IGRyaXZlcnMvc2NzaS9zY3NpY2FtLmMKKyAqKi8KK2ludCBzY3NpX3BhcnRzaXplKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBjYXBhY2l0eSwKKyAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqY3lscywgdW5zaWduZWQgaW50ICpoZHMsIHVuc2lnbmVkIGludCAqc2VjcykKKworCisvKioKKyAqIHNjc2lfcmVnaXN0ZXIgLSBjcmVhdGUgYW5kIHJlZ2lzdGVyIGEgc2NzaSBob3N0IGFkYXB0ZXIgaW5zdGFuY2UuCisgKiBAc2h0OiAgICAgICAgcG9pbnRlciB0byBzY3NpIGhvc3QgdGVtcGxhdGUKKyAqIEBwcml2c2l6ZTogICBleHRyYSBieXRlcyB0byBhbGxvY2F0ZSBpbiBob3N0ZGF0YSBhcnJheSAod2hpY2ggaXMgdGhlCisgKiAgICAgICAgICAgICAgbGFzdCBtZW1iZXIgb2YgdGhlIHJldHVybmVkIFNjc2lfSG9zdCBpbnN0YW5jZSkKKyAqCisgKiAgICAgIFJldHVybnMgcG9pbnRlciB0byBuZXcgU2NzaV9Ib3N0IGluc3RhbmNlIG9yIE5VTEwgb24gZmFpbHVyZQorICoKKyAqICAgICAgTWlnaHQgYmxvY2s6IHllcworICoKKyAqICAgICAgTm90ZXM6IFdoZW4gdGhpcyBjYWxsIHJldHVybnMgdG8gdGhlIExMRCwgdGhlIFNDU0kgYnVzIHNjYW4gb24KKyAqICAgICAgdGhpcyBob3N0IGhhcyBfbm90XyB5ZXQgYmVlbiBkb25lLgorICogICAgICBUaGUgaG9zdGRhdGEgYXJyYXkgKGJ5IGRlZmF1bHQgemVybyBsZW5ndGgpIGlzIGEgcGVyIGhvc3Qgc2NyYXRjaCAKKyAqICAgICAgYXJlYSBmb3IgdGhlIExMRC4KKyAqCisgKiAgICAgIERlZmluZWQgaW46IGRyaXZlcnMvc2NzaS9ob3N0cy5jIC4KKyAqKi8KK3N0cnVjdCBTY3NpX0hvc3QgKiBzY3NpX3JlZ2lzdGVyKHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKiBzaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJpdnNpemUpCisKKworLyoqCisgKiBzY3NpX3JlbW92ZV9kZXZpY2UgLSBkZXRhY2ggYW5kIHJlbW92ZSBhIFNDU0kgZGV2aWNlCisgKiBAc2RldjogICAgICBhIHBvaW50ZXIgdG8gYSBzY3NpIGRldmljZSBpbnN0YW5jZQorICoKKyAqICAgICAgUmV0dXJucyB2YWx1ZTogMCBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmIGRldmljZSBub3QgYXR0YWNoZWQKKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiB5ZXMKKyAqCisgKiAgICAgIE5vdGVzOiBJZiBhbiBMTEQgYmVjb21lcyBhd2FyZSB0aGF0IGEgc2NzaSBkZXZpY2UgKGx1KSBoYXMKKyAqICAgICAgYmVlbiByZW1vdmVkIGJ1dCBpdHMgaG9zdCBpcyBzdGlsbCBwcmVzZW50IHRoZW4gaXQgY2FuIHJlcXVlc3QKKyAqICAgICAgdGhlIHJlbW92YWwgb2YgdGhhdCBzY3NpIGRldmljZS4gSWYgc3VjY2Vzc2Z1bCB0aGlzIGNhbGwgd2lsbAorICogICAgICBsZWFkIHRvIHRoZSBzbGF2ZV9kZXN0cm95KCkgY2FsbGJhY2sgYmVpbmcgaW52b2tlZC4gc2RldiBpcyBhbiAKKyAqICAgICAgaW52YWxpZCBwb2ludGVyIGFmdGVyIHRoaXMgY2FsbC4KKyAqCisgKiAgICAgIERlZmluZWQgaW46IGRyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMgLgorICoqLworaW50IHNjc2lfcmVtb3ZlX2RldmljZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCisKKworLyoqCisgKiBzY3NpX3JlbW92ZV9ob3N0IC0gZGV0YWNoIGFuZCByZW1vdmUgYWxsIFNDU0kgZGV2aWNlcyBvd25lZCBieSBob3N0CisgKiBAc2hvc3Q6ICAgICAgYSBwb2ludGVyIHRvIGEgc2NzaSBob3N0IGluc3RhbmNlCisgKgorICogICAgICBSZXR1cm5zIHZhbHVlOiAwIG9uIHN1Y2Nlc3MsIDEgb24gZmFpbHVyZSAoZS5nLiBMTEQgYnVzeSA/PykKKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiB5ZXMKKyAqCisgKiAgICAgIE5vdGVzOiBTaG91bGQgb25seSBiZSBpbnZva2VkIGlmIHRoZSAiaG90cGx1ZyBpbml0aWFsaXphdGlvbgorICogICAgICBtb2RlbCIgaXMgYmVpbmcgdXNlZC4gSXQgc2hvdWxkIGJlIGNhbGxlZCBfcHJpb3JfIHRvICAKKyAqICAgICAgc2NzaV91bnJlZ2lzdGVyKCkuCisgKgorICogICAgICBEZWZpbmVkIGluOiBkcml2ZXJzL3Njc2kvaG9zdHMuYyAuCisgKiovCitpbnQgc2NzaV9yZW1vdmVfaG9zdChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKKworCisvKioKKyAqIHNjc2lfcmVwb3J0X2J1c19yZXNldCAtIHJlcG9ydCBzY3NpIF9idXNfIHJlc2V0IG9ic2VydmVkCisgKiBAc2hvc3Q6IGEgcG9pbnRlciB0byBhIHNjc2kgaG9zdCBpbnZvbHZlZAorICogQGNoYW5uZWw6IGNoYW5uZWwgKHdpdGhpbikgaG9zdCBvbiB3aGljaCBzY3NpIGJ1cyByZXNldCBvY2N1cnJlZAorICoKKyAqICAgICAgUmV0dXJucyBub3RoaW5nCisgKgorICogICAgICBNaWdodCBibG9jazogbm8KKyAqCisgKiAgICAgIE5vdGVzOiBUaGlzIG9ubHkgbmVlZHMgdG8gYmUgY2FsbGVkIGlmIHRoZSByZXNldCBpcyBvbmUgd2hpY2gKKyAqICAgICAgb3JpZ2luYXRlcyBmcm9tIGFuIHVua25vd24gbG9jYXRpb24uICBSZXNldHMgb3JpZ2luYXRlZCBieSB0aGUgCisgKiAgICAgIG1pZCBsZXZlbCBpdHNlbGYgZG9uJ3QgbmVlZCB0byBjYWxsIHRoaXMsIGJ1dCB0aGVyZSBzaG91bGQgYmUgCisgKiAgICAgIG5vIGhhcm0uICBUaGUgbWFpbiBwdXJwb3NlIG9mIHRoaXMgaXMgdG8gbWFrZSBzdXJlIHRoYXQgYQorICogICAgICBDSEVDS19DT05ESVRJT04gaXMgcHJvcGVybHkgdHJlYXRlZC4KKyAqCisgKiAgICAgIERlZmluZWQgaW46IGRyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMgLgorICoqLwordm9pZCBzY3NpX3JlcG9ydF9idXNfcmVzZXQoc3RydWN0IFNjc2lfSG9zdCAqIHNob3N0LCBpbnQgY2hhbm5lbCkKKworCisvKioKKyAqIHNjc2lfc2V0X2RldmljZSAtIHBsYWNlIGRldmljZSByZWZlcmVuY2UgaW4gaG9zdCBzdHJ1Y3R1cmUKKyAqIEBzaG9zdDogYSBwb2ludGVyIHRvIGEgc2NzaSBob3N0IGluc3RhbmNlCisgKiBAcGRldjogcG9pbnRlciB0byBkZXZpY2UgaW5zdGFuY2UgdG8gYXNzaWduCisgKgorICogICAgICBSZXR1cm5zIG5vdGhpbmcKKyAqCisgKiAgICAgIE1pZ2h0IGJsb2NrOiBubworICoKKyAqICAgICAgRGVmaW5lZCBpbjogaW5jbHVkZS9zY3NpL3Njc2lfaG9zdC5oIC4KKyAqKi8KK3ZvaWQgc2NzaV9zZXRfZGV2aWNlKHN0cnVjdCBTY3NpX0hvc3QgKiBzaG9zdCwgc3RydWN0IGRldmljZSAqIGRldikKKworCisvKioKKyAqIHNjc2lfdG9fcGNpX2RtYV9kaXIgLSBjb252ZXJ0IFNDU0kgc3Vic3lzdGVtIGRpcmVjdGlvbiBmbGFnIHRvIFBDSQorICogQHNjc2lfZGF0YV9kaXJlY3Rpb246IFNDU0kgc3Vic3lzdGVtIGRpcmVjdGlvbiBmbGFnCisgKgorICogICAgICBSZXR1cm5zIERNQV9UT19ERVZJQ0UgZ2l2ZW4gU0NTSV9EQVRBX1dSSVRFLAorICogICAgICAgICAgICAgIERNQV9GUk9NX0RFVklDRSBnaXZlbiBTQ1NJX0RBVEFfUkVBRAorICogICAgICAgICAgICAgIERNQV9CSURJUkVDVElPTkFMIGdpdmVuIFNDU0lfREFUQV9VTktOT1dOCisgKiAgICAgICAgICAgICAgZWxzZSByZXR1cm5zIERNQV9OT05FCisgKgorICogICAgICBNaWdodCBibG9jazogbm8KKyAqCisgKiAgICAgIE5vdGVzOiBUaGUgU0NTSSBzdWJzeXN0ZW0gbm93IHVzZXMgdGhlIHNhbWUgdmFsdWVzIGZvciB0aGVzZQorICogICAgICBjb25zdGFudHMgYXMgdGhlIFBDSSBzdWJzeXN0ZW0gc28gdGhpcyBmdW5jdGlvbiBpcyBhIG5vcC4KKyAqICAgICAgVGhlIHJlY29tbWVuZGF0aW9uIGlzIG5vdCB0byB1c2UgdGhpcyBjb252ZXJzaW9uIGZ1bmN0aW9uIGFueW1vcmUKKyAqICAgICAgKGluIHRoZSAyLjYga2VybmVsIHNlcmllcykgYXMgaXQgaXMgbm90IG5lZWRlZC4KKyAqCisgKiAgICAgIERlZmluZWQgaW46IGRyaXZlcnMvc2NzaS9zY3NpLmggLgorICoqLworaW50IHNjc2lfdG9fcGNpX2RtYV9kaXIodW5zaWduZWQgY2hhciBzY3NpX2RhdGFfZGlyZWN0aW9uKQorCisKKy8qKgorICogc2NzaV90b19zYnVzX2RtYV9kaXIgLSBjb252ZXJ0IFNDU0kgc3Vic3lzdGVtIGRpcmVjdGlvbiBmbGFnIHRvIFNCVVMKKyAqIEBzY3NpX2RhdGFfZGlyZWN0aW9uOiBTQ1NJIHN1YnN5c3RlbSBkaXJlY3Rpb24gZmxhZworICoKKyAqICAgICAgUmV0dXJucyBETUFfVE9fREVWSUNFIGdpdmVuIFNDU0lfREFUQV9XUklURSwKKyAqICAgICAgICAgICAgICBGUk9NX0RFVklDRSBnaXZlbiBTQ1NJX0RBVEFfUkVBRAorICogICAgICAgICAgICAgIERNQV9CSURJUkVDVElPTkFMIGdpdmVuIFNDU0lfREFUQV9VTktOT1dOCisgKiAgICAgICAgICAgICAgZWxzZSByZXR1cm5zIERNQV9OT05FCisgKgorICogICAgICBOb3RlczogVGhlIFNDU0kgc3Vic3lzdGVtIG5vdyB1c2VzIHRoZSBzYW1lIHZhbHVlcyBmb3IgdGhlc2UKKyAqICAgICAgY29uc3RhbnRzIGFzIHRoZSBTQlVTIHN1YnN5c3RlbSBzbyB0aGlzIGZ1bmN0aW9uIGlzIGEgbm9wLgorICogICAgICBUaGUgcmVjb21tZW5kYXRpb24gaXMgbm90IHRvIHVzZSB0aGlzIGNvbnZlcnNpb24gZnVuY3Rpb24gYW55bW9yZQorICogICAgICAoaW4gdGhlIDIuNiBrZXJuZWwgc2VyaWVzKSBhcyBpdCBpcyBub3QgbmVlZGVkLgorICoKKyAqICAgICAgTWlnaHQgYmxvY2s6IG5vCisgKgorICogICAgICBEZWZpbmVkIGluOiBkcml2ZXJzL3Njc2kvc2NzaS5oIC4KKyAqKi8KK2ludCBzY3NpX3RvX3NidXNfZG1hX2Rpcih1bnNpZ25lZCBjaGFyIHNjc2lfZGF0YV9kaXJlY3Rpb24pCisKKworLyoqCisgKiBzY3NpX3RyYWNrX3F1ZXVlX2Z1bGwgLSB0cmFjayBzdWNjZXNzaXZlIFFVRVVFX0ZVTEwgZXZlbnRzIG9uIGdpdmVuCisgKiAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UgdG8gZGV0ZXJtaW5lIGlmIGFuZCB3aGVuIHRoZXJlIGlzIGEgbmVlZAorICogICAgICAgICAgICAgICAgICAgICAgdG8gYWRqdXN0IHRoZSBxdWV1ZSBkZXB0aCBvbiB0aGUgZGV2aWNlLgorICogQHNkZXY6ICBwb2ludGVyIHRvIFNDU0kgZGV2aWNlIGluc3RhbmNlCisgKiBAZGVwdGg6IEN1cnJlbnQgbnVtYmVyIG9mIG91dHN0YW5kaW5nIFNDU0kgY29tbWFuZHMgb24gdGhpcyBkZXZpY2UsCisgKiAgICAgICAgIG5vdCBjb3VudGluZyB0aGUgb25lIHJldHVybmVkIGFzIFFVRVVFX0ZVTEwuCisgKgorICogICAgICBSZXR1cm5zIDAgIC0gbm8gY2hhbmdlIG5lZWRlZAorICogICAgICAgICAgICAgID4wIC0gYWRqdXN0IHF1ZXVlIGRlcHRoIHRvIHRoaXMgbmV3IGRlcHRoCisgKiAgICAgICAgICAgICAgLTEgLSBkcm9wIGJhY2sgdG8gdW50YWdnZWQgb3BlcmF0aW9uIHVzaW5nIGhvc3QtPmNtZF9wZXJfbHVuCisgKiAgICAgICAgICAgICAgICAgICBhcyB0aGUgdW50YWdnZWQgY29tbWFuZCBkZXB0aAorICoKKyAqICAgICAgTWlnaHQgYmxvY2s6IG5vCisgKgorICogICAgICBOb3RlczogTExEcyBtYXkgY2FsbCB0aGlzIGF0IGFueSB0aW1lIGFuZCB3ZSB3aWxsIGRvICJUaGUgUmlnaHQKKyAqICAgICAgICAgICAgICBUaGluZyI7IGludGVycnVwdCBjb250ZXh0IHNhZmUuIAorICoKKyAqICAgICAgRGVmaW5lZCBpbjogZHJpdmVycy9zY3NpL3Njc2kuYyAuCisgKiovCitpbnQgc2NzaV90cmFja19xdWV1ZV9mdWxsKFNjc2lfRGV2aWNlICpzZGV2LCBpbnQgZGVwdGgpCisKKworLyoqCisgKiBzY3NpX3VuYmxvY2tfcmVxdWVzdHMgLSBhbGxvdyBmdXJ0aGVyIGNvbW1hbmRzIHRvIGJlIHF1ZXVlZCB0byBnaXZlbiBob3N0CisgKgorICogQHNob3N0OiBwb2ludGVyIHRvIGhvc3QgdG8gdW5ibG9jayBjb21tYW5kcyBvbgorICoKKyAqICAgICAgUmV0dXJucyBub3RoaW5nCisgKgorICogICAgICBNaWdodCBibG9jazogbm8KKyAqCisgKiAgICAgIERlZmluZWQgaW46IGRyaXZlcnMvc2NzaS9zY3NpX2xpYi5jIC4KKyoqLwordm9pZCBzY3NpX3VuYmxvY2tfcmVxdWVzdHMoc3RydWN0IFNjc2lfSG9zdCAqIHNob3N0KQorCisKKy8qKgorICogc2NzaV91bnJlZ2lzdGVyIC0gdW5yZWdpc3RlciBhbmQgZnJlZSBtZW1vcnkgdXNlZCBieSBob3N0IGluc3RhbmNlCisgKiBAc2hwOiAgICAgICAgcG9pbnRlciB0byBzY3NpIGhvc3QgaW5zdGFuY2UgdG8gdW5yZWdpc3Rlci4KKyAqCisgKiAgICAgIFJldHVybnMgbm90aGluZworICoKKyAqICAgICAgTWlnaHQgYmxvY2s6IG5vCisgKgorICogICAgICBOb3RlczogU2hvdWxkIG5vdCBiZSBpbnZva2VkIGlmIHRoZSAiaG90cGx1ZyBpbml0aWFsaXphdGlvbgorICogICAgICBtb2RlbCIgaXMgYmVpbmcgdXNlZC4gQ2FsbGVkIGludGVybmFsbHkgYnkgZXhpdF90aGlzX3Njc2lfZHJpdmVyKCkKKyAqICAgICAgaW4gdGhlICJwYXNzaXZlIGluaXRpYWxpemF0aW9uIG1vZGVsIi4gSGVuY2UgYSBMTEQgaGFzIG5vIG5lZWQgdG8KKyAqICAgICAgY2FsbCB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5LgorICoKKyAqICAgICAgRGVmaW5lZCBpbjogZHJpdmVycy9zY3NpL2hvc3RzLmMgLgorICoqLwordm9pZCBzY3NpX3VucmVnaXN0ZXIoc3RydWN0IFNjc2lfSG9zdCAqIHNocCkKKworCisKKworSW50ZXJmYWNlIEZ1bmN0aW9ucworPT09PT09PT09PT09PT09PT09PQorSW50ZXJmYWNlIGZ1bmN0aW9ucyBhcmUgc3VwcGxpZWQgKGRlZmluZWQpIGJ5IExMRHMgYW5kIHRoZWlyIGZ1bmN0aW9uCitwb2ludGVycyBhcmUgcGxhY2VkIGluIGFuIGluc3RhbmNlIG9mIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgd2hpY2gKK2lzIHBhc3NlZCB0byBzY3NpX2hvc3RfYWxsb2MoKSBbb3Igc2NzaV9yZWdpc3RlcigpIC8gaW5pdF90aGlzX3Njc2lfZHJpdmVyKCldLgorU29tZSBhcmUgbWFuZGF0b3J5LiBJbnRlcmZhY2UgZnVuY3Rpb25zIHNob3VsZCBiZSBkZWNsYXJlZCBzdGF0aWMuIFRoZQorYWNjZXB0ZWQgY29udmVudGlvbiBpcyB0aGF0IGRyaXZlciAieHl6IiB3aWxsIGRlY2xhcmUgaXRzIHNsYXZlX2NvbmZpZ3VyZSgpIAorZnVuY3Rpb24gYXM6CisgICAgc3RhdGljIGludCB4eXpfc2xhdmVfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqIHNkZXYpOworYW5kIHNvIGZvcnRoIGZvciBhbGwgaW50ZXJmYWNlIGZ1bmN0aW9ucyBsaXN0ZWQgYmVsb3cuCisKK0EgcG9pbnRlciB0byB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBwbGFjZWQgaW4gdGhlICdzbGF2ZV9jb25maWd1cmUnIG1lbWJlcgorb2YgYSAic3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSIgaW5zdGFuY2UuIEEgcG9pbnRlciB0byBzdWNoIGFuIGluc3RhbmNlCitzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSBtaWQgbGV2ZWwncyBzY3NpX2hvc3RfYWxsb2MoKSBbb3Igc2NzaV9yZWdpc3RlcigpIC8KK2luaXRfdGhpc19zY3NpX2RyaXZlcigpXS4KKworVGhlIGludGVyZmFjZSBmdW5jdGlvbnMgYXJlIGFsc28gZGVzY3JpYmVkIGluIHRoZSBpbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmgKK2ZpbGUgaW1tZWRpYXRlbHkgYWJvdmUgdGhlaXIgZGVmaW5pdGlvbiBwb2ludCBpbiAic3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSIuCitJbiBzb21lIGNhc2VzIG1vcmUgZGV0YWlsIGlzIGdpdmVuIGluIHNjc2lfaG9zdC5oIHRoYW4gYmVsb3cuCisKK1RoZSBpbnRlcmZhY2UgZnVuY3Rpb25zIGFyZSBsaXN0ZWQgYmVsb3cgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLgorCitTdW1tYXJ5OgorICAgYmlvc19wYXJhbSAtIGZldGNoIGhlYWQsIHNlY3RvciwgY3lsaW5kZXIgaW5mbyBmb3IgYSBkaXNrCisgICBkZXRlY3QgLSBkZXRlY3RzIEhCQXMgdGhpcyBkcml2ZXIgd2FudHMgdG8gY29udHJvbAorICAgZWhfdGltZWRfb3V0IC0gbm90aWZ5IHRoZSBob3N0IHRoYXQgYSBjb21tYW5kIHRpbWVyIGV4cGlyZWQKKyAgIGVoX2Fib3J0X2hhbmRsZXIgLSBhYm9ydCBnaXZlbiBjb21tYW5kCisgICBlaF9idXNfcmVzZXRfaGFuZGxlciAtIGlzc3VlIFNDU0kgYnVzIHJlc2V0CisgICBlaF9kZXZpY2VfcmVzZXRfaGFuZGxlciAtIGlzc3VlIFNDU0kgZGV2aWNlIHJlc2V0CisgICBlaF9ob3N0X3Jlc2V0X2hhbmRsZXIgLSByZXNldCBob3N0IChob3N0IGJ1cyBhZGFwdGVyKQorICAgZWhfc3RyYXRlZ3lfaGFuZGxlciAtIGRyaXZlciBzdXBwbGllZCBhbHRlcm5hdGUgdG8gc2NzaV91bmphbV9ob3N0KCkKKyAgIGluZm8gLSBzdXBwbHkgaW5mb3JtYXRpb24gYWJvdXQgZ2l2ZW4gaG9zdAorICAgaW9jdGwgLSBkcml2ZXIgY2FuIHJlc3BvbmQgdG8gaW9jdGxzCisgICBwcm9jX2luZm8gLSBzdXBwb3J0cyAvcHJvYy9zY3NpL3tkcml2ZXJfbmFtZX0ve2hvc3Rfbm99CisgICBxdWV1ZWNvbW1hbmQgLSBxdWV1ZSBzY3NpIGNvbW1hbmQsIGludm9rZSAnZG9uZScgb24gY29tcGxldGlvbgorICAgcmVsZWFzZSAtIHJlbGVhc2UgYWxsIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggZ2l2ZW4gaG9zdAorICAgc2xhdmVfYWxsb2MgLSBwcmlvciB0byBhbnkgY29tbWFuZHMgYmVpbmcgc2VudCB0byBhIG5ldyBkZXZpY2UgCisgICBzbGF2ZV9jb25maWd1cmUgLSBkcml2ZXIgZmluZSB0dW5pbmcgZm9yIGdpdmVuIGRldmljZSBhZnRlciBhdHRhY2gKKyAgIHNsYXZlX2Rlc3Ryb3kgLSBnaXZlbiBkZXZpY2UgaXMgYWJvdXQgdG8gYmUgc2h1dCBkb3duCisKKworRGV0YWlsczoKKworLyoqCisgKiAgICAgIGJpb3NfcGFyYW0gLSBmZXRjaCBoZWFkLCBzZWN0b3IsIGN5bGluZGVyIGluZm8gZm9yIGEgZGlzaworICogICAgICBAc2RldjogcG9pbnRlciB0byBzY3NpIGRldmljZSBjb250ZXh0IChkZWZpbmVkIGluIAorICogICAgICAgICAgICAgaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgpCisgKiAgICAgIEBiZGV2OiBwb2ludGVyIHRvIGJsb2NrIGRldmljZSBjb250ZXh0IChkZWZpbmVkIGluIGZzLmgpCisgKiAgICAgIEBjYXBhY2l0eTogIGRldmljZSBzaXplIChpbiA1MTIgYnl0ZSBzZWN0b3JzKQorICogICAgICBAcGFyYW1zOiB0aHJlZSBlbGVtZW50IGFycmF5IHRvIHBsYWNlIG91dHB1dDoKKyAqICAgICAgICAgICAgICBwYXJhbXNbMF0gbnVtYmVyIG9mIGhlYWRzIChtYXggMjU1KQorICogICAgICAgICAgICAgIHBhcmFtc1sxXSBudW1iZXIgb2Ygc2VjdG9ycyAobWF4IDYzKQorICogICAgICAgICAgICAgIHBhcmFtc1syXSBudW1iZXIgb2YgY3lsaW5kZXJzIAorICoKKyAqICAgICAgUmV0dXJuIHZhbHVlIGlzIGlnbm9yZWQKKyAqCisgKiAgICAgIExvY2tzOiBub25lCisgKgorICogICAgICBDYWxsaW5nIGNvbnRleHQ6IHByb2Nlc3MgKHNkKQorICoKKyAqICAgICAgTm90ZXM6IGFuIGFyYml0cmFyeSBnZW9tZXRyeSAoYmFzZWQgb24gUkVBRCBDQVBBQ0lUWSkgaXMgdXNlZAorICogICAgICBpZiB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBwcm92aWRlZC4gVGhlIHBhcmFtcyBhcnJheSBpcworICogICAgICBwcmUtaW5pdGlhbGl6ZWQgd2l0aCBtYWRlIHVwIHZhbHVlcyBqdXN0IGluIGNhc2UgdGhpcyBmdW5jdGlvbiAKKyAqICAgICAgZG9lc24ndCBvdXRwdXQgYW55dGhpbmcuCisgKgorICogICAgICBPcHRpb25hbGx5IGRlZmluZWQgaW46IExMRAorICoqLworICAgIGludCBiaW9zX3BhcmFtKHN0cnVjdCBzY3NpX2RldmljZSAqIHNkZXYsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCisgICAgICAgICAgICAgICAgICAgc2VjdG9yX3QgY2FwYWNpdHksIGludCBwYXJhbXNbM10pCisKKworLyoqCisgKiAgICAgIGRldGVjdCAtIGRldGVjdHMgSEJBcyB0aGlzIGRyaXZlciB3YW50cyB0byBjb250cm9sCisgKiAgICAgIEBzaHRwOiBob3N0IHRlbXBsYXRlIGZvciB0aGlzIGRyaXZlci4KKyAqCisgKiAgICAgIFJldHVybnMgbnVtYmVyIG9mIGhvc3RzIHRoaXMgZHJpdmVyIHdhbnRzIHRvIGNvbnRyb2wuIDAgbWVhbnMgbm8KKyAqICAgICAgc3VpdGFibGUgaG9zdHMgZm91bmQuCisgKgorICogICAgICBMb2Nrczogbm9uZSBoZWxkCisgKgorICogICAgICBDYWxsaW5nIGNvbnRleHQ6IHByb2Nlc3MgW2ludm9rZWQgZnJvbSBpbml0X3RoaXNfc2NzaV9kcml2ZXIoKV0KKyAqCisgKiAgICAgIE5vdGVzOiBGaXJzdCBmdW5jdGlvbiBjYWxsZWQgZnJvbSB0aGUgU0NTSSBtaWQgbGV2ZWwgb24gdGhpcworICogICAgICBkcml2ZXIuIFVwcGVyIGxldmVsIGRyaXZlcnMgKGUuZy4gc2QpIG1heSBub3QgKHlldCkgYmUgcHJlc2VudC4KKyAqICAgICAgRm9yIGVhY2ggaG9zdCBmb3VuZCwgdGhpcyBtZXRob2Qgc2hvdWxkIGNhbGwgc2NzaV9yZWdpc3RlcigpIAorICogICAgICBbc2VlIGhvc3RzLmNdLgorICoKKyAqICAgICAgRGVmaW5lZCBpbjogTExEIChyZXF1aXJlZCBpZiAicGFzc2l2ZSBpbml0aWFsaXphdGlvbiBtb2RlIiBpcyB1c2VkLAorICogICAgICAgICAgICAgICAgICAgICAgIG5vdCBpbnZva2VkIGluICJob3RwbHVnIGluaXRpYWxpemF0aW9uIG1vZGUiKQorICoqLworICAgIGludCBkZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqIHNodHApCisKKworLyoqCisgKiAgICAgIGVoX3RpbWVkX291dCAtIFRoZSB0aW1lciBmb3IgdGhlIGNvbW1hbmQgaGFzIGp1c3QgZmlyZWQKKyAqICAgICAgQHNjcDogaWRlbnRpZmllcyBjb21tYW5kIHRpbWluZyBvdXQKKyAqCisgKiAgICAgIFJldHVybnM6CisgKgorICogICAgICBFSF9IQU5ETEVEOiAgICAgICAgICAgICBJIGZpeGVkIHRoZSBlcnJvciwgcGxlYXNlIGNvbXBsZXRlIHRoZSBjb21tYW5kCisgKiAgICAgIEVIX1JFU0VUX1RJTUVSOiAgICAgICAgIEkgbmVlZCBtb3JlIHRpbWUsIHJlc2V0IHRoZSB0aW1lciBhbmQKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4gY291bnRpbmcgYWdhaW4KKyAqICAgICAgRUhfTk9UX0hBTkRMRUQgICAgICAgICAgQmVnaW4gbm9ybWFsIGVycm9yIHJlY292ZXJ5CisgKgorICoKKyAqICAgICAgTG9ja3M6IE5vbmUgaGVsZAorICoKKyAqICAgICAgQ2FsbGluZyBjb250ZXh0OiBpbnRlcnJ1cHQKKyAqCisgKiAgICAgIE5vdGVzOiBUaGlzIGlzIHRvIGdpdmUgdGhlIExMRCBhbiBvcHBvcnR1bml0eSB0byBkbyBsb2NhbCByZWNvdmVyeS4KKyAqICAgICAgVGhpcyByZWNvdmVyeSBpcyBsaW1pdGVkIHRvIGRldGVybWluaW5nIGlmIHRoZSBvdXRzdGFuZGluZyBjb21tYW5kCisgKiAgICAgIHdpbGwgZXZlciBjb21wbGV0ZS4gIFlvdSBtYXkgbm90IGFib3J0IGFuZCByZXN0YXJ0IHRoZSBjb21tYW5kIGZyb20KKyAqICAgICAgdGhpcyBjYWxsYmFjay4KKyAqCisgKiAgICAgIE9wdGlvbmFsbHkgZGVmaW5lZCBpbjogTExECisgKiovCisgICAgIGludCBlaF90aW1lZF9vdXQoc3RydWN0IHNjc2lfY21uZCAqIHNjcCkKKworCisvKioKKyAqICAgICAgZWhfYWJvcnRfaGFuZGxlciAtIGFib3J0IGNvbW1hbmQgYXNzb2NpYXRlZCB3aXRoIHNjcAorICogICAgICBAc2NwOiBpZGVudGlmaWVzIGNvbW1hbmQgdG8gYmUgYWJvcnRlZAorICoKKyAqICAgICAgUmV0dXJucyBTVUNDRVNTIGlmIGNvbW1hbmQgYWJvcnRlZCBlbHNlIEZBSUxFRAorICoKKyAqICAgICAgTG9ja3M6IHN0cnVjdCBTY3NpX0hvc3Q6Omhvc3RfbG9jayBoZWxkICh3aXRoIGlycXNhdmUpIG9uIGVudHJ5IAorICogICAgICBhbmQgYXNzdW1lZCB0byBiZSBoZWxkIG9uIHJldHVybi4KKyAqCisgKiAgICAgIENhbGxpbmcgY29udGV4dDoga2VybmVsIHRocmVhZAorICoKKyAqICAgICAgTm90ZXM6IEludm9rZWQgZnJvbSBzY3NpX2VoIHRocmVhZC4gTm8gb3RoZXIgY29tbWFuZHMgd2lsbCBiZQorICogICAgICBxdWV1ZWQgb24gY3VycmVudCBob3N0IGR1cmluZyBlaC4KKyAqCisgKiAgICAgIE9wdGlvbmFsbHkgZGVmaW5lZCBpbjogTExECisgKiovCisgICAgIGludCBlaF9hYm9ydF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKiBzY3ApCisKKworLyoqCisgKiAgICAgIGVoX2J1c19yZXNldF9oYW5kbGVyIC0gaXNzdWUgU0NTSSBidXMgcmVzZXQKKyAqICAgICAgQHNjcDogU0NTSSBidXMgdGhhdCBjb250YWlucyB0aGlzIGRldmljZSBzaG91bGQgYmUgcmVzZXQKKyAqCisgKiAgICAgIFJldHVybnMgU1VDQ0VTUyBpZiBjb21tYW5kIGFib3J0ZWQgZWxzZSBGQUlMRUQKKyAqCisgKiAgICAgIExvY2tzOiBzdHJ1Y3QgU2NzaV9Ib3N0Ojpob3N0X2xvY2sgaGVsZCAod2l0aCBpcnFzYXZlKSBvbiBlbnRyeSAKKyAqICAgICAgYW5kIGFzc3VtZWQgdG8gYmUgaGVsZCBvbiByZXR1cm4uCisgKgorICogICAgICBDYWxsaW5nIGNvbnRleHQ6IGtlcm5lbCB0aHJlYWQKKyAqCisgKiAgICAgIE5vdGVzOiBJbnZva2VkIGZyb20gc2NzaV9laCB0aHJlYWQuIE5vIG90aGVyIGNvbW1hbmRzIHdpbGwgYmUKKyAqICAgICAgcXVldWVkIG9uIGN1cnJlbnQgaG9zdCBkdXJpbmcgZWguCisgKgorICogICAgICBPcHRpb25hbGx5IGRlZmluZWQgaW46IExMRAorICoqLworICAgICBpbnQgZWhfYnVzX3Jlc2V0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqIHNjcCkKKworCisvKioKKyAqICAgICAgZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIgLSBpc3N1ZSBTQ1NJIGRldmljZSByZXNldAorICogICAgICBAc2NwOiBpZGVudGlmaWVzIFNDU0kgZGV2aWNlIHRvIGJlIHJlc2V0CisgKgorICogICAgICBSZXR1cm5zIFNVQ0NFU1MgaWYgY29tbWFuZCBhYm9ydGVkIGVsc2UgRkFJTEVECisgKgorICogICAgICBMb2Nrczogc3RydWN0IFNjc2lfSG9zdDo6aG9zdF9sb2NrIGhlbGQgKHdpdGggaXJxc2F2ZSkgb24gZW50cnkKKyAqICAgICAgYW5kIGFzc3VtZWQgdG8gYmUgaGVsZCBvbiByZXR1cm4uCisgKgorICogICAgICBDYWxsaW5nIGNvbnRleHQ6IGtlcm5lbCB0aHJlYWQKKyAqCisgKiAgICAgIE5vdGVzOiBJbnZva2VkIGZyb20gc2NzaV9laCB0aHJlYWQuIE5vIG90aGVyIGNvbW1hbmRzIHdpbGwgYmUKKyAqICAgICAgcXVldWVkIG9uIGN1cnJlbnQgaG9zdCBkdXJpbmcgZWguCisgKgorICogICAgICBPcHRpb25hbGx5IGRlZmluZWQgaW46IExMRAorICoqLworICAgICBpbnQgZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqIHNjcCkKKworCisvKioKKyAqICAgICAgZWhfaG9zdF9yZXNldF9oYW5kbGVyIC0gcmVzZXQgaG9zdCAoaG9zdCBidXMgYWRhcHRlcikKKyAqICAgICAgQHNjcDogU0NTSSBob3N0IHRoYXQgY29udGFpbnMgdGhpcyBkZXZpY2Ugc2hvdWxkIGJlIHJlc2V0CisgKgorICogICAgICBSZXR1cm5zIFNVQ0NFU1MgaWYgY29tbWFuZCBhYm9ydGVkIGVsc2UgRkFJTEVECisgKgorICogICAgICBMb2Nrczogc3RydWN0IFNjc2lfSG9zdDo6aG9zdF9sb2NrIGhlbGQgKHdpdGggaXJxc2F2ZSkgb24gZW50cnkKKyAqICAgICAgYW5kIGFzc3VtZWQgdG8gYmUgaGVsZCBvbiByZXR1cm4uCisgKgorICogICAgICBDYWxsaW5nIGNvbnRleHQ6IGtlcm5lbCB0aHJlYWQKKyAqCisgKiAgICAgIE5vdGVzOiBJbnZva2VkIGZyb20gc2NzaV9laCB0aHJlYWQuIE5vIG90aGVyIGNvbW1hbmRzIHdpbGwgYmUKKyAqICAgICAgcXVldWVkIG9uIGN1cnJlbnQgaG9zdCBkdXJpbmcgZWguIAorICogICAgICBXaXRoIHRoZSBkZWZhdWx0IGVoX3N0cmF0ZWd5IGluIHBsYWNlLCBpZiBub25lIG9mIHRoZSBfYWJvcnRfLCAKKyAqICAgICAgX2RldmljZV9yZXNldF8sIF9idXNfcmVzZXRfIG9yIHRoaXMgZWggaGFuZGxlciBmdW5jdGlvbiBhcmUgCisgKiAgICAgIGRlZmluZWQgKG9yIHRoZXkgYWxsIHJldHVybiBGQUlMRUQpIHRoZW4gdGhlIGRldmljZSBpbiBxdWVzdGlvbiAKKyAqICAgICAgd2lsbCBiZSBzZXQgb2ZmbGluZSB3aGVuZXZlciBlaCBpcyBpbnZva2VkLgorICoKKyAqICAgICAgT3B0aW9uYWxseSBkZWZpbmVkIGluOiBMTEQKKyAqKi8KKyAgICAgaW50IGVoX2hvc3RfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICogc2NwKQorCisKKy8qKgorICogICAgICBlaF9zdHJhdGVneV9oYW5kbGVyIC0gZHJpdmVyIHN1cHBsaWVkIGFsdGVybmF0ZSB0byBzY3NpX3VuamFtX2hvc3QoKQorICogICAgICBAc2hwOiBob3N0IG9uIHdoaWNoIGVycm9yIGhhcyBvY2N1cnJlZAorICoKKyAqICAgICAgUmV0dXJucyBUUlVFIGlmIGhvc3QgdW5qYW1tZWQsIGVsc2UgRkFMU0UuCisgKgorICogICAgICBMb2Nrczogbm9uZQorICoKKyAqICAgICAgQ2FsbGluZyBjb250ZXh0OiBrZXJuZWwgdGhyZWFkCisgKgorICogICAgICBOb3RlczogSW52b2tlZCBmcm9tIHNjc2lfZWggdGhyZWFkLiBMTEQgc3VwcGxpZWQgYWx0ZXJuYXRlIHRvIAorICogICAgICBzY3NpX3VuamFtX2hvc3QoKSBmb3VuZCBpbiBzY3NpX2Vycm9yLmMKKyAqCisgKiAgICAgIE9wdGlvbmFsbHkgZGVmaW5lZCBpbjogTExECisgKiovCisgICAgIGludCBlaF9zdHJhdGVneV9oYW5kbGVyKHN0cnVjdCBTY3NpX0hvc3QgKiBzaHApCisKKworLyoqCisgKiAgICAgIGluZm8gLSBzdXBwbHkgaW5mb3JtYXRpb24gYWJvdXQgZ2l2ZW4gaG9zdDogZHJpdmVyIG5hbWUgcGx1cyBkYXRhCisgKiAgICAgICAgICAgICB0byBkaXN0aW5ndWlzaCBnaXZlbiBob3N0CisgKiAgICAgIEBzaHA6IGhvc3QgdG8gc3VwcGx5IGluZm9ybWF0aW9uIGFib3V0CisgKgorICogICAgICBSZXR1cm4gQVNDSUkgbnVsbCB0ZXJtaW5hdGVkIHN0cmluZy4gW1RoaXMgZHJpdmVyIGlzIGFzc3VtZWQgdG8KKyAqICAgICAgbWFuYWdlIHRoZSBtZW1vcnkgcG9pbnRlZCB0byBhbmQgbWFpbnRhaW4gaXQsIHR5cGljYWxseSBmb3IgdGhlCisgKiAgICAgIGxpZmV0aW1lIG9mIHRoaXMgaG9zdC5dCisgKgorICogICAgICBMb2Nrczogbm9uZQorICoKKyAqICAgICAgQ2FsbGluZyBjb250ZXh0OiBwcm9jZXNzCisgKgorICogICAgICBOb3RlczogT2Z0ZW4gc3VwcGxpZXMgUENJIG9yIElTQSBpbmZvcm1hdGlvbiBzdWNoIGFzIElPIGFkZHJlc3NlcworICogICAgICBhbmQgaW50ZXJydXB0IG51bWJlcnMuIElmIG5vdCBzdXBwbGllZCBzdHJ1Y3QgU2NzaV9Ib3N0OjpuYW1lIHVzZWQKKyAqICAgICAgaW5zdGVhZC4gSXQgaXMgYXNzdW1lZCB0aGUgcmV0dXJuZWQgaW5mb3JtYXRpb24gZml0cyBvbiBvbmUgbGluZSAKKyAqICAgICAgKGkuZS4gZG9lcyBub3QgaW5jbHVkZWQgZW1iZWRkZWQgbmV3bGluZXMpLgorICogICAgICBUaGUgU0NTSV9JT0NUTF9QUk9CRV9IT1NUIGlvY3RsIHlpZWxkcyB0aGUgc3RyaW5nIHJldHVybmVkIGJ5IHRoaXMKKyAqICAgICAgZnVuY3Rpb24gKG9yIHN0cnVjdCBTY3NpX0hvc3Q6Om5hbWUgaWYgdGhpcyBmdW5jdGlvbiBpcyBub3QKKyAqICAgICAgYXZhaWxhYmxlKS4KKyAqICAgICAgSW4gYSBzaW1pbGFyIG1hbm5lciwgaW5pdF90aGlzX3Njc2lfZHJpdmVyKCkgb3V0cHV0cyB0byB0aGUgY29uc29sZQorICogICAgICBlYWNoIGhvc3QncyAiaW5mbyIgKG9yIG5hbWUpIGZvciB0aGUgZHJpdmVyIGl0IGlzIHJlZ2lzdGVyaW5nLgorICogICAgICBBbHNvIGlmIHByb2NfaW5mbygpIGlzIG5vdCBzdXBwbGllZCwgdGhlIG91dHB1dCBvZiB0aGlzIGZ1bmN0aW9uCisgKiAgICAgIGlzIHVzZWQgaW5zdGVhZC4KKyAqCisgKiAgICAgIE9wdGlvbmFsbHkgZGVmaW5lZCBpbjogTExECisgKiovCisgICAgY29uc3QgY2hhciAqIGluZm8oc3RydWN0IFNjc2lfSG9zdCAqIHNocCkKKworCisvKioKKyAqICAgICAgaW9jdGwgLSBkcml2ZXIgY2FuIHJlc3BvbmQgdG8gaW9jdGxzCisgKiAgICAgIEBzZHA6IGRldmljZSB0aGF0IGlvY3RsIHdhcyBpc3N1ZWQgZm9yCisgKiAgICAgIEBjbWQ6IGlvY3RsIG51bWJlcgorICogICAgICBAYXJnOiBwb2ludGVyIHRvIHJlYWQgb3Igd3JpdGUgZGF0YSBmcm9tLiBTaW5jZSBpdCBwb2ludHMgdG8KKyAqICAgICAgICAgICAgdXNlciBzcGFjZSwgc2hvdWxkIHVzZSBhcHByb3ByaWF0ZSBrZXJuZWwgZnVuY3Rpb25zCisgKiAgICAgICAgICAgIChlLmcuIGNvcHlfZnJvbV91c2VyKCkgKS4gSW4gdGhlIFVuaXggc3R5bGUgdGhpcyBhcmd1bWVudAorICogICAgICAgICAgICBjYW4gYWxzbyBiZSB2aWV3ZWQgYXMgYW4gdW5zaWduZWQgbG9uZy4KKyAqCisgKiAgICAgIFJldHVybnMgbmVnYXRpdmUgImVycm5vIiB2YWx1ZSB3aGVuIHRoZXJlIGlzIGEgcHJvYmxlbS4gMCBvciBhCisgKiAgICAgIHBvc2l0aXZlIHZhbHVlIGluZGljYXRlcyBzdWNjZXNzIGFuZCBpcyByZXR1cm5lZCB0byB0aGUgdXNlciBzcGFjZS4KKyAqCisgKiAgICAgIExvY2tzOiBub25lCisgKgorICogICAgICBDYWxsaW5nIGNvbnRleHQ6IHByb2Nlc3MKKyAqCisgKiAgICAgIE5vdGVzOiBUaGUgU0NTSSBzdWJzeXN0ZW0gdXNlcyBhICJ0cmlja2xlIGRvd24iIGlvY3RsIG1vZGVsLgorICogICAgICBUaGUgdXNlciBpc3N1ZXMgYW4gaW9jdGwoKSBhZ2FpbnN0IGFuIHVwcGVyIGxldmVsIGRyaXZlcgorICogICAgICAoZS5nLiAvZGV2L3NkYykgYW5kIGlmIHRoZSB1cHBlciBsZXZlbCBkcml2ZXIgZG9lc24ndCByZWNvZ25pemUKKyAqICAgICAgdGhlICdjbWQnIHRoZW4gaXQgaXMgcGFzc2VkIHRvIHRoZSBTQ1NJIG1pZCBsZXZlbC4gSWYgdGhlIFNDU0kKKyAqICAgICAgbWlkIGxldmVsIGRvZXMgbm90IHJlY29nbml6ZSBpdCwgdGhlbiB0aGUgTExEIHRoYXQgY29udHJvbHMKKyAqICAgICAgdGhlIGRldmljZSByZWNlaXZlcyB0aGUgaW9jdGwuIEFjY29yZGluZyB0byByZWNlbnQgVW5peCBzdGFuZGFyZHMKKyAqICAgICAgdW5zdXBwb3J0ZWQgaW9jdGwoKSAnY21kJyBudW1iZXJzIHNob3VsZCByZXR1cm4gLUVOT1RUWS4KKyAqCisgKiAgICAgIE9wdGlvbmFsbHkgZGVmaW5lZCBpbjogTExECisgKiovCisgICAgaW50IGlvY3RsKHN0cnVjdCBzY3NpX2RldmljZSAqc2RwLCBpbnQgY21kLCB2b2lkICphcmcpCisKKworLyoqCisgKiAgICAgIHByb2NfaW5mbyAtIHN1cHBvcnRzIC9wcm9jL3Njc2kve2RyaXZlcl9uYW1lfS97aG9zdF9ub30KKyAqICAgICAgQGJ1ZmZlcjogYW5jaG9yIHBvaW50IHRvIG91dHB1dCB0byAoMD09d3JpdGV0bzFfcmVhZDApIG9yIGZldGNoIGZyb20KKyAqICAgICAgICAgICAgICAgKDE9PXdyaXRldG8xX3JlYWQwKS4KKyAqICAgICAgQHN0YXJ0OiB3aGVyZSAiaW50ZXJlc3RpbmciIGRhdGEgaXMgd3JpdHRlbiB0by4gSWdub3JlZCB3aGVuCisgKiAgICAgICAgICAgICAgMT09d3JpdGV0bzFfcmVhZDAuCisgKiAgICAgIEBvZmZzZXQ6IG9mZnNldCB3aXRoaW4gYnVmZmVyIDA9PXdyaXRldG8xX3JlYWQwIGlzIGFjdHVhbGx5CisgKiAgICAgICAgICAgICAgIGludGVyZXN0ZWQgaW4uIElnbm9yZWQgd2hlbiAxPT13cml0ZXRvMV9yZWFkMCAuCisgKiAgICAgIEBsZW5ndGg6IG1heGltdW0gKG9yIGFjdHVhbCkgZXh0ZW50IG9mIGJ1ZmZlcgorICogICAgICBAaG9zdF9ubzogaG9zdCBudW1iZXIgb2YgaW50ZXJlc3QgKHN0cnVjdCBTY3NpX0hvc3Q6Omhvc3Rfbm8pCisgKiAgICAgIEB3cml0ZXRvMV9yZWFkMDogMSAtPiBkYXRhIGNvbWluZyBmcm9tIHVzZXIgc3BhY2UgdG93YXJkcyBkcml2ZXIKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLmcuICJlY2hvIHNvbWVfc3RyaW5nID4gL3Byb2Mvc2NzaS94eXovMiIpCisgKiAgICAgICAgICAgICAgICAgICAgICAgMCAtPiB1c2VyIHdoYXQgZGF0YSBmcm9tIHRoaXMgZHJpdmVyCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZS5nLiAiY2F0IC9wcm9jL3Njc2kveHl6LzIiKQorICoKKyAqICAgICAgUmV0dXJucyBsZW5ndGggd2hlbiAxPT13cml0ZXRvMV9yZWFkMC4gT3RoZXJ3aXNlIG51bWJlciBvZiBjaGFycworICogICAgICBvdXRwdXQgdG8gYnVmZmVyIHBhc3Qgb2Zmc2V0LgorICoKKyAqICAgICAgTG9ja3M6IG5vbmUgaGVsZAorICoKKyAqICAgICAgQ2FsbGluZyBjb250ZXh0OiBwcm9jZXNzCisgKgorICogICAgICBOb3RlczogRHJpdmVuIGZyb20gc2NzaV9wcm9jLmMgd2hpY2ggaW50ZXJmYWNlcyB0byBwcm9jX2ZzLiBwcm9jX2ZzCisgKiAgICAgIHN1cHBvcnQgY2FuIG5vdyBiZSBjb25maWd1cmVkIG91dCBvZiB0aGUgc2NzaSBzdWJzeXN0ZW0uCisgKgorICogICAgICBPcHRpb25hbGx5IGRlZmluZWQgaW46IExMRAorICoqLworICAgIGludCBwcm9jX2luZm8oY2hhciAqIGJ1ZmZlciwgY2hhciAqKiBzdGFydCwgb2ZmX3Qgb2Zmc2V0LCAKKyAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgsIGludCBob3N0X25vLCBpbnQgd3JpdGV0bzFfcmVhZDApCisKKworLyoqCisgKiAgICAgIHF1ZXVlY29tbWFuZCAtIHF1ZXVlIHNjc2kgY29tbWFuZCwgaW52b2tlICdkb25lJyBvbiBjb21wbGV0aW9uCisgKiAgICAgIEBzY3A6IHBvaW50ZXIgdG8gc2NzaSBjb21tYW5kIG9iamVjdAorICogICAgICBAZG9uZTogZnVuY3Rpb24gcG9pbnRlciB0byBiZSBpbnZva2VkIG9uIGNvbXBsZXRpb24KKyAqCisgKiAgICAgIFJldHVybnMgMCBvbiBzdWNjZXNzLgorICoKKyAqICAgICAgSWYgdGhlcmUncyBhIGZhaWx1cmUsIHJldHVybiBlaXRoZXI6CisgKgorICogICAgICBTQ1NJX01MUVVFVUVfREVWSUNFX0JVU1kgaWYgdGhlIGRldmljZSBxdWV1ZSBpcyBmdWxsLCBvcgorICogICAgICBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZIGlmIHRoZSBlbnRpcmUgaG9zdCBxdWV1ZSBpcyBmdWxsCisgKgorICogICAgICBPbiBib3RoIG9mIHRoZXNlIHJldHVybnMsIHRoZSBtaWQtbGF5ZXIgd2lsbCByZXF1ZXVlIHRoZSBJL08KKyAqCisgKiAgICAgIC0gaWYgdGhlIHJldHVybiBpcyBTQ1NJX01MUVVFVUVfREVWSUNFX0JVU1ksIG9ubHkgdGhhdCBwYXJ0aWN1bGFyCisgKiAgICAgIGRldmljZSB3aWxsIGJlIHBhdXNlZCwgYW5kIGl0IHdpbGwgYmUgdW5wYXVzZWQgd2hlbiBhIGNvbW1hbmQgdG8KKyAqICAgICAgdGhlIGRldmljZSByZXR1cm5zIChvciBhZnRlciBhIGJyaWVmIGRlbGF5IGlmIHRoZXJlIGFyZSBubyBtb3JlCisgKiAgICAgIG91dHN0YW5kaW5nIGNvbW1hbmRzIHRvIGl0KS4gIENvbW1hbmRzIHRvIG90aGVyIGRldmljZXMgY29udGludWUKKyAqICAgICAgdG8gYmUgcHJvY2Vzc2VkIG5vcm1hbGx5LgorICoKKyAqICAgICAgLSBpZiB0aGUgcmV0dXJuIGlzIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1ksIGFsbCBJL08gdG8gdGhlIGhvc3QKKyAqICAgICAgaXMgcGF1c2VkIGFuZCB3aWxsIGJlIHVucGF1c2VkIHdoZW4gYW55IGNvbW1hbmQgcmV0dXJucyBmcm9tCisgKiAgICAgIHRoZSBob3N0IChvciBhZnRlciBhIGJyaWVmIGRlbGF5IGlmIHRoZXJlIGFyZSBubyBvdXRzdGFuZGluZworICogICAgICBjb21tYW5kcyB0byB0aGUgaG9zdCkuCisgKgorICogICAgICBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIGVhcmxpZXIgdmVyc2lvbnMgb2YgcXVldWVjb21tYW5kLCBhbnkKKyAqICAgICAgb3RoZXIgcmV0dXJuIHZhbHVlIGlzIHRyZWF0ZWQgdGhlIHNhbWUgYXMKKyAqICAgICAgU0NTSV9NTFFVRVVFX0hPU1RfQlVTWS4KKyAqCisgKiAgICAgIE90aGVyIHR5cGVzIG9mIGVycm9ycyB0aGF0IGFyZSBkZXRlY3RlZCBpbW1lZGlhdGVseSBtYXkgYmUKKyAqICAgICAgZmxhZ2dlZCBieSBzZXR0aW5nIHNjcC0+cmVzdWx0IHRvIGFuIGFwcHJvcHJpYXRlIHZhbHVlLAorICogICAgICBpbnZva2luZyB0aGUgJ2RvbmUnIGNhbGxiYWNrLCBhbmQgdGhlbiByZXR1cm5pbmcgMCBmcm9tIHRoaXMKKyAqICAgICAgZnVuY3Rpb24uIElmIHRoZSBjb21tYW5kIGlzIG5vdCBwZXJmb3JtZWQgaW1tZWRpYXRlbHkgKGFuZCB0aGUKKyAqICAgICAgTExEIGlzIHN0YXJ0aW5nIChvciB3aWxsIHN0YXJ0KSB0aGUgZ2l2ZW4gY29tbWFuZCkgdGhlbiB0aGlzCisgKiAgICAgIGZ1bmN0aW9uIHNob3VsZCBwbGFjZSAwIGluIHNjcC0+cmVzdWx0IGFuZCByZXR1cm4gMC4KKyAqCisgKiAgICAgIENvbW1hbmQgb3duZXJzaGlwLiAgSWYgdGhlIGRyaXZlciByZXR1cm5zIHplcm8sIGl0IG93bnMgdGhlCisgKiAgICAgIGNvbW1hbmQgYW5kIG11c3QgdGFrZSByZXNwb25zaWJpbGl0eSBmb3IgZW5zdXJpbmcgdGhlICdkb25lJworICogICAgICBjYWxsYmFjayBpcyBleGVjdXRlZC4gIE5vdGU6IHRoZSBkcml2ZXIgbWF5IGNhbGwgZG9uZSBiZWZvcmUKKyAqICAgICAgcmV0dXJuaW5nIHplcm8sIGJ1dCBhZnRlciBpdCBoYXMgY2FsbGVkIGRvbmUsIGl0IG1heSBub3QKKyAqICAgICAgcmV0dXJuIGFueSB2YWx1ZSBvdGhlciB0aGFuIHplcm8uICBJZiB0aGUgZHJpdmVyIG1ha2VzIGEKKyAqICAgICAgbm9uLXplcm8gcmV0dXJuLCBpdCBtdXN0IG5vdCBleGVjdXRlIHRoZSBjb21tYW5kJ3MgZG9uZQorICogICAgICBjYWxsYmFjayBhdCBhbnkgdGltZS4KKyAqCisgKiAgICAgIExvY2tzOiBzdHJ1Y3QgU2NzaV9Ib3N0Ojpob3N0X2xvY2sgaGVsZCBvbiBlbnRyeSAod2l0aCAiaXJxc2F2ZSIpCisgKiAgICAgICAgICAgICBhbmQgaXMgZXhwZWN0ZWQgdG8gYmUgaGVsZCBvbiByZXR1cm4uCisgKgorICogICAgICBDYWxsaW5nIGNvbnRleHQ6IGluIGludGVycnVwdCAoc29mdCBpcnEpIG9yIHByb2Nlc3MgY29udGV4dAorICoKKyAqICAgICAgTm90ZXM6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHJlbGF0aXZlbHkgZmFzdC4gTm9ybWFsbHkgaXQgd2lsbAorICogICAgICBub3Qgd2FpdCBmb3IgSU8gdG8gY29tcGxldGUuIEhlbmNlIHRoZSAnZG9uZScgY2FsbGJhY2sgaXMgaW52b2tlZCAKKyAqICAgICAgKG9mdGVuIGRpcmVjdGx5IGZyb20gYW4gaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSkgc29tZSB0aW1lIGFmdGVyCisgKiAgICAgIHRoaXMgZnVuY3Rpb24gaGFzIHJldHVybmVkLiBJbiBzb21lIGNhc2VzIChlLmcuIHBzZXVkbyBhZGFwdGVyIAorICogICAgICBkcml2ZXJzIHRoYXQgbWFudWZhY3R1cmUgdGhlIHJlc3BvbnNlIHRvIGEgU0NTSSBJTlFVSVJZKQorICogICAgICB0aGUgJ2RvbmUnIGNhbGxiYWNrIG1heSBiZSBpbnZva2VkIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIHJldHVybnMuCisgKiAgICAgIElmIHRoZSAnZG9uZScgY2FsbGJhY2sgaXMgbm90IGludm9rZWQgd2l0aGluIGEgY2VydGFpbiBwZXJpb2QKKyAqICAgICAgdGhlIFNDU0kgbWlkIGxldmVsIHdpbGwgY29tbWVuY2UgZXJyb3IgcHJvY2Vzc2luZy4KKyAqICAgICAgSWYgYSBzdGF0dXMgb2YgQ0hFQ0sgQ09ORElUSU9OIGlzIHBsYWNlZCBpbiAicmVzdWx0IiB3aGVuIHRoZQorICogICAgICAnZG9uZScgY2FsbGJhY2sgaXMgaW52b2tlZCwgdGhlbiB0aGUgTExEIGRyaXZlciBzaG91bGQgCisgKiAgICAgIHBlcmZvcm0gYXV0b3NlbnNlIGFuZCBmaWxsIGluIHRoZSBzdHJ1Y3Qgc2NzaV9jbW5kOjpzZW5zZV9idWZmZXIKKyAqICAgICAgYXJyYXkuIFRoZSBzY3NpX2NtbmQ6OnNlbnNlX2J1ZmZlciBhcnJheSBpcyB6ZXJvZWQgcHJpb3IgdG8KKyAqICAgICAgdGhlIG1pZCBsZXZlbCBxdWV1aW5nIGEgY29tbWFuZCB0byBhbiBMTEQuCisgKgorICogICAgICBEZWZpbmVkIGluOiBMTEQKKyAqKi8KKyAgICBpbnQgcXVldWVjb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQgKiBzY3AsIAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKikpCisKKworLyoqCisgKiAgICAgIHJlbGVhc2UgLSByZWxlYXNlIGFsbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGdpdmVuIGhvc3QKKyAqICAgICAgQHNocDogaG9zdCB0byBiZSByZWxlYXNlZC4KKyAqCisgKiAgICAgIFJldHVybiB2YWx1ZSBpZ25vcmVkIChjb3VsZCBzb29uIGJlIGEgZnVuY3Rpb24gcmV0dXJuaW5nIHZvaWQpLgorICoKKyAqICAgICAgTG9ja3M6IG5vbmUgaGVsZAorICoKKyAqICAgICAgQ2FsbGluZyBjb250ZXh0OiBwcm9jZXNzCisgKgorICogICAgICBOb3RlczogSW52b2tlZCBmcm9tIHNjc2lfbW9kdWxlLmMncyBleGl0X3RoaXNfc2NzaV9kcml2ZXIoKS4KKyAqICAgICAgTExEJ3MgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBzaG91bGQgY2FsbCAKKyAqICAgICAgc2NzaV91bnJlZ2lzdGVyKHNocCkgcHJpb3IgdG8gcmV0dXJuaW5nLgorICogICAgICBPbmx5IG5lZWRlZCBmb3Igb2xkLXN0eWxlIGhvc3QgdGVtcGxhdGVzLgorICoKKyAqICAgICAgRGVmaW5lZCBpbjogTExEIChyZXF1aXJlZCBpbiAicGFzc2l2ZSBpbml0aWFsaXphdGlvbiBtb2RlbCIsCisgKiAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIG5vdCBiZSBkZWZpbmVkIGluIGhvdHBsdWcgbW9kZWwpCisgKiovCisgICAgaW50IHJlbGVhc2Uoc3RydWN0IFNjc2lfSG9zdCAqIHNocCkKKworCisvKioKKyAqICAgICAgc2xhdmVfYWxsb2MgLSAgIHByaW9yIHRvIGFueSBjb21tYW5kcyBiZWluZyBzZW50IHRvIGEgbmV3IGRldmljZSAKKyAqICAgICAgICAgICAgICAgICAgICAgIChpLmUuIGp1c3QgcHJpb3IgdG8gc2NhbikgdGhpcyBjYWxsIGlzIG1hZGUKKyAqICAgICAgQHNkcDogcG9pbnRlciB0byBuZXcgZGV2aWNlIChhYm91dCB0byBiZSBzY2FubmVkKQorICoKKyAqICAgICAgUmV0dXJucyAwIGlmIG9rLiBBbnkgb3RoZXIgcmV0dXJuIGlzIGFzc3VtZWQgdG8gYmUgYW4gZXJyb3IgYW5kCisgKiAgICAgIHRoZSBkZXZpY2UgaXMgaWdub3JlZC4KKyAqCisgKiAgICAgIExvY2tzOiBub25lCisgKgorICogICAgICBDYWxsaW5nIGNvbnRleHQ6IHByb2Nlc3MKKyAqCisgKiAgICAgIE5vdGVzOiBBbGxvd3MgdGhlIGRyaXZlciB0byBhbGxvY2F0ZSBhbnkgcmVzb3VyY2VzIGZvciBhIGRldmljZQorICogICAgICBwcmlvciB0byBpdHMgaW5pdGlhbCBzY2FuLiBUaGUgY29ycmVzcG9uZGluZyBzY3NpIGRldmljZSBtYXkgbm90CisgKiAgICAgIGV4aXN0IGJ1dCB0aGUgbWlkIGxldmVsIGlzIGp1c3QgYWJvdXQgdG8gc2NhbiBmb3IgaXQgKGkuZS4gc2VuZAorICogICAgICBhbmQgSU5RVUlSWSBjb21tYW5kIHBsdXMgLi4uKS4gSWYgYSBkZXZpY2UgaXMgZm91bmQgdGhlbgorICogICAgICBzbGF2ZV9jb25maWd1cmUoKSB3aWxsIGJlIGNhbGxlZCB3aGlsZSBpZiBhIGRldmljZSBpcyBub3QgZm91bmQKKyAqICAgICAgc2xhdmVfZGVzdHJveSgpIGlzIGNhbGxlZC4KKyAqICAgICAgRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGluY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaCBmaWxlLgorICoKKyAqICAgICAgT3B0aW9uYWxseSBkZWZpbmVkIGluOiBMTEQKKyAqKi8KKyAgICBpbnQgc2xhdmVfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICpzZHApCisKKworLyoqCisgKiAgICAgIHNsYXZlX2NvbmZpZ3VyZSAtIGRyaXZlciBmaW5lIHR1bmluZyBmb3IgZ2l2ZW4gZGV2aWNlIGp1c3QgYWZ0ZXIgaXQKKyAqICAgICAgICAgICAgICAgICAgICAgaGFzIGJlZW4gZmlyc3Qgc2Nhbm5lZCAoaS5lLiBpdCByZXNwb25kZWQgdG8gYW4KKyAqICAgICAgICAgICAgICAgICAgICAgSU5RVUlSWSkKKyAqICAgICAgQHNkcDogZGV2aWNlIHRoYXQgaGFzIGp1c3QgYmVlbiBhdHRhY2hlZAorICoKKyAqICAgICAgUmV0dXJucyAwIGlmIG9rLiBBbnkgb3RoZXIgcmV0dXJuIGlzIGFzc3VtZWQgdG8gYmUgYW4gZXJyb3IgYW5kCisgKiAgICAgIHRoZSBkZXZpY2UgaXMgdGFrZW4gb2ZmbGluZS4gW29mZmxpbmUgZGV2aWNlcyB3aWxsIF9ub3RfIGhhdmUKKyAqICAgICAgc2xhdmVfZGVzdHJveSgpIGNhbGxlZCBvbiB0aGVtIHNvIGNsZWFuIHVwIHJlc291cmNlcy5dCisgKgorICogICAgICBMb2Nrczogbm9uZQorICoKKyAqICAgICAgQ2FsbGluZyBjb250ZXh0OiBwcm9jZXNzCisgKgorICogICAgICBOb3RlczogQWxsb3dzIHRoZSBkcml2ZXIgdG8gaW5zcGVjdCB0aGUgcmVzcG9uc2UgdG8gdGhlIGluaXRpYWwKKyAqICAgICAgSU5RVUlSWSBkb25lIGJ5IHRoZSBzY2FubmluZyBjb2RlIGFuZCB0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbi4KKyAqICAgICAgRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGluY2x1ZGUvc2NzaS9zY3NpX2hvc3QuaCBmaWxlLgorICoKKyAqICAgICAgT3B0aW9uYWxseSBkZWZpbmVkIGluOiBMTEQKKyAqKi8KKyAgICBpbnQgc2xhdmVfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RwKQorCisKKy8qKgorICogICAgICBzbGF2ZV9kZXN0cm95IC0gZ2l2ZW4gZGV2aWNlIGlzIGFib3V0IHRvIGJlIHNodXQgZG93bi4gQWxsCisgKiAgICAgICAgICAgICAgICAgICAgICBhY3Rpdml0eSBoYXMgY2Vhc2VkIG9uIHRoaXMgZGV2aWNlLgorICogICAgICBAc2RwOiBkZXZpY2UgdGhhdCBpcyBhYm91dCB0byBiZSBzaHV0IGRvd24KKyAqCisgKiAgICAgIFJldHVybnMgbm90aGluZworICoKKyAqICAgICAgTG9ja3M6IG5vbmUKKyAqCisgKiAgICAgIENhbGxpbmcgY29udGV4dDogcHJvY2VzcworICoKKyAqICAgICAgTm90ZXM6IE1pZCBsZXZlbCBzdHJ1Y3R1cmVzIGZvciBnaXZlbiBkZXZpY2UgYXJlIHN0aWxsIGluIHBsYWNlCisgKiAgICAgIGJ1dCBhcmUgYWJvdXQgdG8gYmUgdG9ybiBkb3duLiBBbnkgcGVyIGRldmljZSByZXNvdXJjZXMgYWxsb2NhdGVkCisgKiAgICAgIGJ5IHRoaXMgZHJpdmVyIGZvciBnaXZlbiBkZXZpY2Ugc2hvdWxkIGJlIGZyZWVkIG5vdy4gTm8gZnVydGhlcgorICogICAgICBjb21tYW5kcyB3aWxsIGJlIHNlbnQgZm9yIHRoaXMgc2RwIGluc3RhbmNlLiBbSG93ZXZlciB0aGUgZGV2aWNlCisgKiAgICAgIGNvdWxkIGJlIHJlLWF0dGFjaGVkIGluIHRoZSBmdXR1cmUgaW4gd2hpY2ggY2FzZSBhIG5ldyBpbnN0YW5jZQorICogICAgICBvZiBzdHJ1Y3Qgc2NzaV9kZXZpY2Ugd291bGQgYmUgc3VwcGxpZWQgYnkgZnV0dXJlIHNsYXZlX2FsbG9jKCkKKyAqICAgICAgYW5kIHNsYXZlX2NvbmZpZ3VyZSgpIGNhbGxzLl0KKyAqCisgKiAgICAgIE9wdGlvbmFsbHkgZGVmaW5lZCBpbjogTExECisgKiovCisgICAgdm9pZCBzbGF2ZV9kZXN0cm95KHN0cnVjdCBzY3NpX2RldmljZSAqc2RwKQorCisKKworRGF0YSBTdHJ1Y3R1cmVzCis9PT09PT09PT09PT09PT0KK3N0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZXJlIGlzIG9uZSAic3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSIgaW5zdGFuY2UgcGVyIExMRCAqKiouIEl0IGlzCit0eXBpY2FsbHkgaW5pdGlhbGl6ZWQgYXMgYSBmaWxlIHNjb3BlIHN0YXRpYyBpbiBhIGRyaXZlcidzIGhlYWRlciBmaWxlLiBUaGF0Cit3YXkgbWVtYmVycyB0aGF0IGFyZSBub3QgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aWxsIGJlIHNldCB0byAwIG9yIE5VTEwuCitNZW1iZXIgb2YgaW50ZXJlc3Q6CisgICAgbmFtZSAgICAgICAgIC0gbmFtZSBvZiBkcml2ZXIgKG1heSBjb250YWluIHNwYWNlcywgcGxlYXNlIGxpbWl0IHRvCisgICAgICAgICAgICAgICAgICAgbGVzcyB0aGFuIDgwIGNoYXJhY3RlcnMpCisgICAgcHJvY19uYW1lICAgIC0gbmFtZSB1c2VkIGluICIvcHJvYy9zY3NpLzxwcm9jX25hbWU+Lzxob3N0X25vPiIgYW5kCisgICAgICAgICAgICAgICAgICAgYnkgc3lzZnMgaW4gb25lIG9mIGl0cyAiZHJpdmVycyIgZGlyZWN0b3JpZXMuIEhlbmNlCisgICAgICAgICAgICAgICAgICAgInByb2NfbmFtZSIgc2hvdWxkIG9ubHkgY29udGFpbiBjaGFyYWN0ZXJzIGFjY2VwdGFibGUKKyAgICAgICAgICAgICAgICAgICB0byBhIFVuaXggZmlsZSBuYW1lLgorICAgKCpxdWV1ZWNvbW1hbmQpKCkgLSBwcmltYXJ5IGNhbGxiYWNrIHRoYXQgdGhlIG1pZCBsZXZlbCB1c2VzIHRvIGluamVjdAorICAgICAgICAgICAgICAgICAgIFNDU0kgY29tbWFuZHMgaW50byBhbiBMTEQuCitUaGUgc3RydWN0dXJlIGlzIGRlZmluZWQgYW5kIGNvbW1lbnRlZCBpbiBpbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmgKKworKioqIEluIGV4dHJlbWUgc2l0dWF0aW9ucyBhIHNpbmdsZSBkcml2ZXIgbWF5IGhhdmUgc2V2ZXJhbCBpbnN0YW5jZXMKKyAgICBpZiBpdCBjb250cm9scyBzZXZlcmFsIGRpZmZlcmVudCBjbGFzc2VzIG9mIGhhcmR3YXJlIChlLmcuIGFuIExMRAorICAgIHRoYXQgaGFuZGxlcyBib3RoIElTQSBhbmQgUENJIGNhcmRzIGFuZCBoYXMgYSBzZXBhcmF0ZSBpbnN0YW5jZSBvZgorICAgIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgZm9yIGVhY2ggY2xhc3MpLgorCitzdHJ1Y3QgU2NzaV9Ib3N0CistLS0tLS0tLS0tLS0tLS0tCitUaGVyZSBpcyBvbmUgc3RydWN0IFNjc2lfSG9zdCBpbnN0YW5jZSBwZXIgaG9zdCAoSEJBKSB0aGF0IGFuIExMRAorY29udHJvbHMuIFRoZSBzdHJ1Y3QgU2NzaV9Ib3N0IHN0cnVjdHVyZSBoYXMgbWFueSBtZW1iZXJzIGluIGNvbW1vbgord2l0aCAic3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSIuIFdoZW4gYSBuZXcgc3RydWN0IFNjc2lfSG9zdCBpbnN0YW5jZQoraXMgY3JlYXRlZCAoaW4gc2NzaV9ob3N0X2FsbG9jKCkgaW4gaG9zdHMuYykgdGhvc2UgY29tbW9uIG1lbWJlcnMgYXJlCitpbml0aWFsaXplZCBmcm9tIHRoZSBkcml2ZXIncyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGluc3RhbmNlLiBNZW1iZXJzCitvZiBpbnRlcmVzdDoKKyAgICBob3N0X25vICAgICAgLSBzeXN0ZW0gd2lkZSB1bmlxdWUgbnVtYmVyIHRoYXQgaXMgdXNlZCBmb3IgaWRlbnRpZnlpbmcKKyAgICAgICAgICAgICAgICAgICB0aGlzIGhvc3QuIElzc3VlZCBpbiBhc2NlbmRpbmcgb3JkZXIgZnJvbSAwLgorICAgIGNhbl9xdWV1ZSAgICAtIG11c3QgYmUgZ3JlYXRlciB0aGFuIDA7IGRvIG5vdCBzZW5kIG1vcmUgdGhhbiBjYW5fcXVldWUKKyAgICAgICAgICAgICAgICAgICBjb21tYW5kcyB0byB0aGUgYWRhcHRlci4KKyAgICB0aGlzX2lkICAgICAgLSBzY3NpIGlkIG9mIGhvc3QgKHNjc2kgaW5pdGlhdG9yKSBvciAtMSBpZiBub3Qga25vd24KKyAgICBzZ190YWJsZXNpemUgLSBtYXhpbXVtIHNjYXR0ZXIgZ2F0aGVyIGVsZW1lbnRzIGFsbG93ZWQgYnkgaG9zdC4KKyAgICAgICAgICAgICAgICAgICAwIGltcGxpZXMgc2NhdHRlciBnYXRoZXIgbm90IHN1cHBvcnRlZCBieSBob3N0CisgICAgbWF4X3NlY3RvcnMgIC0gbWF4aW11bSBudW1iZXIgb2Ygc2VjdG9ycyAodXN1YWxseSA1MTIgYnl0ZXMpIGFsbG93ZWQKKyAgICAgICAgICAgICAgICAgICBpbiBhIHNpbmdsZSBTQ1NJIGNvbW1hbmQuIFRoZSBkZWZhdWx0IHZhbHVlIG9mIDAgbGVhZHMKKyAgICAgICAgICAgICAgICAgICB0byBhIHNldHRpbmcgb2YgU0NTSV9ERUZBVUxUX01BWF9TRUNUT1JTIChkZWZpbmVkIGluCisgICAgICAgICAgICAgICAgICAgc2NzaV9ob3N0LmgpIHdoaWNoIGlzIGN1cnJlbnRseSBzZXQgdG8gMTAyNC4gU28gZm9yIGEKKyAgICAgICAgICAgICAgICAgICBkaXNrIHRoZSBtYXhpbXVtIHRyYW5zZmVyIHNpemUgaXMgNTEyIEtCIHdoZW4gbWF4X3NlY3RvcnMKKyAgICAgICAgICAgICAgICAgICBpcyBub3QgZGVmaW5lZC4gTm90ZSB0aGF0IHRoaXMgc2l6ZSBtYXkgbm90IGJlIHN1ZmZpY2llbnQKKyAgICAgICAgICAgICAgICAgICBmb3IgZGlzayBmaXJtd2FyZSB1cGxvYWRzLgorICAgIGNtZF9wZXJfbHVuICAtIG1heGltdW0gbnVtYmVyIG9mIGNvbW1hbmRzIHRoYXQgY2FuIGJlIHF1ZXVlZCBvbiBkZXZpY2VzCisgICAgICAgICAgICAgICAgICAgY29udHJvbGxlZCBieSB0aGUgaG9zdC4gT3ZlcnJpZGRlbiBieSBMTEQgY2FsbHMgdG8KKyAgICAgICAgICAgICAgICAgICBzY3NpX2FkanVzdF9xdWV1ZV9kZXB0aCgpLgorICAgIHVuY2hlY2tlZF9pc2FfZG1hIC0gMT0+b25seSB1c2UgYm90dG9tIDE2IE1CIG9mIHJhbSAoSVNBIERNQSBhZGRyZXNzaW5nCisgICAgICAgICAgICAgICAgICAgcmVzdHJpY3Rpb24pLCAwPT5jYW4gdXNlIGZ1bGwgMzIgYml0IChvciBiZXR0ZXIpIERNQQorICAgICAgICAgICAgICAgICAgIGFkZHJlc3Mgc3BhY2UKKyAgICB1c2VfY2x1c3RlcmluZyAtIDE9PlNDU0kgY29tbWFuZHMgaW4gbWlkIGxldmVsJ3MgcXVldWUgY2FuIGJlIG1lcmdlZCwKKyAgICAgICAgICAgICAgICAgICAgIDA9PmRpc2FsbG93IFNDU0kgY29tbWFuZCBtZXJnaW5nCisgICAgaG9zdHQgICAgICAgIC0gcG9pbnRlciB0byBkcml2ZXIncyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGZyb20gd2hpY2gKKyAgICAgICAgICAgICAgICAgICB0aGlzIHN0cnVjdCBTY3NpX0hvc3QgaW5zdGFuY2Ugd2FzIHNwYXduZWQKKyAgICBob3N0dC0+cHJvY19uYW1lICAtIG5hbWUgb2YgTExELiBUaGlzIGlzIHRoZSBkcml2ZXIgbmFtZSB0aGF0IHN5c2ZzIHVzZXMKKyAgICB0cmFuc3BvcnR0ICAgLSBwb2ludGVyIHRvIGRyaXZlcidzIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSBpbnN0YW5jZQorICAgICAgICAgICAgICAgICAgIChpZiBhbnkpLiBGQyBhbmQgU1BJIHRyYW5zcG9ydHMgY3VycmVudGx5IHN1cHBvcnRlZC4KKyAgICBzaF9saXN0ICAgICAgLSBhIGRvdWJsZSBsaW5rZWQgbGlzdCBvZiBwb2ludGVycyB0byBhbGwgc3RydWN0IFNjc2lfSG9zdAorICAgICAgICAgICAgICAgICAgIGluc3RhbmNlcyAoY3VycmVudGx5IG9yZGVyZWQgYnkgYXNjZW5kaW5nIGhvc3Rfbm8pCisgICAgbXlfZGV2aWNlcyAgIC0gYSBkb3VibGUgbGlua2VkIGxpc3Qgb2YgcG9pbnRlcnMgdG8gc3RydWN0IHNjc2lfZGV2aWNlIAorICAgICAgICAgICAgICAgICAgIGluc3RhbmNlcyB0aGF0IGJlbG9uZyB0byB0aGlzIGhvc3QuCisgICAgaG9zdGRhdGFbMF0gIC0gYXJlYSByZXNlcnZlZCBmb3IgTExEIGF0IGVuZCBvZiBzdHJ1Y3QgU2NzaV9Ib3N0LiBTaXplCisgICAgICAgICAgICAgICAgICAgaXMgc2V0IGJ5IHRoZSBzZWNvbmQgYXJndW1lbnQgKG5hbWVkICd4dHJfYnl0ZXMnKSB0bworICAgICAgICAgICAgICAgICAgIHNjc2lfaG9zdF9hbGxvYygpIG9yIHNjc2lfcmVnaXN0ZXIoKS4KKworVGhlIHNjc2lfaG9zdCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBpbiBpbmNsdWRlL3Njc2kvc2NzaV9ob3N0LmgKKworc3RydWN0IHNjc2lfZGV2aWNlCistLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYWxseSwgdGhlcmUgaXMgb25lIGluc3RhbmNlIG9mIHRoaXMgc3RydWN0dXJlIGZvciBlYWNoIFNDU0kgbG9naWNhbCB1bml0CitvbiBhIGhvc3QuIFNjc2kgZGV2aWNlcyBjb25uZWN0ZWQgdG8gYSBob3N0IGFyZSB1bmlxdWVseSBpZGVudGlmaWVkIGJ5IGEKK2NoYW5uZWwgbnVtYmVyLCB0YXJnZXQgaWQgYW5kIGxvZ2ljYWwgdW5pdCBudW1iZXIgKGx1bikuCitUaGUgc3RydWN0dXJlIGlzIGRlZmluZWQgaW4gaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmgKKworc3RydWN0IHNjc2lfY21uZAorLS0tLS0tLS0tLS0tLS0tLQorSW5zdGFuY2VzIG9mIHRoaXMgc3RydWN0dXJlIGNvbnZleSBTQ1NJIGNvbW1hbmRzIHRvIHRoZSBMTEQgYW5kIHJlc3BvbnNlcworYmFjayB0byB0aGUgbWlkIGxldmVsLiBUaGUgU0NTSSBtaWQgbGV2ZWwgd2lsbCBlbnN1cmUgdGhhdCBubyBtb3JlIFNDU0kKK2NvbW1hbmRzIGJlY29tZSBxdWV1ZWQgYWdhaW5zdCB0aGUgTExEIHRoYW4gYXJlIGluZGljYXRlZCBieQorc2NzaV9hZGp1c3RfcXVldWVfZGVwdGgoKSAob3Igc3RydWN0IFNjc2lfSG9zdDo6Y21kX3Blcl9sdW4pLiBUaGVyZSB3aWxsCitiZSBhdCBsZWFzdCBvbmUgaW5zdGFuY2Ugb2Ygc3RydWN0IHNjc2lfY21uZCBhdmFpbGFibGUgZm9yIGVhY2ggU0NTSSBkZXZpY2UuCitNZW1iZXJzIG9mIGludGVyZXN0OgorICAgIGNtbmQgICAgICAgICAtIGFycmF5IGNvbnRhaW5pbmcgU0NTSSBjb21tYW5kCisgICAgY21uZF9sZW4gICAgIC0gbGVuZ3RoIChpbiBieXRlcykgb2YgU0NTSSBjb21tYW5kCisgICAgc2NfZGF0YV9kaXJlY3Rpb24gLSBkaXJlY3Rpb24gb2YgZGF0YSB0cmFuc2ZlciBpbiBkYXRhIHBoYXNlLiBTZWUKKyAgICAgICAgICAgICAgICAiZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24iIGluIGluY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaAorICAgIHJlcXVlc3RfYnVmZmxlbiAtIG51bWJlciBvZiBkYXRhIGJ5dGVzIHRvIHRyYW5zZmVyICgwIGlmIG5vIGRhdGEgcGhhc2UpCisgICAgdXNlX3NnICAgICAgIC0gPT0wIC0+IG5vIHNjYXR0ZXIgZ2F0aGVyIGxpc3QsIGhlbmNlIHRyYW5zZmVyIGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdG8vZnJvbSByZXF1ZXN0X2J1ZmZlcgorICAgICAgICAgICAgICAgICAtID4wIC0+ICBzY2F0dGVyIGdhdGhlciBsaXN0IChhY3R1YWxseSBhbiBhcnJheSkgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdF9idWZmZXIgd2l0aCB1c2Vfc2cgZWxlbWVudHMKKyAgICByZXF1ZXN0X2J1ZmZlciAtIGVpdGhlciBjb250YWlucyBkYXRhIGJ1ZmZlciBvciBzY2F0dGVyIGdhdGhlciBsaXN0CisgICAgICAgICAgICAgICAgICAgICBkZXBlbmRpbmcgb24gdGhlIHNldHRpbmcgb2YgdXNlX3NnLiBTY2F0dGVyIGdhdGhlcgorICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHMgYXJlIGRlZmluZWQgYnkgJ3N0cnVjdCBzY2F0dGVybGlzdCcgZm91bmQKKyAgICAgICAgICAgICAgICAgICAgIGluIGluY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmggLgorICAgIGRvbmUgICAgICAgICAtIGZ1bmN0aW9uIHBvaW50ZXIgdGhhdCBzaG91bGQgYmUgaW52b2tlZCBieSBMTEQgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAgICBTQ1NJIGNvbW1hbmQgaXMgY29tcGxldGVkIChzdWNjZXNzZnVsbHkgb3Igb3RoZXJ3aXNlKS4KKyAgICAgICAgICAgICAgICAgICBTaG91bGQgb25seSBiZSBjYWxsZWQgYnkgYW4gTExEIGlmIHRoZSBMTEQgaGFzIGFjY2VwdGVkCisgICAgICAgICAgICAgICAgICAgdGhlIGNvbW1hbmQgKGkuZS4gcXVldWVjb21tYW5kKCkgcmV0dXJuZWQgb3Igd2lsbCByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAwKS4gVGhlIExMRCBtYXkgaW52b2tlICdkb25lJyAgcHJpb3IgdG8gcXVldWVjb21tYW5kKCkKKyAgICAgICAgICAgICAgICAgICBmaW5pc2hpbmcuCisgICAgcmVzdWx0ICAgICAgIC0gc2hvdWxkIGJlIHNldCBieSBMTEQgcHJpb3IgdG8gY2FsbGluZyAnZG9uZScuIEEgdmFsdWUKKyAgICAgICAgICAgICAgICAgICBvZiAwIGltcGxpZXMgYSBzdWNjZXNzZnVsbHkgY29tcGxldGVkIGNvbW1hbmQgKGFuZCBhbGwKKyAgICAgICAgICAgICAgICAgICBkYXRhIChpZiBhbnkpIGhhcyBiZWVuIHRyYW5zZmVycmVkIHRvIG9yIGZyb20gdGhlIFNDU0kKKyAgICAgICAgICAgICAgICAgICB0YXJnZXQgZGV2aWNlKS4gJ3Jlc3VsdCcgaXMgYSAzMiBiaXQgdW5zaWduZWQgaW50ZWdlciB0aGF0CisgICAgICAgICAgICAgICAgICAgY2FuIGJlIHZpZXdlZCBhcyA0IHJlbGF0ZWQgYnl0ZXMuIFRoZSBTQ1NJIHN0YXR1cyB2YWx1ZSBpcworICAgICAgICAgICAgICAgICAgIGluIHRoZSBMU0IuIFNlZSBpbmNsdWRlL3Njc2kvc2NzaS5oIHN0YXR1c19ieXRlKCksCisgICAgICAgICAgICAgICAgICAgbXNnX2J5dGUoKSwgaG9zdF9ieXRlKCkgYW5kIGRyaXZlcl9ieXRlKCkgbWFjcm9zIGFuZAorICAgICAgICAgICAgICAgICAgIHJlbGF0ZWQgY29uc3RhbnRzLgorICAgIHNlbnNlX2J1ZmZlciAtIGFuIGFycmF5IChtYXhpbXVtIHNpemU6IFNDU0lfU0VOU0VfQlVGRkVSU0laRSBieXRlcykgdGhhdAorICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSB3cml0dGVuIHdoZW4gdGhlIFNDU0kgc3RhdHVzIChMU0Igb2YgJ3Jlc3VsdCcpCisgICAgICAgICAgICAgICAgICAgaXMgc2V0IHRvIENIRUNLX0NPTkRJVElPTiAoMikuIFdoZW4gQ0hFQ0tfQ09ORElUSU9OIGlzCisgICAgICAgICAgICAgICAgICAgc2V0LCBpZiB0aGUgdG9wIG5pYmJsZSBvZiBzZW5zZV9idWZmZXJbMF0gaGFzIHRoZSB2YWx1ZSA3CisgICAgICAgICAgICAgICAgICAgdGhlbiB0aGUgbWlkIGxldmVsIHdpbGwgYXNzdW1lIHRoZSBzZW5zZV9idWZmZXIgYXJyYXkKKyAgICAgICAgICAgICAgICAgICBjb250YWlucyBhIHZhbGlkIFNDU0kgc2Vuc2UgYnVmZmVyOyBvdGhlcndpc2UgdGhlIG1pZAorICAgICAgICAgICAgICAgICAgIGxldmVsIHdpbGwgaXNzdWUgYSBSRVFVRVNUX1NFTlNFIFNDU0kgY29tbWFuZCB0bworICAgICAgICAgICAgICAgICAgIHJldHJpZXZlIHRoZSBzZW5zZSBidWZmZXIuIFRoZSBsYXR0ZXIgc3RyYXRlZ3kgaXMgZXJyb3IKKyAgICAgICAgICAgICAgICAgICBwcm9uZSBpbiB0aGUgcHJlc2VuY2Ugb2YgY29tbWFuZCBxdWV1aW5nIHNvIHRoZSBMTEQgc2hvdWxkCisgICAgICAgICAgICAgICAgICAgYWx3YXlzICJhdXRvLXNlbnNlIi4KKyAgICBkZXZpY2UgICAgICAgLSBwb2ludGVyIHRvIHNjc2lfZGV2aWNlIG9iamVjdCB0aGF0IHRoaXMgY29tbWFuZCBpcworICAgICAgICAgICAgICAgICAgIGFzc29jaWF0ZWQgd2l0aC4KKyAgICByZXNpZCAgICAgICAgLSBhbiBMTEQgc2hvdWxkIHNldCB0aGlzIHNpZ25lZCBpbnRlZ2VyIHRvIHRoZSByZXF1ZXN0ZWQKKyAgICAgICAgICAgICAgICAgICB0cmFuc2ZlciBsZW5ndGggKGkuZS4gJ3JlcXVlc3RfYnVmZmxlbicpIGxlc3MgdGhlIG51bWJlcgorICAgICAgICAgICAgICAgICAgIG9mIGJ5dGVzIHRoYXQgYXJlIGFjdHVhbGx5IHRyYW5zZmVycmVkLiAncmVzaWQnIGlzCisgICAgICAgICAgICAgICAgICAgcHJlc2V0IHRvIDAgc28gYW4gTExEIGNhbiBpZ25vcmUgaXQgaWYgaXQgY2Fubm90IGRldGVjdAorICAgICAgICAgICAgICAgICAgIHVuZGVycnVucyAob3ZlcnJ1bnMgc2hvdWxkIGJlIHJhcmUpLiBJZiBwb3NzaWJsZSBhbiBMTEQKKyAgICAgICAgICAgICAgICAgICBzaG91bGQgc2V0ICdyZXNpZCcgcHJpb3IgdG8gaW52b2tpbmcgJ2RvbmUnLiBUaGUgbW9zdAorICAgICAgICAgICAgICAgICAgIGludGVyZXN0aW5nIGNhc2UgaXMgZGF0YSB0cmFuc2ZlcnMgZnJvbSBhIFNDU0kgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgZGV2aWNlIGRldmljZSAoaS5lLiBSRUFEcykgdGhhdCB1bmRlcnJ1bi4gCisgICAgdW5kZXJmbG93ICAgIC0gTExEIHNob3VsZCBwbGFjZSAoRElEX0VSUk9SIDw8IDE2KSBpbiAncmVzdWx0JyBpZgorICAgICAgICAgICAgICAgICAgIGFjdHVhbCBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgaXMgbGVzcyB0aGFuIHRoaXMKKyAgICAgICAgICAgICAgICAgICBmaWd1cmUuIE5vdCBtYW55IExMRHMgaW1wbGVtZW50IHRoaXMgY2hlY2sgYW5kIHNvbWUgdGhhdAorICAgICAgICAgICAgICAgICAgIGRvIGp1c3Qgb3V0cHV0IGFuIGVycm9yIG1lc3NhZ2UgdG8gdGhlIGxvZyByYXRoZXIgdGhhbgorICAgICAgICAgICAgICAgICAgIHJlcG9ydCBhIERJRF9FUlJPUi4gQmV0dGVyIGZvciBhbiBMTEQgdG8gaW1wbGVtZW50CisgICAgICAgICAgICAgICAgICAgJ3Jlc2lkJy4KKworVGhlIHNjc2lfY21uZCBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBpbiBpbmNsdWRlL3Njc2kvc2NzaV9jbW5kLmgKKworCitMb2NrcworPT09PT0KK0VhY2ggc3RydWN0IFNjc2lfSG9zdCBpbnN0YW5jZSBoYXMgYSBzcGluX2xvY2sgY2FsbGVkIHN0cnVjdCAKK1Njc2lfSG9zdDo6ZGVmYXVsdF9sb2NrIHdoaWNoIGlzIGluaXRpYWxpemVkIGluIHNjc2lfaG9zdF9hbGxvYygpIFtmb3VuZCBpbiAKK2hvc3RzLmNdLiBXaXRoaW4gdGhlIHNhbWUgZnVuY3Rpb24gdGhlIHN0cnVjdCBTY3NpX0hvc3Q6Omhvc3RfbG9jayBwb2ludGVyCitpcyBpbml0aWFsaXplZCB0byBwb2ludCBhdCBkZWZhdWx0X2xvY2sgd2l0aCB0aGUgc2NzaV9hc3NpZ25fbG9jaygpIGZ1bmN0aW9uLgorVGhlcmVhZnRlciBsb2NrIGFuZCB1bmxvY2sgb3BlcmF0aW9ucyBwZXJmb3JtZWQgYnkgdGhlIG1pZCBsZXZlbCB1c2UgdGhlCitzdHJ1Y3QgU2NzaV9Ib3N0Ojpob3N0X2xvY2sgcG9pbnRlci4KKworTExEcyBjYW4gb3ZlcnJpZGUgdGhlIHVzZSBvZiBzdHJ1Y3QgU2NzaV9Ib3N0OjpkZWZhdWx0X2xvY2sgYnkKK3VzaW5nIHNjc2lfYXNzaWduX2xvY2soKS4gVGhlIGVhcmxpZXN0IG9wcG9ydHVuaXR5IHRvIGRvIHRoaXMgd291bGQKK2JlIGluIHRoZSBkZXRlY3QoKSBmdW5jdGlvbiBhZnRlciBpdCBoYXMgaW52b2tlZCBzY3NpX3JlZ2lzdGVyKCkuIEl0Citjb3VsZCBiZSByZXBsYWNlZCBieSBhIGNvYXJzZXIgZ3JhaW4gbG9jayAoZS5nLiBwZXIgZHJpdmVyKSBvciBhCitsb2NrIG9mIGVxdWFsIGdyYW51bGFyaXR5IChpLmUuIHBlciBob3N0KS4gVXNpbmcgZmluZXIgZ3JhaW4gbG9ja3MgCisoZS5nLiBwZXIgU0NTSSBkZXZpY2UpIG1heSBiZSBwb3NzaWJsZSBieSBqdWdnbGluZyBsb2NrcyBpbgorcXVldWVjb21tYW5kKCkuCisKK0F1dG9zZW5zZQorPT09PT09PT09CitBdXRvc2Vuc2UgKG9yIGF1dG8tc2Vuc2UpIGlzIGRlZmluZWQgaW4gdGhlIFNBTS0yIGRvY3VtZW50IGFzICJ0aGUKK2F1dG9tYXRpYyByZXR1cm4gb2Ygc2Vuc2UgZGF0YSB0byB0aGUgYXBwbGljYXRpb24gY2xpZW50IGNvaW5jaWRlbnQKK3dpdGggdGhlIGNvbXBsZXRpb24gb2YgYSBTQ1NJIGNvbW1hbmQiIHdoZW4gYSBzdGF0dXMgb2YgQ0hFQ0sgQ09ORElUSU9OCitvY2N1cnMuIExMRHMgc2hvdWxkIHBlcmZvcm0gYXV0b3NlbnNlLiBUaGlzIHNob3VsZCBiZSBkb25lIHdoZW4gdGhlIExMRAorZGV0ZWN0cyBhIENIRUNLIENPTkRJVElPTiBzdGF0dXMgYnkgZWl0aGVyOiAKKyAgICBhKSBpbnN0cnVjdGluZyB0aGUgU0NTSSBwcm90b2NvbCAoZS5nLiBTQ1NJIFBhcmFsbGVsIEludGVyZmFjZSAoU1BJKSkKKyAgICAgICB0byBwZXJmb3JtIGFuIGV4dHJhIGRhdGEgaW4gcGhhc2Ugb24gc3VjaCByZXNwb25zZXMKKyAgICBiKSBvciwgdGhlIExMRCBpc3N1aW5nIGEgUkVRVUVTVCBTRU5TRSBjb21tYW5kIGl0c2VsZgorCitFaXRoZXIgd2F5LCB3aGVuIGEgc3RhdHVzIG9mIENIRUNLIENPTkRJVElPTiBpcyBkZXRlY3RlZCwgdGhlIG1pZCBsZXZlbAorZGVjaWRlcyB3aGV0aGVyIHRoZSBMTEQgaGFzIHBlcmZvcm1lZCBhdXRvc2Vuc2UgYnkgY2hlY2tpbmcgc3RydWN0IAorc2NzaV9jbW5kOjpzZW5zZV9idWZmZXJbMF0gLiBJZiB0aGlzIGJ5dGUgaGFzIGFuIHVwcGVyIG5pYmJsZSBvZiA3IChvciAweGYpCit0aGVuIGF1dG9zZW5zZSBpcyBhc3N1bWVkIHRvIGhhdmUgdGFrZW4gcGxhY2UuIElmIGl0IGhhcyBhbm90aGVyIHZhbHVlIChhbmQKK3RoaXMgYnl0ZSBpcyBpbml0aWFsaXplZCB0byAwIGJlZm9yZSBlYWNoIGNvbW1hbmQpIHRoZW4gdGhlIG1pZCBsZXZlbCB3aWxsCitpc3N1ZSBhIFJFUVVFU1QgU0VOU0UgY29tbWFuZC4KKworSW4gdGhlIHByZXNlbmNlIG9mIHF1ZXVlZCBjb21tYW5kcyB0aGUgIm5leHVzIiB0aGF0IG1haW50YWlucyBzZW5zZQorYnVmZmVyIGRhdGEgZnJvbSB0aGUgY29tbWFuZCB0aGF0IGZhaWxlZCB1bnRpbCBhIGZvbGxvd2luZyBSRVFVRVNUIFNFTlNFCittYXkgZ2V0IG91dCBvZiBzeW5jaHJvbml6YXRpb24uIFRoaXMgaXMgd2h5IGl0IGlzIGJlc3QgZm9yIHRoZSBMTEQKK3RvIHBlcmZvcm0gYXV0b3NlbnNlLgorCisKK0NoYW5nZXMgc2luY2UgbGsgMi40IHNlcmllcworPT09PT09PT09PT09PT09PT09PT09PT09PT09Citpb19yZXF1ZXN0X2xvY2sgaGFzIGJlZW4gcmVwbGFjZWQgYnkgc2V2ZXJhbCBmaW5lciBncmFpbmVkIGxvY2tzLiBUaGUgbG9jayAKK3JlbGV2YW50IHRvIExMRHMgaXMgc3RydWN0IFNjc2lfSG9zdDo6aG9zdF9sb2NrIGFuZCB0aGVyZSBpcworb25lIHBlciBTQ1NJIGhvc3QuCisKK1RoZSBvbGRlciBlcnJvciBoYW5kbGluZyBtZWNoYW5pc20gaGFzIGJlZW4gcmVtb3ZlZC4gVGhpcyBtZWFucyB0aGUKK0xMRCBpbnRlcmZhY2UgZnVuY3Rpb25zIGFib3J0KCkgYW5kIHJlc2V0KCkgaGF2ZSBiZWVuIHJlbW92ZWQuCitUaGUgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZTo6dXNlX25ld19laF9jb2RlIGZsYWcgaGFzIGJlZW4gcmVtb3ZlZC4KKworSW4gdGhlIDIuNCBzZXJpZXMgdGhlIFNDU0kgc3Vic3lzdGVtIGNvbmZpZ3VyYXRpb24gZGVzY3JpcHRpb25zIHdlcmUgCithZ2dyZWdhdGVkIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gZGVzY3JpcHRpb25zIGZyb20gYWxsIG90aGVyIExpbnV4IAorc3Vic3lzdGVtcyBpbiB0aGUgRG9jdW1lbnRhdGlvbi9Db25maWd1cmUuaGVscCBmaWxlLiBJbiB0aGUgMi42IHNlcmllcywgCit0aGUgU0NTSSBzdWJzeXN0ZW0gbm93IGhhcyBpdHMgb3duIChtdWNoIHNtYWxsZXIpIGRyaXZlcnMvc2NzaS9LY29uZmlnCitmaWxlIHRoYXQgY29udGFpbnMgYm90aCBjb25maWd1cmF0aW9uIGFuZCBoZWxwIGluZm9ybWF0aW9uLgorCitzdHJ1Y3QgU0hUIGhhcyBiZWVuIHJlbmFtZWQgdG8gc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZS4KKworQWRkaXRpb24gb2YgdGhlICJob3RwbHVnIGluaXRpYWxpemF0aW9uIG1vZGVsIiBhbmQgbWFueSBleHRyYSBmdW5jdGlvbnMKK3RvIHN1cHBvcnQgaXQuCisKKworQ3JlZGl0cworPT09PT09PQorVGhlIGZvbGxvd2luZyBwZW9wbGUgaGF2ZSBjb250cmlidXRlZCB0byB0aGlzIGRvY3VtZW50OgorICAgICAgICBNaWtlIEFuZGVyc29uIDxhbmRtaWtlIGF0IHVzIGRvdCBpYm0gZG90IGNvbT4KKyAgICAgICAgSmFtZXMgQm90dG9tbGV5IDxKYW1lcyBkb3QgQm90dG9tbGV5IGF0IHN0ZWVsZXllIGRvdCBjb20+IAorICAgICAgICBQYXRyaWNrIE1hbnNmaWVsZCA8cGF0bWFucyBhdCB1cyBkb3QgaWJtIGRvdCBjb20+IAorICAgICAgICBDaHJpc3RvcGggSGVsbHdpZyA8aGNoIGF0IGluZnJhZGVhZCBkb3Qgb3JnPgorICAgICAgICBEb3VnIExlZGZvcmQgPGRsZWRmb3JkIGF0IHJlZGhhdCBkb3QgY29tPgorICAgICAgICBBbmRyaWVzIEJyb3V3ZXIgPEFuZHJpZXMgZG90IEJyb3V3ZXIgYXQgY3dpIGRvdCBubD4KKyAgICAgICAgUmFuZHkgRHVubGFwIDxyZGR1bmxhcCBhdCBvc2RsIGRvdCBvcmc+CisgICAgICAgIEFsYW4gU3Rlcm4gPHN0ZXJuIGF0IHJvd2xhbmQgZG90IGhhcnZhcmQgZG90IGVkdT4KKworCitEb3VnbGFzIEdpbGJlcnQKK2RnaWxiZXJ0IGF0IGludGVybG9nIGRvdCBjb20KKzIxc3QgU2VwdGVtYmVyIDIwMDQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9zdC50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZTMwY2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc3QudHh0CkBAIC0wLDAgKzEsNDk5IEBACitUaGlzIGZpbGUgY29udGFpbnMgYnJpZWYgaW5mb3JtYXRpb24gYWJvdXQgdGhlIFNDU0kgdGFwZSBkcml2ZXIuCitUaGUgZHJpdmVyIGlzIGN1cnJlbnRseSBtYWludGFpbmVkIGJ5IEthaSBN5Gtpc2FyYSAoZW1haWwKK0thaS5NYWtpc2FyYUBrb2x1bWJ1cy5maSkKKworTGFzdCBtb2RpZmllZDogTW9uIE1hciAgNyAyMToxNDo0NCAyMDA1IGJ5IGthaS5tYWtpc2FyYQorCisKK0JBU0lDUworCitUaGUgZHJpdmVyIGlzIGdlbmVyaWMsIGkuZS4sIGl0IGRvZXMgbm90IGNvbnRhaW4gYW55IGNvZGUgdGFpbG9yZWQKK3RvIGFueSBzcGVjaWZpYyB0YXBlIGRyaXZlLiBUaGUgdGFwZSBwYXJhbWV0ZXJzIGNhbiBiZSBzcGVjaWZpZWQgd2l0aAorb25lIG9mIHRoZSBmb2xsb3dpbmcgdGhyZWUgbWV0aG9kczoKKworMS4gRWFjaCB1c2VyIGNhbiBzcGVjaWZ5IHRoZSB0YXBlIHBhcmFtZXRlcnMgaGUvc2hlIHdhbnRzIHRvIHVzZQorZGlyZWN0bHkgd2l0aCBpb2N0bHMuIFRoaXMgaXMgYWRtaW5pc3RyYXRpdmVseSBhIHZlcnkgc2ltcGxlIGFuZAorZmxleGlibGUgbWV0aG9kIGFuZCBhcHBsaWNhYmxlIHRvIHNpbmdsZS11c2VyIHdvcmtzdGF0aW9ucy4gSG93ZXZlciwKK2luIGEgbXVsdGl1c2VyIGVudmlyb25tZW50IHRoZSBuZXh0IHVzZXIgZmluZHMgdGhlIHRhcGUgcGFyYW1ldGVycyBpbgorc3RhdGUgdGhlIHByZXZpb3VzIHVzZXIgbGVmdCB0aGVtLgorCisyLiBUaGUgc3lzdGVtIG1hbmFnZXIgKHJvb3QpIGNhbiBkZWZpbmUgZGVmYXVsdCB2YWx1ZXMgZm9yIHNvbWUgdGFwZQorcGFyYW1ldGVycywgbGlrZSBibG9jayBzaXplIGFuZCBkZW5zaXR5IHVzaW5nIHRoZSBNVFNFVERSVkJVRkZFUiBpb2N0bC4KK1RoZXNlIHBhcmFtZXRlcnMgY2FuIGJlIHByb2dyYW1tZWQgdG8gY29tZSBpbnRvIGVmZmVjdCBlaXRoZXIgd2hlbiBhCituZXcgdGFwZSBpcyBsb2FkZWQgaW50byB0aGUgZHJpdmUgb3IgaWYgd3JpdGluZyBiZWdpbnMgYXQgdGhlCitiZWdpbm5pbmcgb2YgdGhlIHRhcGUuIFRoZSBzZWNvbmQgbWV0aG9kIGlzIGFwcGxpY2FibGUgaWYgdGhlIHRhcGUKK2RyaXZlIHBlcmZvcm1zIGF1dG8tZGV0ZWN0aW9uIG9mIHRoZSB0YXBlIGZvcm1hdCB3ZWxsIChsaWtlIHNvbWUKK1FJQy1kcml2ZXMpLiBUaGUgcmVzdWx0IGlzIHRoYXQgYW55IHRhcGUgY2FuIGJlIHJlYWQsIHdyaXRpbmcgY2FuIGJlCitjb250aW51ZWQgdXNpbmcgZXhpc3RpbmcgZm9ybWF0LCBhbmQgdGhlIGRlZmF1bHQgZm9ybWF0IGlzIHVzZWQgaWYKK3RoZSB0YXBlIGlzIHJld3JpdHRlbiBmcm9tIHRoZSBiZWdpbm5pbmcgKG9yIGEgbmV3IHRhcGUgaXMgd3JpdHRlbgorZm9yIHRoZSBmaXJzdCB0aW1lKS4gVGhlIGZpcnN0IG1ldGhvZCBpcyBhcHBsaWNhYmxlIGlmIHRoZSBkcml2ZQorZG9lcyBub3QgcGVyZm9ybSBhdXRvLWRldGVjdGlvbiB3ZWxsIGVub3VnaCBhbmQgdGhlcmUgaXMgYSBzaW5nbGUKKyJzZW5zaWJsZSIgbW9kZSBmb3IgdGhlIGRldmljZS4gQW4gZXhhbXBsZSBpcyBhIERBVCBkcml2ZSB0aGF0IGlzCit1c2VkIG9ubHkgaW4gdmFyaWFibGUgYmxvY2sgbW9kZSAoSSBkb24ndCBrbm93IGlmIHRoaXMgaXMgc2Vuc2libGUKK29yIG5vdCA6LSkuCisKK1RoZSB1c2VyIGNhbiBvdmVycmlkZSB0aGUgcGFyYW1ldGVycyBkZWZpbmVkIGJ5IHRoZSBzeXN0ZW0KK21hbmFnZXIuIFRoZSBjaGFuZ2VzIHBlcnNpc3QgdW50aWwgdGhlIGRlZmF1bHRzIGFnYWluIGNvbWUgaW50bworZWZmZWN0LgorCiszLiBCeSBkZWZhdWx0LCB1cCB0byBmb3VyIG1vZGVzIGNhbiBiZSBkZWZpbmVkIGFuZCBzZWxlY3RlZCB1c2luZyB0aGUgbWlub3IKK251bWJlciAoYml0cyA1IGFuZCA2KS4gVGhlIG51bWJlciBvZiBtb2RlcyBjYW4gYmUgY2hhbmdlZCBieSBjaGFuZ2luZworU1RfTkJSX01PREVfQklUUyBpbiBzdC5oLiBNb2RlIDAgY29ycmVzcG9uZHMgdG8gdGhlIGRlZmF1bHRzIGRpc2N1c3NlZAorYWJvdmUuIEFkZGl0aW9uYWwgbW9kZXMgYXJlIGRvcm1hbnQgdW50aWwgdGhleSBhcmUgZGVmaW5lZCBieSB0aGUKK3N5c3RlbSBtYW5hZ2VyIChyb290KS4gV2hlbiBzcGVjaWZpY2F0aW9uIG9mIGEgbmV3IG1vZGUgaXMgc3RhcnRlZCwKK3RoZSBjb25maWd1cmF0aW9uIG9mIG1vZGUgMCBpcyB1c2VkIHRvIHByb3ZpZGUgYSBzdGFydGluZyBwb2ludCBmb3IKK2RlZmluaXRpb24gb2YgdGhlIG5ldyBtb2RlLgorCitVc2luZyB0aGUgbW9kZXMgYWxsb3dzIHRoZSBzeXN0ZW0gbWFuYWdlciB0byBnaXZlIHRoZSB1c2VycyBjaG9pY2VzCitvdmVyIHNvbWUgb2YgdGhlIGJ1ZmZlcmluZyBwYXJhbWV0ZXJzIG5vdCBkaXJlY3RseSBhY2Nlc3NpYmxlIHRvIHRoZQordXNlcnMgKGJ1ZmZlcmVkIGFuZCBhc3luY2hyb25vdXMgd3JpdGVzKS4gVGhlIG1vZGVzIGFsc28gYWxsb3cgY2hvaWNlcworYmV0d2VlbiBmb3JtYXRzIGluIG11bHRpLXRhcGUgb3BlcmF0aW9ucyAodGhlIGV4cGxpY2l0bHkgb3ZlcnJpZGRlbgorcGFyYW1ldGVycyBhcmUgcmVzZXQgd2hlbiBhIG5ldyB0YXBlIGlzIGxvYWRlZCkuCisKK0lmIG1vcmUgdGhhbiBvbmUgbW9kZSBpcyB1c2VkLCBhbGwgbW9kZXMgc2hvdWxkIGNvbnRhaW4gZGVmaW5pdGlvbnMKK2ZvciB0aGUgc2FtZSBzZXQgb2YgcGFyYW1ldGVycy4KKworTWFueSBVbmljZXMgY29udGFpbiBpbnRlcm5hbCB0YWJsZXMgdGhhdCBhc3NvY2lhdGUgZGlmZmVyZW50IG1vZGVzIHRvCitzdXBwb3J0ZWQgZGV2aWNlcy4gVGhlIExpbnV4IFNDU0kgdGFwZSBkcml2ZXIgZG9lcyBub3QgY29udGFpbiBzdWNoCit0YWJsZXMgKGFuZCB3aWxsIG5vdCBkbyB0aGF0IGluIGZ1dHVyZSkuIEluc3RlYWQgb2YgdGhhdCwgYSB1dGlsaXR5Citwcm9ncmFtIGNhbiBiZSBtYWRlIHRoYXQgZmV0Y2hlcyB0aGUgaW5xdWlyeSBkYXRhIHNlbnQgYnkgdGhlIGRldmljZSwKK3NjYW5zIGl0cyBkYXRhYmFzZSwgYW5kIHNldHMgdXAgdGhlIG1vZGVzIHVzaW5nIHRoZSBpb2N0bHMuIEFub3RoZXIKK2FsdGVybmF0aXZlIGlzIHRvIG1ha2UgYSBzbWFsbCBzY3JpcHQgdGhhdCB1c2VzIG10IHRvIHNldCB0aGUgZGVmYXVsdHMKK3RhaWxvcmVkIHRvIHRoZSBzeXN0ZW0uCisKK1RoZSBkcml2ZXIgc3VwcG9ydHMgZml4ZWQgYW5kIHZhcmlhYmxlIGJsb2NrIHNpemUgKHdpdGhpbiBidWZmZXIKK2xpbWl0cykuIEJvdGggdGhlIGF1dG8tcmV3aW5kIChtaW5vciBlcXVhbHMgZGV2aWNlIG51bWJlcikgYW5kCitub24tcmV3aW5kIGRldmljZXMgKG1pbm9yIGlzIDEyOCArIGRldmljZSBudW1iZXIpIGFyZSBpbXBsZW1lbnRlZC4KKworSW4gdmFyaWFibGUgYmxvY2sgbW9kZSwgdGhlIGJ5dGUgY291bnQgaW4gd3JpdGUoKSBkZXRlcm1pbmVzIHRoZSBzaXplCitvZiB0aGUgcGh5c2ljYWwgYmxvY2sgb24gdGFwZS4gV2hlbiByZWFkaW5nLCB0aGUgZHJpdmUgcmVhZHMgdGhlIG5leHQKK3RhcGUgYmxvY2sgYW5kIHJldHVybnMgdG8gdGhlIHVzZXIgdGhlIGRhdGEgaWYgdGhlIHJlYWQoKSBieXRlIGNvdW50CitpcyBhdCBsZWFzdCB0aGUgYmxvY2sgc2l6ZS4gT3RoZXJ3aXNlLCBlcnJvciBFTk9NRU0gaXMgcmV0dXJuZWQuCisKK0luIGZpeGVkIGJsb2NrIG1vZGUsIHRoZSBkYXRhIHRyYW5zZmVyIGJldHdlZW4gdGhlIGRyaXZlIGFuZCB0aGUKK2RyaXZlciBpcyBpbiBtdWx0aXBsZXMgb2YgdGhlIGJsb2NrIHNpemUuIFRoZSB3cml0ZSgpIGJ5dGUgY291bnQgbXVzdAorYmUgYSBtdWx0aXBsZSBvZiB0aGUgYmxvY2sgc2l6ZS4gVGhpcyBpcyBub3QgcmVxdWlyZWQgd2hlbiByZWFkaW5nIGJ1dAorbWF5IGJlIGFkdmlzYWJsZSBmb3IgcG9ydGFiaWxpdHkuCisKK1N1cHBvcnQgaXMgcHJvdmlkZWQgZm9yIGNoYW5naW5nIHRoZSB0YXBlIHBhcnRpdGlvbiBhbmQgcGFydGl0aW9uaW5nCitvZiB0aGUgdGFwZSB3aXRoIG9uZSBvciB0d28gcGFydGl0aW9ucy4gQnkgZGVmYXVsdCBzdXBwb3J0IGZvcgorcGFydGl0aW9uZWQgdGFwZSBpcyBkaXNhYmxlZCBmb3IgZWFjaCBkcml2ZXIgYW5kIGl0IGNhbiBiZSBlbmFibGVkCit3aXRoIHRoZSBpb2N0bCBNVFNFVERSVkJVRkZFUi4KKworQnkgZGVmYXVsdCB0aGUgZHJpdmVyIHdyaXRlcyBvbmUgZmlsZW1hcmsgd2hlbiB0aGUgZGV2aWNlIGlzIGNsb3NlZCBhZnRlcgord3JpdGluZyBhbmQgdGhlIGxhc3Qgb3BlcmF0aW9uIGhhcyBiZWVuIGEgd3JpdGUuIFR3byBmaWxlbWFya3MgY2FuIGJlCitvcHRpb25hbGx5IHdyaXR0ZW4uIEluIGJvdGggY2FzZXMgZW5kIG9mIGRhdGEgaXMgc2lnbmlmaWVkIGJ5CityZXR1cm5pbmcgemVybyBieXRlcyBmb3IgdHdvIGNvbnNlY3V0aXZlIHJlYWRzLgorCitJZiByZXdpbmQsIG9mZmxpbmUsIGJzZiwgb3Igc2VlayBpcyBkb25lIGFuZCBwcmV2aW91cyB0YXBlIG9wZXJhdGlvbiB3YXMKK3dyaXRlLCBhIGZpbGVtYXJrIGlzIHdyaXR0ZW4gYmVmb3JlIG1vdmluZyB0YXBlLgorCitUaGUgY29tcGlsZSBvcHRpb25zIGFyZSBkZWZpbmVkIGluIHRoZSBmaWxlIGxpbnV4L2RyaXZlcnMvc2NzaS9zdF9vcHRpb25zLmguCisKKzQuIElmIHRoZSBvcGVuIG9wdGlvbiBPX05PTkJMT0NLIGlzIHVzZWQsIG9wZW4gc3VjY2VlZHMgZXZlbiBpZiB0aGUKK2RyaXZlIGlzIG5vdCByZWFkeS4gSWYgT19OT05CTE9DSyBpcyBub3QgdXNlZCwgdGhlIGRyaXZlciB3YWl0cyBmb3IKK3RoZSBkcml2ZSB0byBiZWNvbWUgcmVhZHkuIElmIHRoaXMgZG9lcyBub3QgaGFwcGVuIGluIFNUX0JMT0NLX1NFQ09ORFMKK3NlY29uZHMsIG9wZW4gZmFpbHMgd2l0aCB0aGUgZXJybm8gdmFsdWUgRUlPLiBXaXRoIE9fTk9OQkxPQ0sgdGhlCitkZXZpY2UgY2FuIGJlIG9wZW5lZCBmb3Igd3JpdGluZyBldmVuIGlmIHRoZXJlIGlzIGEgd3JpdGUgcHJvdGVjdGVkCit0YXBlIGluIHRoZSBkcml2ZSAoY29tbWFuZHMgdHJ5aW5nIHRvIHdyaXRlIHNvbWV0aGluZyByZXR1cm4gZXJyb3IgaWYKK2F0dGVtcHRlZCkuCisKKworTUlOT1IgTlVNQkVSUworCitUaGUgdGFwZSBkcml2ZXIgY3VycmVudGx5IHN1cHBvcnRzIDEyOCBkcml2ZXMgYnkgZGVmYXVsdC4gVGhpcyBudW1iZXIKK2NhbiBiZSBpbmNyZWFzZWQgYnkgZWRpdGluZyBzdC5oIGFuZCByZWNvbXBpbGluZyB0aGUgZHJpdmVyIGlmCituZWNlc3NhcnkuIFRoZSB1cHBlciBsaW1pdCBpcyAyXjE3IGRyaXZlcyBpZiA0IG1vZGVzIGZvciBlYWNoIGRyaXZlCithcmUgdXNlZC4KKworVGhlIG1pbm9yIG51bWJlcnMgY29uc2lzdCBvZiB0aGUgZm9sbG93aW5nIGJpdCBmaWVsZHM6CisKK2Rldl91cHBlciBub24tcmV3IG1vZGUgZGV2LWxvd2VyCisgIDIwIC0gIDggICAgIDcgICAgNiA1ICA0ICAgICAgMAorVGhlIG5vbi1yZXdpbmQgYml0IGlzIGFsd2F5cyBiaXQgNyAodGhlIHVwcGVybW9zdCBiaXQgaW4gdGhlIGxvd2VybW9zdAorYnl0ZSkuIFRoZSBiaXRzIGRlZmluaW5nIHRoZSBtb2RlIGFyZSBiZWxvdyB0aGUgbm9uLXJld2luZCBiaXQuIFRoZQorcmVtYWluaW5nIGJpdHMgZGVmaW5lIHRoZSB0YXBlIGRldmljZSBudW1iZXIuIFRoaXMgbnVtYmVyaW5nIGlzCitiYWNrd2FyZCBjb21wYXRpYmxlIHdpdGggdGhlIG51bWJlcmluZyB1c2VkIHdoZW4gdGhlIG1pbm9yIG51bWJlciB3YXMKK29ubHkgOCBiaXRzIHdpZGUuCisKKworU1lTRlMgU1VQUE9SVAorCitUaGUgZHJpdmVyIGNyZWF0ZXMgdGhlIGRpcmVjdG9yeSAvc3lzL2NsYXNzL3Njc2lfdGFwZSBhbmQgcG9wdWxhdGVzIGl0IHdpdGgKK2RpcmVjdG9yaWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGV4aXN0aW5nIHRhcGUgZGV2aWNlcy4gVGhlcmUgYXJlIGF1dG9yZXdpbmQKK2FuZCBub24tcmV3aW5kIGVudHJpZXMgZm9yIGVhY2ggbW9kZS4gVGhlIG5hbWVzIGFyZSBzdHh5IGFuZCBuc3R4eSwgd2hlcmUgeAoraXMgdGhlIHRhcGUgbnVtYmVyIGFuZCB5IGEgY2hhcmFjdGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1vZGUgKG5vbmUsIGwsIG0sCithKS4gRm9yIGV4YW1wbGUsIHRoZSBkaXJlY3RvcmllcyBmb3IgdGhlIGZpcnN0IHRhcGUgZGV2aWNlIGFyZSAoYXNzdW1pbmcgZm91cgorbW9kZXMpOiBzdDAgIG5zdDAgIHN0MGwgIG5zdDBsICBzdDBtICBuc3QwbSAgc3QwYSAgbnN0MGEuCisKK0VhY2ggZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBlbnRyaWVzOiBkZWZhdWx0X2Jsa3NpemUgIGRlZmF1bHRfY29tcHJlc3Npb24KK2RlZmF1bHRfZGVuc2l0eSAgZGVmaW5lZCAgZGV2ICBkZXZpY2UgIGRyaXZlci4gVGhlIGZpbGUgJ2RlZmluZWQnIGNvbnRhaW5zIDEKK2lmIHRoZSBtb2RlIGlzIGRlZmluZWQgYW5kIHplcm8gaWYgbm90IGRlZmluZWQuIFRoZSBmaWxlcyAnZGVmYXVsdF8qJyBjb250YWluCit0aGUgZGVmYXVsdHMgc2V0IGJ5IHRoZSB1c2VyLiBUaGUgdmFsdWUgLTEgbWVhbnMgdGhlIGRlZmF1bHQgaXMgbm90IHNldC4gVGhlCitmaWxlICdkZXYnIGNvbnRhaW5zIHRoZSBkZXZpY2UgbnVtYmVycyBjb3JyZXNwb25kaW5nIHRvIHRoaXMgZGV2aWNlLiBUaGUgbGlua3MKKydkZXZpY2UnIGFuZCAnZHJpdmVyJyBwb2ludCB0byB0aGUgU0NTSSBkZXZpY2UgYW5kIGRyaXZlciBlbnRyaWVzLgorCitBIGxpbmsgbmFtZWQgJ3RhcGUnIGlzIG1hZGUgZnJvbSB0aGUgU0NTSSBkZXZpY2UgZGlyZWN0b3J5IHRvIHRoZSBjbGFzcworZGlyZWN0b3J5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1vZGUgMCBhdXRvLXJld2luZCBkZXZpY2UgKGUuZy4sIHN0MCkuIAorCisKK0JTRCBBTkQgU1lTIFYgU0VNQU5USUNTCisKK1RoZSB1c2VyIGNhbiBjaG9vc2UgYmV0d2VlbiB0aGVzZSB0d28gYmVoYXZpb3VycyBvZiB0aGUgdGFwZSBkcml2ZXIgYnkKK2RlZmluaW5nIHRoZSB2YWx1ZSBvZiB0aGUgc3ltYm9sIFNUX1NZU1YuIFRoZSBzZW1hbnRpY3MgZGlmZmVyIHdoZW4gYQorZmlsZSBiZWluZyByZWFkIGlzIGNsb3NlZC4gVGhlIEJTRCBzZW1hbnRpY3MgbGVhdmVzIHRoZSB0YXBlIHdoZXJlIGl0CitjdXJyZW50bHkgaXMgd2hlcmVhcyB0aGUgU1lTIFYgc2VtYW50aWNzIG1vdmVzIHRoZSB0YXBlIHBhc3QgdGhlIG5leHQKK2ZpbGVtYXJrIHVubGVzcyB0aGUgZmlsZW1hcmsgaGFzIGp1c3QgYmVlbiBjcm9zc2VkLgorCitUaGUgZGVmYXVsdCBpcyBCU0Qgc2VtYW50aWNzLgorCisKK0JVRkZFUklORworCitUaGUgZHJpdmVyIHRyaWVzIHRvIGRvIHRyYW5zZmVycyBkaXJlY3RseSB0by9mcm9tIHVzZXIgc3BhY2UuIElmIHRoaXMKK2lzIG5vdCBwb3NzaWJsZSwgYSBkcml2ZXIgYnVmZmVyIGFsbG9jYXRlZCBhdCBydW4tdGltZSBpcyB1c2VkLiBJZgorZGlyZWN0IGkvbyBpcyBub3QgcG9zc2libGUgZm9yIHRoZSB3aG9sZSB0cmFuc2ZlciwgdGhlIGRyaXZlciBidWZmZXIKK2lzIHVzZWQgKGkuZS4sIGJvdW5jZSBidWZmZXJzIGZvciBpbmRpdmlkdWFsIHBhZ2VzIGFyZSBub3QKK3VzZWQpLiBEaXJlY3QgaS9vIGNhbiBiZSBpbXBvc3NpYmxlIGJlY2F1c2Ugb2Ygc2V2ZXJhbCByZWFzb25zLCBlLmcuOgorLSBvbmUgb3IgbW9yZSBwYWdlcyBhcmUgYXQgYWRkcmVzc2VzIG5vdCByZWFjaGFibGUgYnkgdGhlIEhCQQorLSB0aGUgbnVtYmVyIG9mIHBhZ2VzIGluIHRoZSB0cmFuc2ZlciBleGNlZWRzIHRoZSBudW1iZXIgb2YKKyAgc2NhdHRlci9nYXRoZXIgc2VnbWVudHMgcGVybWl0dGVkIGJ5IHRoZSBIQkEKKy0gb25lIG9yIG1vcmUgcGFnZXMgY2FuJ3QgYmUgbG9ja2VkIGludG8gbWVtb3J5IChzaG91bGQgbm90IGhhcHBlbiBpbgorICBhbnkgcmVhc29uYWJsZSBzaXR1YXRpb24pCisKK1RoZSBzaXplIG9mIHRoZSBkcml2ZXIgYnVmZmVycyBpcyBhbHdheXMgYXQgbGVhc3Qgb25lIHRhcGUgYmxvY2suIEluIGZpeGVkCitibG9jayBtb2RlLCB0aGUgbWluaW11bSBidWZmZXIgc2l6ZSBpcyBkZWZpbmVkIChpbiAxMDI0IGJ5dGUgdW5pdHMpIGJ5CitTVF9GSVhFRF9CVUZGRVJfQkxPQ0tTLiBXaXRoIHNtYWxsIGJsb2NrIHNpemUgdGhpcyBhbGxvd3MgYnVmZmVyaW5nIG9mCitzZXZlcmFsIGJsb2NrcyBhbmQgdXNpbmcgb25lIFNDU0kgcmVhZCBvciB3cml0ZSB0byB0cmFuc2ZlciBhbGwgb2YgdGhlCitibG9ja3MuIEJ1ZmZlcmluZyBvZiBkYXRhIGFjcm9zcyB3cml0ZSBjYWxscyBpbiBmaXhlZCBibG9jayBtb2RlIGlzCithbGxvd2VkIGlmIFNUX0JVRkZFUl9XUklURVMgaXMgbm9uLXplcm8gYW5kIGRpcmVjdCBpL28gaXMgbm90IHVzZWQuCitCdWZmZXIgYWxsb2NhdGlvbiB1c2VzIGNodW5rcyBvZiBtZW1vcnkgaGF2aW5nIHNpemVzIDJebiAqIChwYWdlCitzaXplKS4gQmVjYXVzZSBvZiB0aGlzIHRoZSBhY3R1YWwgYnVmZmVyIHNpemUgbWF5IGJlIGxhcmdlciB0aGFuIHRoZQorbWluaW11bSBhbGxvd2FibGUgYnVmZmVyIHNpemUuCisKK05PVEUgdGhhdCBpZiBkaXJlY3QgaS9vIGlzIHVzZWQsIHRoZSBzbWFsbCB3cml0ZXMgYXJlIG5vdCBidWZmZXJlZC4gVGhpcyBtYXkKK2NhdXNlIGEgc3VycHJpc2Ugd2hlbiBtb3ZpbmcgZnJvbSAyLjQuIFRoZXJlIHNtYWxsIHdyaXRlcyAoZS5nLiwgdGFyIHdpdGhvdXQKKy1iIG9wdGlvbikgbWF5IGhhdmUgaGFkIGdvb2QgdGhyb3VnaHB1dCBidXQgdGhpcyBpcyBub3QgdHJ1ZSBhbnkgbW9yZSB3aXRoCisyLjYuIERpcmVjdCBpL28gY2FuIGJlIHR1cm5lZCBvZmYgdG8gc29sdmUgdGhpcyBwcm9ibGVtIGJ1dCBhIGJldHRlciBzb2x1dGlvbgoraXMgdG8gdXNlIGJpZ2dlciB3cml0ZSgpIGJ5dGUgY291bnRzIChlLmcuLCB0YXIgLWIgNjQpLgorCitBc3luY2hyb25vdXMgd3JpdGluZy4gV3JpdGluZyB0aGUgYnVmZmVyIGNvbnRlbnRzIHRvIHRoZSB0YXBlIGlzCitzdGFydGVkIGFuZCB0aGUgd3JpdGUgY2FsbCByZXR1cm5zIGltbWVkaWF0ZWx5LiBUaGUgc3RhdHVzIGlzIGNoZWNrZWQKK2F0IHRoZSBuZXh0IHRhcGUgb3BlcmF0aW9uLiBBc3luY2hyb25vdXMgd3JpdGVzIGFyZSBub3QgZG9uZSB3aXRoCitkaXJlY3QgaS9vIGFuZCBub3QgaW4gZml4ZWQgYmxvY2sgbW9kZS4KKworQnVmZmVyZWQgd3JpdGVzIGFuZCBhc3luY2hyb25vdXMgd3JpdGVzIG1heSBpbiBzb21lIHJhcmUgY2FzZXMgY2F1c2UKK3Byb2JsZW1zIGluIG11bHRpdm9sdW1lIG9wZXJhdGlvbnMgaWYgdGhlcmUgaXMgbm90IGVub3VnaCBzcGFjZSBvbiB0aGUKK3RhcGUgYWZ0ZXIgdGhlIGVhcmx5LXdhcm5pbmcgbWFyayB0byBmbHVzaCB0aGUgZHJpdmVyIGJ1ZmZlci4KKworUmVhZCBhaGVhZCBmb3IgZml4ZWQgYmxvY2sgbW9kZSAoU1RfUkVBRF9BSEVBRCkuIEZpbGxpbmcgdGhlIGJ1ZmZlciBpcworYXR0ZW1wdGVkIGV2ZW4gaWYgdGhlIHVzZXIgZG9lcyBub3Qgd2FudCB0byBnZXQgYWxsIG9mIHRoZSBkYXRhIGF0Cit0aGlzIHJlYWQgY29tbWFuZC4gU2hvdWxkIGJlIGRpc2FibGVkIGZvciB0aG9zZSBkcml2ZXMgdGhhdCBkb24ndCBsaWtlCithIGZpbGVtYXJrIHRvIHRydW5jYXRlIGEgcmVhZCByZXF1ZXN0IG9yIHRoYXQgZG9uJ3QgbGlrZSBiYWNrc3BhY2luZy4KKworU2NhdHRlci9nYXRoZXIgYnVmZmVycyAoYnVmZmVycyB0aGF0IGNvbnNpc3Qgb2YgY2h1bmtzIG5vbi1jb250aWd1b3VzCitpbiB0aGUgcGh5c2ljYWwgbWVtb3J5KSBhcmUgdXNlZCBpZiBjb250aWd1b3VzIGJ1ZmZlcnMgY2FuJ3QgYmUKK2FsbG9jYXRlZC4gVG8gc3VwcG9ydCBhbGwgU0NTSSBhZGFwdGVycyAoaW5jbHVkaW5nIHRob3NlIG5vdAorc3VwcG9ydGluZyBzY2F0dGVyL2dhdGhlciksIGJ1ZmZlciBhbGxvY2F0aW9uIGlzIHVzaW5nIHRoZSBmb2xsb3dpbmcKK3RocmVlIGtpbmRzIG9mIGNodW5rczoKKzEuIFRoZSBpbml0aWFsIHNlZ21lbnQgdGhhdCBpcyB1c2VkIGZvciBhbGwgU0NTSSBhZGFwdGVycyBpbmNsdWRpbmcKK3Rob3NlIG5vdCBzdXBwb3J0aW5nIHNjYXR0ZXIvZ2F0aGVyLiBUaGUgc2l6ZSBvZiB0aGlzIGJ1ZmZlciB3aWxsIGJlCisoUEFHRV9TSVpFIDw8IFNUX0ZJUlNUX09SREVSKSBieXRlcyBpZiB0aGUgc3lzdGVtIGNhbiBnaXZlIGEgY2h1bmsgb2YKK3RoaXMgc2l6ZSAoYW5kIGl0IGlzIG5vdCBsYXJnZXIgdGhhbiB0aGUgYnVmZmVyIHNpemUgc3BlY2lmaWVkIGJ5CitTVF9CVUZGRVJfQkxPQ0tTKS4gSWYgdGhpcyBzaXplIGlzIG5vdCBhdmFpbGFibGUsIHRoZSBkcml2ZXIgaGFsdmVzCit0aGUgc2l6ZSBhbmQgdHJpZXMgYWdhaW4gdW50aWwgdGhlIHNpemUgb2Ygb25lIHBhZ2UuIFRoZSBkZWZhdWx0CitzZXR0aW5ncyBpbiBzdF9vcHRpb25zLmggbWFrZSB0aGUgZHJpdmVyIHRvIHRyeSB0byBhbGxvY2F0ZSBhbGwgb2YgdGhlCitidWZmZXIgYXMgb25lIGNodW5rLgorMi4gVGhlIHNjYXR0ZXIvZ2F0aGVyIHNlZ21lbnRzIHRvIGZpbGwgdGhlIHNwZWNpZmllZCBidWZmZXIgc2l6ZSBhcmUKK2FsbG9jYXRlZCBzbyB0aGF0IGFzIG1hbnkgc2VnbWVudHMgYXMgcG9zc2libGUgYXJlIHVzZWQgYnV0IHRoZSBudW1iZXIKK29mIHNlZ21lbnRzIGRvZXMgbm90IGV4Y2VlZCBTVF9GSVJTVF9TRy4KKzMuIFRoZSByZW1haW5pbmcgc2VnbWVudHMgYmV0d2VlbiBTVF9NQVhfU0cgKG9yIHRoZSBtb2R1bGUgcGFyYW1ldGVyCittYXhfc2dfc2VncykgYW5kIHRoZSBudW1iZXIgb2Ygc2VnbWVudHMgdXNlZCBpbiBwaGFzZXMgMSBhbmQgMgorYXJlIHVzZWQgdG8gZXh0ZW5kIHRoZSBidWZmZXIgYXQgcnVuLXRpbWUgaWYgdGhpcyBpcyBuZWNlc3NhcnkuIFRoZQorbnVtYmVyIG9mIHNjYXR0ZXIvZ2F0aGVyIHNlZ21lbnRzIGFsbG93ZWQgZm9yIHRoZSBTQ1NJIGFkYXB0ZXIgaXMgbm90CitleGNlZWRlZCBpZiBpdCBpcyBzbWFsbGVyIHRoYW4gdGhlIG1heGltdW0gbnVtYmVyIG9mIHNjYXR0ZXIvZ2F0aGVyCitzZWdtZW50cyBzcGVjaWZpZWQuIElmIHRoZSBtYXhpbXVtIG51bWJlciBhbGxvd2VkIGZvciB0aGUgU0NTSSBhZGFwdGVyCitpcyBzbWFsbGVyIHRoYW4gdGhlIG51bWJlciBvZiBzZWdtZW50cyB1c2VkIGluIHBoYXNlcyAxIGFuZCAyLAorZXh0ZW5kaW5nIHRoZSBidWZmZXIgd2lsbCBhbHdheXMgZmFpbC4KKworCitFT00gQkVIQVZJT1VSIFdIRU4gV1JJVElORworCitXaGVuIHRoZSBlbmQgb2YgbWVkaXVtIGVhcmx5IHdhcm5pbmcgaXMgZW5jb3VudGVyZWQsIHRoZSBjdXJyZW50IHdyaXRlCitpcyBmaW5pc2hlZCBhbmQgdGhlIG51bWJlciBvZiBieXRlcyBpcyByZXR1cm5lZC4gVGhlIG5leHQgd3JpdGUKK3JldHVybnMgLTEgYW5kIGVycm5vIGlzIHNldCB0byBFTk9TUEMuIFRvIGVuYWJsZSB3cml0aW5nIGEgdHJhaWxlciwKK3RoZSBuZXh0IHdyaXRlIGlzIGFsbG93ZWQgdG8gcHJvY2VlZCBhbmQsIGlmIHN1Y2Nlc3NmdWwsIHRoZSBudW1iZXIgb2YKK2J5dGVzIGlzIHJldHVybmVkLiBBZnRlciB0aGlzLCAtMSBhbmQgdGhlIG51bWJlciBvZiBieXRlcyBhcmUKK2FsdGVybmF0ZWx5IHJldHVybmVkIHVudGlsIHRoZSBwaHlzaWNhbCBlbmQgb2YgbWVkaXVtIChvciBzb21lIG90aGVyCitlcnJvcikgaXMgZW5jb3VudGVyZWQuCisKKworTU9EVUxFIFBBUkFNRVRFUlMKKworVGhlIGJ1ZmZlciBzaXplLCB3cml0ZSB0aHJlc2hvbGQsIGFuZCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYWxsb2NhdGVkIGJ1ZmZlcnMKK2FyZSBjb25maWd1cmFibGUgd2hlbiB0aGUgZHJpdmVyIGlzIGxvYWRlZCBhcyBhIG1vZHVsZS4gVGhlIGtleXdvcmRzIGFyZToKKworYnVmZmVyX2ticz14eHggICAgICAgICAgICAgdGhlIGJ1ZmZlciBzaXplIGZvciBmaXhlZCBibG9jayBtb2RlIGlzIHNldAorCQkJICAgdG8geHh4IGtpbG9ieXRlcword3JpdGVfdGhyZXNob2xkX2ticz14eHggICAgdGhlIHdyaXRlIHRocmVzaG9sZCBpbiBraWxvYnl0ZXMgc2V0IHRvIHh4eAorbWF4X3NnX3NlZ3M9eHh4CQkgICB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2NhdHRlci9nYXRoZXIKKwkJCSAgIHNlZ21lbnRzCit0cnlfZGlyZWN0X2lvPXgJCSAgIHRyeSBkaXJlY3QgdHJhbnNmZXIgYmV0d2VlbiB1c2VyIGJ1ZmZlciBhbmQKKwkJCSAgIHRhcGUgZHJpdmUgaWYgdGhpcyBpcyBub24temVybworCitOb3RlIHRoYXQgaWYgdGhlIGJ1ZmZlciBzaXplIGlzIGNoYW5nZWQgYnV0IHRoZSB3cml0ZSB0aHJlc2hvbGQgaXMgbm90CitzZXQsIHRoZSB3cml0ZSB0aHJlc2hvbGQgaXMgc2V0IHRvIHRoZSBuZXcgYnVmZmVyIHNpemUgLSAyIGtCLgorCisKK0JPT1QgVElNRSBDT05GSUdVUkFUSU9OCisKK0lmIHRoZSBkcml2ZXIgaXMgY29tcGlsZWQgaW50byB0aGUga2VybmVsLCB0aGUgc2FtZSBwYXJhbWV0ZXJzIGNhbiBiZQorYWxzbyBzZXQgdXNpbmcsIGUuZy4sIHRoZSBMSUxPIGNvbW1hbmQgbGluZS4gVGhlIHByZWZlcnJlZCBzeW50YXggaXMKK2lzIHRvIHVzZSB0aGUgc2FtZSBrZXl3b3JkIHVzZWQgd2hlbiBsb2FkaW5nIGFzIG1vZHVsZSBidXQgcHJlcGVuZGVkCit3aXRoICdzdC4nLiBGb3IgaW5zdGFuY2UsIHRvIHNldCB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2NhdHRlci9nYXRoZXIKK3NlZ21lbnRzLCB0aGUgcGFyYW1ldGVyICdzdC5tYXhfc2dfc2Vncz14eCcgc2hvdWxkIGJlIHVzZWQgKHh4IGlzIHRoZQorbnVtYmVyIG9mIHNjYXR0ZXIvZ2F0aGVyIHNlZ21lbnRzKS4KKworRm9yIGNvbXBhdGliaWxpdHksIHRoZSBvbGQgc3ludGF4IGZyb20gZWFybHkgMi41IGFuZCAyLjQga2VybmVsCit2ZXJzaW9ucyBpcyBzdXBwb3J0ZWQuIFRoZSBzYW1lIGtleXdvcmRzIGNhbiBiZSB1c2VkIGFzIHdoZW4gbG9hZGluZwordGhlIGRyaXZlciBhcyBtb2R1bGUuIElmIHNldmVyYWwgcGFyYW1ldGVycyBhcmUgc2V0LCB0aGUga2V5d29yZC12YWx1ZQorcGFpcnMgYXJlIHNlcGFyYXRlZCB3aXRoIGEgY29tbWEgKG5vIHNwYWNlcyBhbGxvd2VkKS4gQSBjb2xvbiBjYW4gYmUKK3VzZWQgaW5zdGVhZCBvZiB0aGUgZXF1YWwgbWFyay4gVGhlIGRlZmluaXRpb24gaXMgcHJlcGVuZGVkIGJ5IHRoZQorc3RyaW5nIHN0PS4gSGVyZSBpcyBhbiBleGFtcGxlOgorCisJc3Q9YnVmZmVyX2ticzo2NCx3cml0ZV90aHJlaG9sZF9rYnM6NjAKKworVGhlIGZvbGxvd2luZyBzeW50YXggdXNlZCBieSB0aGUgb2xkIGtlcm5lbCB2ZXJzaW9ucyBpcyBhbHNvIHN1cHBvcnRlZDoKKworICAgICAgICAgICBzdD1hYVssYmJbLGRkXV0KKword2hlcmUKKyAgYWEgaXMgdGhlIGJ1ZmZlciBzaXplIGZvciBmaXhlZCBibG9jayBtb2RlIGluIDEwMjQgYnl0ZSB1bml0cworICBiYiBpcyB0aGUgd3JpdGUgdGhyZXNob2xkIGluIDEwMjQgYnl0ZSB1bml0cworICBkZCBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2NhdHRlci9nYXRoZXIgc2VnbWVudHMKKworCitJT0NUTFMKKworVGhlIHRhcGUgaXMgcG9zaXRpb25lZCBhbmQgdGhlIGRyaXZlIHBhcmFtZXRlcnMgYXJlIHNldCB3aXRoIGlvY3RscworZGVmaW5lZCBpbiBtdGlvLmggVGhlIHRhcGUgY29udHJvbCBwcm9ncmFtICdtdCcgdXNlcyB0aGVzZSBpb2N0bHMuIFRyeQordG8gZmluZCBhbiBtdCB0aGF0IHN1cHBvcnRzIGFsbCBvZiB0aGUgTGludXggU0NTSSB0YXBlIGlvY3RscyBhbmQKK29wZW5zIHRoZSBkZXZpY2UgZm9yIHdyaXRpbmcgaWYgdGhlIHRhcGUgY29udGVudHMgd2lsbCBiZSBtb2RpZmllZAorKGxvb2sgZm9yIGEgcGFja2FnZSBtdC1zdCogZnJvbSB0aGUgTGludXggZnRwIHNpdGVzOyB0aGUgR05VIG10IGRvZXMKK25vdCBvcGVuIGZvciB3cml0aW5nIGZvciwgZS5nLiwgZXJhc2UpLgorCitUaGUgc3VwcG9ydGVkIGlvY3RscyBhcmU6CisKK1RoZSBmb2xsb3dpbmcgdXNlIHRoZSBzdHJ1Y3R1cmUgbXRvcDoKKworTVRGU0YgICBTcGFjZSBmb3J3YXJkIG92ZXIgY291bnQgZmlsZW1hcmtzLiBUYXBlIHBvc2l0aW9uZWQgYWZ0ZXIgZmlsZW1hcmsuCitNVEZTRk0gIEFzIGFib3ZlIGJ1dCB0YXBlIHBvc2l0aW9uZWQgYmVmb3JlIGZpbGVtYXJrLgorTVRCU0YJU3BhY2UgYmFja3dhcmQgb3ZlciBjb3VudCBmaWxlbWFya3MuIFRhcGUgcG9zaXRpb25lZCBiZWZvcmUKKyAgICAgICAgZmlsZW1hcmsuCitNVEJTRk0gIEFzIGFib3ZlIGJ1dCBhcGUgcG9zaXRpb25lZCBhZnRlciBmaWxlbWFyay4KK01URlNSICAgU3BhY2UgZm9yd2FyZCBvdmVyIGNvdW50IHJlY29yZHMuCitNVEJTUiAgIFNwYWNlIGJhY2t3YXJkIG92ZXIgY291bnQgcmVjb3Jkcy4KK01URlNTICAgU3BhY2UgZm9yd2FyZCBvdmVyIGNvdW50IHNldG1hcmtzLgorTVRCU1MgICBTcGFjZSBiYWNrd2FyZCBvdmVyIGNvdW50IHNldG1hcmtzLgorTVRXRU9GICBXcml0ZSBjb3VudCBmaWxlbWFya3MuCitNVFdTTSAgIFdyaXRlIGNvdW50IHNldG1hcmtzLgorTVRSRVcgICBSZXdpbmQgdGFwZS4KK01UT0ZGTCAgU2V0IGRldmljZSBvZmYgbGluZSAob2Z0ZW4gcmV3aW5kIHBsdXMgZWplY3QpLgorTVROT1AgICBEbyBub3RoaW5nIGV4Y2VwdCBmbHVzaCB0aGUgYnVmZmVycy4KK01UUkVURU4gUmUtdGVuc2lvbiB0YXBlLgorTVRFT00gICBTcGFjZSB0byBlbmQgb2YgcmVjb3JkZWQgZGF0YS4KK01URVJBU0UgRXJhc2UgdGFwZS4gSWYgdGhlIGFyZ3VtZW50IGlzIHplcm8sIHRoZSBzaG9ydCBlcmFzZSBjb21tYW5kCisJaXMgdXNlZC4gVGhlIGxvbmcgZXJhc2UgY29tbWFuZCBpcyB1c2VkIHdpdGggYWxsIG90aGVyIHZhbHVlcworCW9mIHRoZSBhcmd1bWVudC4KK01UU0VFSwlTZWVrIHRvIHRhcGUgYmxvY2sgY291bnQuIFVzZXMgVGFuZGJlcmctY29tcGF0aWJsZSBzZWVrIChRRkEpCisgICAgICAgIGZvciBTQ1NJLTEgZHJpdmVzIGFuZCBTQ1NJLTIgc2VlayBmb3IgU0NTSS0yIGRyaXZlcy4gVGhlIGZpbGUgYW5kCisJYmxvY2sgbnVtYmVycyBpbiB0aGUgc3RhdHVzIGFyZSBub3QgdmFsaWQgYWZ0ZXIgYSBzZWVrLgorTVRTRVRCTEsgU2V0IHRoZSBkcml2ZSBibG9jayBzaXplLiBTZXR0aW5nIHRvIHplcm8gc2V0cyB0aGUgZHJpdmUgaW50bworICAgICAgICB2YXJpYWJsZSBibG9jayBtb2RlIChpZiBhcHBsaWNhYmxlKS4KK01UU0VUREVOU0lUWSBTZXRzIHRoZSBkcml2ZSBkZW5zaXR5IGNvZGUgdG8gYXJnLiBTZWUgZHJpdmUKKyAgICAgICAgZG9jdW1lbnRhdGlvbiBmb3IgYXZhaWxhYmxlIGNvZGVzLgorTVRMT0NLIGFuZCBNVFVOTE9DSyBFeHBsaWNpdGx5IGxvY2svdW5sb2NrIHRoZSB0YXBlIGRyaXZlIGRvb3IuCitNVExPQUQgYW5kIE1UVU5MT0FEIEV4cGxpY2l0bHkgbG9hZCBhbmQgdW5sb2FkIHRoZSB0YXBlLiBJZiB0aGUKKwljb21tYW5kIGFyZ3VtZW50IHggaXMgYmV0d2VlbiBNVF9TVF9IUExPQURFUl9PRkZTRVQgKyAxIGFuZAorCU1UX1NUX0hQTE9BREVSX09GRlNFVCArIDYsIHRoZSBudW1iZXIgeCBpcyB1c2VkIHNlbnQgdG8gdGhlCisJZHJpdmUgd2l0aCB0aGUgY29tbWFuZCBhbmQgaXQgc2VsZWN0cyB0aGUgdGFwZSBzbG90IHRvIHVzZSBvZgorCUhQIEMxNTUzQSBjaGFuZ2VyLgorTVRDT01QUkVTU0lPTiBTZXRzIGNvbXByZXNzaW5nIG9yIHVuY29tcHJlc3NpbmcgZHJpdmUgbW9kZSB1c2luZyB0aGUKKwlTQ1NJIG1vZGUgcGFnZSAxNS4gTm90ZSB0aGF0IHNvbWUgZHJpdmVzIG90aGVyIG1ldGhvZHMgZm9yCisJY29udHJvbCBvZiBjb21wcmVzc2lvbi4gU29tZSBkcml2ZXMgKGxpa2UgdGhlIEV4YWJ5dGVzKSB1c2UKKwlkZW5zaXR5IGNvZGVzIGZvciBjb21wcmVzc2lvbiBjb250cm9sLiBTb21lIGRyaXZlcyB1c2UgYW5vdGhlcgorCW1vZGUgcGFnZSBidXQgdGhpcyBwYWdlIGhhcyBub3QgYmVlbiBpbXBsZW1lbnRlZCBpbiB0aGUKKwlkcml2ZXIuIFNvbWUgZHJpdmVzIHdpdGhvdXQgY29tcHJlc3Npb24gY2FwYWJpbGl0eSB3aWxsIGFjY2VwdAorCWFueSBjb21wcmVzc2lvbiBtb2RlIHdpdGhvdXQgZXJyb3IuCitNVFNFVFBBUlQgTW92ZXMgdGhlIHRhcGUgdG8gdGhlIHBhcnRpdGlvbiBnaXZlbiBieSB0aGUgYXJndW1lbnQgYXQgdGhlCisJbmV4dCB0YXBlIG9wZXJhdGlvbi4gVGhlIGJsb2NrIGF0IHdoaWNoIHRoZSB0YXBlIGlzIHBvc2l0aW9uZWQKKwlpcyB0aGUgYmxvY2sgd2hlcmUgdGhlIHRhcGUgd2FzIHByZXZpb3VzbHkgcG9zaXRpb25lZCBpbiB0aGUKKwluZXcgYWN0aXZlIHBhcnRpdGlvbiB1bmxlc3MgdGhlIG5leHQgdGFwZSBvcGVyYXRpb24gaXMKKwlNVFNFRUsuIEluIHRoaXMgY2FzZSB0aGUgdGFwZSBpcyBtb3ZlZCBkaXJlY3RseSB0byB0aGUgYmxvY2sKKwlzcGVjaWZpZWQgYnkgTVRTRUVLLiBNVFNFVFBBUlQgaXMgaW5hY3RpdmUgdW5sZXNzCisJTVRfU1RfQ0FOX1BBUlRJVElPTlMgc2V0LgorTVRNS1BBUlQgRm9ybWF0cyB0aGUgdGFwZSB3aXRoIG9uZSBwYXJ0aXRpb24gKGFyZ3VtZW50IHplcm8pIG9yIHR3bworCXBhcnRpdGlvbnMgKHRoZSBhcmd1bWVudCBnaXZlcyBpbiBtZWdhYnl0ZXMgdGhlIHNpemUgb2YKKwlwYXJ0aXRpb24gMSB0aGF0IGlzIHBoeXNpY2FsbHkgdGhlIGZpcnN0IHBhcnRpdGlvbiBvZiB0aGUKKwl0YXBlKS4gVGhlIGRyaXZlIGhhcyB0byBzdXBwb3J0IHBhcnRpdGlvbnMgd2l0aCBzaXplIHNwZWNpZmllZAorCWJ5IHRoZSBpbml0aWF0b3IuIEluYWN0aXZlIHVubGVzcyBNVF9TVF9DQU5fUEFSVElUSU9OUyBzZXQuCitNVFNFVERSVkJVRkZFUgorCUlzIHVzZWQgZm9yIHNldmVyYWwgcHVycG9zZXMuIFRoZSBjb21tYW5kIGlzIG9idGFpbmVkIGZyb20gY291bnQKKyAgICAgICAgd2l0aCBtYXNrIE1UX1NFVF9PUFRJT05TLCB0aGUgbG93IG9yZGVyIGJpdHMgYXJlIHVzZWQgYXMgYXJndW1lbnQuCisJVGhpcyBjb21tYW5kIGlzIG9ubHkgYWxsb3dlZCBmb3IgdGhlIHN1cGVydXNlciAocm9vdCkuIFRoZQorCXN1YmNvbW1hbmRzIGFyZToKKwkwCisgICAgICAgICAgIFRoZSBkcml2ZSBidWZmZXIgb3B0aW9uIGlzIHNldCB0byB0aGUgYXJndW1lbnQuIFplcm8gbWVhbnMKKyAgICAgICAgICAgbm8gYnVmZmVyaW5nLgorICAgICAgICBNVF9TVF9CT09MRUFOUworICAgICAgICAgICBTZXRzIHRoZSBidWZmZXJpbmcgb3B0aW9ucy4gVGhlIGJpdHMgYXJlIHRoZSBuZXcgc3RhdGVzCisgICAgICAgICAgIChlbmFibGVkL2Rpc2FibGVkKSB0aGUgZm9sbG93aW5nIG9wdGlvbnMgKGluIHRoZQorCSAgIHBhcmVudGhlc2lzIGlzIHNwZWNpZmllZCB3aGV0aGVyIHRoZSBvcHRpb24gaXMgZ2xvYmFsIG9yCisJICAgY2FuIGJlIHNwZWNpZmllZCBkaWZmZXJlbnRseSBmb3IgZWFjaCBtb2RlKToKKwkgICAgIE1UX1NUX0JVRkZFUl9XUklURVMgd3JpdGUgYnVmZmVyaW5nIChtb2RlKQorCSAgICAgTVRfU1RfQVNZTkNfV1JJVEVTIGFzeW5jaHJvbm91cyB3cml0ZXMgKG1vZGUpCisgICAgICAgICAgICAgTVRfU1RfUkVBRF9BSEVBRCAgcmVhZCBhaGVhZCAobW9kZSkKKyAgICAgICAgICAgICBNVF9TVF9UV09fRk0gd3JpdGluZyBvZiB0d28gZmlsZW1hcmtzIChnbG9iYWwpCisJICAgICBNVF9TVF9GQVNUX0VPTSB1c2luZyB0aGUgU0NTSSBzcGFjaW5nIHRvIEVPRCAoZ2xvYmFsKQorCSAgICAgTVRfU1RfQVVUT19MT0NLIGF1dG9tYXRpYyBsb2NraW5nIG9mIHRoZSBkcml2ZSBkb29yIChnbG9iYWwpCisgICAgICAgICAgICAgTVRfU1RfREVGX1dSSVRFUyB0aGUgZGVmYXVsdHMgYXJlIG1lYW50IG9ubHkgZm9yIHdyaXRlcyAobW9kZSkKKwkgICAgIE1UX1NUX0NBTl9CU1IgYmFja3NwYWNpbmcgb3ZlciBtb3JlIHRoYW4gb25lIHJlY29yZHMgY2FuCisJCWJlIHVzZWQgZm9yIHJlcG9zaXRpb25pbmcgdGhlIHRhcGUgKGdsb2JhbCkKKwkgICAgIE1UX1NUX05PX0JMS0xJTVMgdGhlIGRyaXZlciBkb2VzIG5vdCBhc2sgdGhlIGJsb2NrIGxpbWl0cworCQlmcm9tIHRoZSBkcml2ZSAoYmxvY2sgc2l6ZSBjYW4gYmUgY2hhbmdlZCBvbmx5IHRvCisJCXZhcmlhYmxlKSAoZ2xvYmFsKQorCSAgICAgTVRfU1RfQ0FOX1BBUlRJVElPTlMgZW5hYmxlcyBzdXBwb3J0IGZvciBwYXJ0aXRpb25lZAorCQl0YXBlcyAoZ2xvYmFsKQorCSAgICAgTVRfU1RfU0NTSTJMT0dJQ0FMIHRoZSBsb2dpY2FsIGJsb2NrIG51bWJlciBpcyB1c2VkIGluCisJCXRoZSBNVFNFRUsgYW5kIE1USU9DUE9TIGZvciBTQ1NJLTIgZHJpdmVzIGluc3RlYWQgb2YKKwkJdGhlIGRldmljZSBkZXBlbmRlbnQgYWRkcmVzcy4gSXQgaXMgcmVjb21tZW5kZWQgdG8gc2V0CisJCXRoaXMgZmxhZyB1bmxlc3MgdGhlcmUgYXJlIHRhcGVzIHVzaW5nIHRoZSBkZXZpY2UKKwkJZGVwZW5kZW50IChmcm9tIHRoZSBvbGQgdGltZXMpIChnbG9iYWwpCisJICAgICBNVF9TVF9TWVNWIHNldHMgdGhlIFNZU1Ygc2VtYXRpY3MgKG1vZGUpCisJICAgICBNVF9TVF9OT1dBSVQgZW5hYmxlcyBpbW1lZGlhdGUgbW9kZSAoaS5lLiwgZG9uJ3Qgd2FpdCBmb3IKKwkgICAgICAgIHRoZSBjb21tYW5kIHRvIGZpbmlzaCkgZm9yIHNvbWUgY29tbWFuZHMgKGUuZy4sIHJld2luZCkKKwkgICAgIE1UX1NUX0RFQlVHR0lORyBkZWJ1Z2dpbmcgKGdsb2JhbDsgZGVidWdnaW5nIG11c3QgYmUKKwkJY29tcGlsZWQgaW50byB0aGUgZHJpdmVyKQorCU1UX1NUX1NFVEJPT0xFQU5TCisJTVRfU1RfQ0xFQVJCT09MRUFOUworCSAgIFNldHMgb3IgY2xlYXJzIHRoZSBvcHRpb24gYml0cy4KKyAgICAgICAgTVRfU1RfV1JJVEVfVEhSRVNIT0xECisgICAgICAgICAgIFNldHMgdGhlIHdyaXRlIHRocmVzaG9sZCBmb3IgdGhpcyBkZXZpY2UgdG8ga2lsb2J5dGVzCisgICAgICAgICAgIHNwZWNpZmllZCBieSB0aGUgbG93ZXN0IGJpdHMuCisJTVRfU1RfREVGX0JMS1NJWkUKKwkgICBEZWZpbmVzIHRoZSBkZWZhdWx0IGJsb2NrIHNpemUgc2V0IGF1dG9tYXRpY2FsbHkuIFZhbHVlCisJICAgMHhmZmZmZmYgbWVhbnMgdGhhdCB0aGUgZGVmYXVsdCBpcyBub3QgdXNlZCBhbnkgbW9yZS4KKwlNVF9TVF9ERUZfREVOU0lUWQorCU1UX1NUX0RFRl9EUlZCVUZGRVIKKwkgICBVc2VkIHRvIHNldCBvciBjbGVhciB0aGUgZGVuc2l0eSAoOCBiaXRzKSwgYW5kIGRyaXZlIGJ1ZmZlcgorCSAgIHN0YXRlICgzIGJpdHMpLiBJZiB0aGUgdmFsdWUgaXMgTVRfU1RfQ0xFQVJfREVGQVVMVAorCSAgICgweGZmZmZmKSB0aGUgZGVmYXVsdCB3aWxsIG5vdCBiZSB1c2VkIGFueSBtb3JlLiBPdGhlcndpc2UKKwkgICB0aGUgbG93ZXJtb3N0IGJpdHMgb2YgdGhlIHZhbHVlIGNvbnRhaW4gdGhlIG5ldyB2YWx1ZSBvZgorCSAgIHRoZSBwYXJhbWV0ZXIuCisJTVRfU1RfREVGX0NPTVBSRVNTSU9OCisJICAgVGhlIGNvbXByZXNzaW9uIGRlZmF1bHQgd2lsbCBub3QgYmUgdXNlZCBpZiB0aGUgdmFsdWUgb2YKKwkgICB0aGUgbG93ZXJtb3N0IGJ5dGUgaXMgMHhmZi4gT3RoZXJ3aXNlIHRoZSBsb3dlcm1vc3QgYml0CisJICAgY29udGFpbnMgdGhlIG5ldyBkZWZhdWx0LiBJZiB0aGUgYml0cyA4LTE1IGFyZSBzZXQgdG8gYQorCSAgIG5vbi16ZXJvIG51bWJlciwgYW5kIHRoaXMgbnVtYmVyIGlzIG5vdCAweGZmLCB0aGUgbnVtYmVyIGlzCisJICAgdXNlZCBhcyB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtLiBUaGUgdmFsdWUKKwkgICBNVF9TVF9DTEVBUl9ERUZBVUxUIGNhbiBiZSB1c2VkIHRvIGNsZWFyIHRoZSBjb21wcmVzc2lvbgorCSAgIGRlZmF1bHQuCisJTVRfU1RfU0VUX1RJTUVPVVQKKwkgICBTZXQgdGhlIG5vcm1hbCB0aW1lb3V0IGluIHNlY29uZHMgZm9yIHRoaXMgZGV2aWNlLiBUaGUKKwkgICBkZWZhdWx0IGlzIDkwMCBzZWNvbmRzICgxNSBtaW51dGVzKS4gVGhlIHRpbWVvdXQgc2hvdWxkIGJlCisJICAgbG9uZyBlbm91Z2ggZm9yIHRoZSByZXRyaWVzIGRvbmUgYnkgdGhlIGRldmljZSB3aGlsZQorCSAgIHJlYWRpbmcvd3JpdGluZy4KKwlNVF9TVF9TRVRfTE9OR19USU1FT1VUCisJICAgU2V0IHRoZSBsb25nIHRpbWVvdXQgdGhhdCBpcyB1c2VkIGZvciBvcGVyYXRpb25zIHRoYXQgYXJlCisJICAga25vd24gdG8gdGFrZSBhIGxvbmcgdGltZS4gVGhlIGRlZmF1bHQgaXMgMTQwMDAgc2Vjb25kcworCSAgICgzLjkgaG91cnMpLiBGb3IgZXJhc2UgdGhpcyB2YWx1ZSBpcyBmdXJ0aGVyIG11bHRpcGxpZWQgYnkKKwkgICBlaWdodC4KKwlNVF9TVF9TRVRfQ0xOCisJICAgU2V0IHRoZSBjbGVhbmluZyByZXF1ZXN0IGludGVycHJldGF0aW9uIHBhcmFtZXRlcnMgdXNpbmcKKwkgICB0aGUgbG93ZXN0IDI0IGJpdHMgb2YgdGhlIGFyZ3VtZW50LiBUaGUgZHJpdmVyIGNhbiBzZXQgdGhlCisJICAgZ2VuZXJpYyBzdGF0dXMgYml0IEdNVF9DTE4gaWYgYSBjbGVhbmluZyByZXF1ZXN0IGJpdCBwYXR0ZXJuCisJICAgaXMgZm91bmQgZnJvbSB0aGUgZXh0ZW5kZWQgc2Vuc2UgZGF0YS4gTWFueSBkcml2ZXMgc2V0IG9uZSBvcgorCSAgIG1vcmUgYml0cyBpbiB0aGUgZXh0ZW5kZWQgc2Vuc2UgZGF0YSB3aGVuIHRoZSBkcml2ZSBuZWVkcworCSAgIGNsZWFuaW5nLiBUaGUgYml0cyBhcmUgZGV2aWNlLWRlcGVuZGVudC4gVGhlIGRyaXZlciBpcworCSAgIGdpdmVuIHRoZSBudW1iZXIgb2YgdGhlIHNlbnNlIGRhdGEgYnl0ZSAodGhlIGxvd2VzdCBlaWdodAorCSAgIGJpdHMgb2YgdGhlIGFyZ3VtZW50OyBtdXN0IGJlID49IDE4ICh2YWx1ZXMgMSAtIDE3CisJICAgcmVzZXJ2ZWQpIGFuZCA8PSB0aGUgbWF4aW11bSByZXF1ZXN0ZWQgc2Vuc2UgZGF0YSBzaXhlKSwgCisJICAgYSBtYXNrIHRvIHNlbGVjdCB0aGUgcmVsZXZhbnQgYml0cyAodGhlIGJpdHMgOS0xNiksIGFuZCB0aGUKKwkgICBiaXQgcGF0dGVybiAoYml0cyAxNy0yMykuIElmIHRoZSBiaXQgcGF0dGVybiBpcyB6ZXJvLCBvbmUKKwkgICBvciBtb3JlIGJpdHMgdW5kZXIgdGhlIG1hc2sgaW5kaWNhdGUgY2xlYW5pbmcgcmVxdWVzdC4gSWYKKwkgICB0aGUgcGF0dGVybiBpcyBub24temVybywgdGhlIHBhdHRlcm4gbXVzdCBtYXRjaCB0aGUgbWFza2VkCisJICAgc2Vuc2UgZGF0YSBieXRlLgorCisJICAgKFRoZSBjbGVhbmluZyBiaXQgaXMgc2V0IGlmIHRoZSBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgYW5kCisJICAgcXVhbGlmaWVyIDAwaCAxN2ggYXJlIHNlZW4gcmVnYXJkbGVzcyBvZiB0aGUgc2V0dGluZyBvZgorCSAgIE1UX1NUX1NFVF9DTE4uKQorCitUaGUgZm9sbG93aW5nIGlvY3RsIHVzZXMgdGhlIHN0cnVjdHVyZSBtdHBvczoKK01USU9DUE9TIFJlYWRzIHRoZSBjdXJyZW50IHBvc2l0aW9uIGZyb20gdGhlIGRyaXZlLiBVc2VzCisgICAgICAgIFRhbmRiZXJnLWNvbXBhdGlibGUgUUZBIGZvciBTQ1NJLTEgZHJpdmVzIGFuZCB0aGUgU0NTSS0yCisgICAgICAgIGNvbW1hbmQgZm9yIHRoZSBTQ1NJLTIgZHJpdmVzLgorCitUaGUgZm9sbG93aW5nIGlvY3RsIHVzZXMgdGhlIHN0cnVjdHVyZSBtdGdldCB0byByZXR1cm4gdGhlIHN0YXR1czoKK01USU9DR0VUIFJldHVybnMgc29tZSBzdGF0dXMgaW5mb3JtYXRpb24uCisgICAgICAgIFRoZSBmaWxlIG51bWJlciBhbmQgYmxvY2sgbnVtYmVyIHdpdGhpbiBmaWxlIGFyZSByZXR1cm5lZC4gVGhlCisgICAgICAgIGJsb2NrIGlzIC0xIHdoZW4gaXQgY2FuJ3QgYmUgZGV0ZXJtaW5lZCAoZS5nLiwgYWZ0ZXIgTVRCU0YpLgorICAgICAgICBUaGUgZHJpdmUgdHlwZSBpcyBlaXRoZXIgTVRJU1NDU0kxIG9yIE1USVNTQ1NJMi4KKyAgICAgICAgVGhlIG51bWJlciBvZiByZWNvdmVyZWQgZXJyb3JzIHNpbmNlIHRoZSBwcmV2aW91cyBzdGF0dXMgY2FsbAorICAgICAgICBpcyBzdG9yZWQgaW4gdGhlIGxvd2VyIHdvcmQgb2YgdGhlIGZpZWxkIG10X2VycmVnLgorICAgICAgICBUaGUgY3VycmVudCBibG9jayBzaXplIGFuZCB0aGUgZGVuc2l0eSBjb2RlIGFyZSBzdG9yZWQgaW4gdGhlIGZpZWxkCisgICAgICAgIG10X2RzcmVnIChzaGlmdHMgZm9yIHRoZSBzdWJmaWVsZHMgYXJlIE1UX1NUX0JMS1NJWkVfU0hJRlQgYW5kCisgICAgICAgIE1UX1NUX0RFTlNJVFlfU0hJRlQpLgorCVRoZSBHTVRfeHh4IHN0YXR1cyBiaXRzIHJlZmxlY3QgdGhlIGRyaXZlIHN0YXR1cy4gR01UX0RSX09QRU4KKwlpcyBzZXQgaWYgdGhlcmUgaXMgbm8gdGFwZSBpbiB0aGUgZHJpdmUuIEdNVF9FT0QgbWVhbnMgZWl0aGVyCisJZW5kIG9mIHJlY29yZGVkIGRhdGEgb3IgZW5kIG9mIHRhcGUuIEdNVF9FT1QgbWVhbnMgZW5kIG9mIHRhcGUuCisKKworTUlTQ0VMTEFORU9VUyBDT01QSUxFIE9QVElPTlMKKworVGhlIHJlY292ZXJlZCB3cml0ZSBlcnJvcnMgYXJlIGNvbnNpZGVyZWQgZmF0YWwgaWYgU1RfUkVDT1ZFUkVEX1dSSVRFX0ZBVEFMCitpcyBkZWZpbmVkLgorCitUaGUgbWF4aW11bSBudW1iZXIgb2YgdGFwZSBkZXZpY2VzIGlzIGRldGVybWluZWQgYnkgdGhlIGRlZmluZQorU1RfTUFYX1RBUEVTLiBJZiBtb3JlIHRhcGVzIGFyZSBkZXRlY3RlZCBhdCBkcml2ZXIgaW5pdGlhbGl6YXRpb24sIHRoZQorbWF4aW11bSBpcyBhZGp1c3RlZCBhY2NvcmRpbmdseS4KKworSW1tZWRpYXRlIHJldHVybiBmcm9tIHRhcGUgcG9zaXRpb25pbmcgU0NTSSBjb21tYW5kcyBjYW4gYmUgZW5hYmxlZCBieQorZGVmaW5pbmcgU1RfTk9XQUlULiBJZiB0aGlzIGlzIGRlZmluZWQsIHRoZSB1c2VyIHNob3VsZCB0YWtlIGNhcmUgdGhhdAordGhlIG5leHQgdGFwZSBvcGVyYXRpb24gaXMgbm90IHN0YXJ0ZWQgYmVmb3JlIHRoZSBwcmV2aW91cyBvbmUgaGFzCitmaW5pc2hlZC4gVGhlIGRyaXZlcyBhbmQgU0NTSSBhZGFwdGVycyBzaG91bGQgaGFuZGxlIHRoaXMgY29uZGl0aW9uCitncmFjZWZ1bGx5LCBidXQgc29tZSBkcml2ZS9hZGFwdGVyIGNvbWJpbmF0aW9ucyBhcmUga25vd24gdG8gaGFuZyB0aGUKK1NDU0kgYnVzIGluIHRoaXMgY2FzZS4KKworVGhlIE1URU9NIGNvbW1hbmQgaXMgYnkgZGVmYXVsdCBpbXBsZW1lbnRlZCBhcyBzcGFjaW5nIG92ZXIgMzI3NjcKK2ZpbGVtYXJrcy4gV2l0aCB0aGlzIG1ldGhvZCB0aGUgZmlsZSBudW1iZXIgaW4gdGhlIHN0YXR1cyBpcworY29ycmVjdC4gVGhlIHVzZXIgY2FuIHJlcXVlc3QgdXNpbmcgZGlyZWN0IHNwYWNpbmcgdG8gRU9EIGJ5IHNldHRpbmcKK1NUX0ZBU1RfRU9NIDEgKG9yIHVzaW5nIHRoZSBNVF9TVF9PUFRJT05TIGlvY3RsKS4gSW4gdGhpcyBjYXNlIHRoZSBmaWxlCitudW1iZXIgd2lsbCBiZSBpbnZhbGlkLgorCitXaGVuIHVzaW5nIHJlYWQgYWhlYWQgb3IgYnVmZmVyZWQgd3JpdGVzIHRoZSBwb3NpdGlvbiB3aXRoaW4gdGhlIGZpbGUKK21heSBub3QgYmUgY29ycmVjdCBhZnRlciB0aGUgZmlsZSBpcyBjbG9zZWQgKGNvcnJlY3QgcG9zaXRpb24gbWF5CityZXF1aXJlIGJhY2tzcGFjaW5nIG92ZXIgbW9yZSB0aGFuIG9uZSByZWNvcmQpLiBUaGUgY29ycmVjdCBwb3NpdGlvbgord2l0aGluIGZpbGUgY2FuIGJlIG9idGFpbmVkIGlmIFNUX0lOX0ZJTEVfUE9TIGlzIGRlZmluZWQgYXQgY29tcGlsZQordGltZSBvciB0aGUgTVRfU1RfQ0FOX0JTUiBiaXQgaXMgc2V0IGZvciB0aGUgZHJpdmUgd2l0aCBhbiBpb2N0bC4KKyhUaGUgZHJpdmVyIGFsd2F5cyBiYWNrcyBvdmVyIGEgZmlsZW1hcmsgY3Jvc3NlZCBieSByZWFkIGFoZWFkIGlmIHRoZQordXNlciBkb2VzIG5vdCByZXF1ZXN0IGRhdGEgdGhhdCBmYXIuKQorCisKK0RFQlVHR0lORyBISU5UUworCitUbyBlbmFibGUgZGVidWdnaW5nIG1lc3NhZ2VzLCBlZGl0IHN0LmMgYW5kICNkZWZpbmUgREVCVUcgMS4gQXMgc2VlbgorYWJvdmUsIGRlYnVnZ2luZyBjYW4gYmUgc3dpdGNoZWQgb2ZmIHdpdGggYW4gaW9jdGwgaWYgZGVidWdnaW5nIGlzCitjb21waWxlZCBpbnRvIHRoZSBkcml2ZXIuIFRoZSBkZWJ1Z2dpbmcgb3V0cHV0IGlzIG5vdCB2b2x1bWlub3VzLgorCitJZiB0aGUgdGFwZSBzZWVtcyB0byBoYW5nLCBJIHdvdWxkIGJlIHZlcnkgaW50ZXJlc3RlZCB0byBoZWFyIHdoZXJlCit0aGUgZHJpdmVyIGlzIHdhaXRpbmcuIFdpdGggdGhlIGNvbW1hbmQgJ3BzIC1sJyB5b3UgY2FuIHNlZSB0aGUgc3RhdGUKK29mIHRoZSBwcm9jZXNzIHVzaW5nIHRoZSB0YXBlLiBJZiB0aGUgc3RhdGUgaXMgRCwgdGhlIHByb2Nlc3MgaXMKK3dhaXRpbmcgZm9yIHNvbWV0aGluZy4gVGhlIGZpZWxkIFdDSEFOIHRlbGxzIHdoZXJlIHRoZSBkcml2ZXIgaXMKK3dhaXRpbmcuIElmIHlvdSBoYXZlIHRoZSBjdXJyZW50IFN5c3RlbS5tYXAgaW4gdGhlIGNvcnJlY3QgcGxhY2UgKGluCisvYm9vdCBmb3IgdGhlIHByb2NwcyBJIHVzZSkgb3IgaGF2ZSB1cGRhdGVkIC9ldGMvcHNkYXRhYmFzZSAoZm9yIGttZW0KK3BzKSwgcHMgd3JpdGVzIHRoZSBmdW5jdGlvbiBuYW1lIGluIHRoZSBXQ0hBTiBmaWVsZC4gSWYgbm90LCB5b3UgaGF2ZQordG8gbG9vayB1cCB0aGUgZnVuY3Rpb24gZnJvbSBTeXN0ZW0ubWFwLgorCitOb3RlIGFsc28gdGhhdCB0aGUgdGltZW91dHMgYXJlIHZlcnkgbG9uZyBjb21wYXJlZCB0byBtb3N0IG90aGVyCitkcml2ZXJzLiBUaGlzIG1lYW5zIHRoYXQgdGhlIExpbnV4IGRyaXZlciBtYXkgYXBwZWFyIGh1bmcgYWx0aG91Z2ggdGhlCityZWFsIHJlYXNvbiBpcyB0aGF0IHRoZSB0YXBlIGZpcm13YXJlIGhhcyBnb3QgY29uZnVzZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvc3ltNTNjNTAwX2NzLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9zeW01M2M1MDBfY3MudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZmViY2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvc3ltNTNjNTAwX2NzLnR4dApAQCAtMCwwICsxLDIzIEBACitUaGUgc3ltNTNjNTAwX2NzIGRyaXZlciBvcmlnaW5hdGVkIGFzIGFuIGFkZC1vbiB0byBEYXZpZCBIaW5kcycgcGNtY2lhLWNzCitwYWNrYWdlLCBhbmQgd2FzIHdyaXR0ZW4gYnkgVG9tIENvcm5lciAodGNvcm5lckB2aWEuYXQpLiAgQSByZXdyaXRlIHdhcworbG9uZyBvdmVyZHVlLCBhbmQgdGhlIGN1cnJlbnQgdmVyc2lvbiBhZGRyZXNzZXMgdGhlIGZvbGxvd2luZyBjb25jZXJuczoKKworCSgxKSBleHRlbnNpdmUga2VybmVsIGNoYW5nZXMgYmV0d2VlbiAyLjQgYW5kIDIuNi4KKwkoMikgZGVwcmVjYXRlZCBQQ01DSUEgc3VwcG9ydCBvdXRzaWRlIHRoZSBrZXJuZWwuCisKK0FsbCB0aGUgVVNFX0JJT1MgY29kZSBoYXMgYmVlbiByaXBwZWQgb3V0LiAgSXQgd2FzIG5ldmVyIHVzZWQsIGFuZCBjb3VsZAorbm90IGhhdmUgd29ya2VkIGFueXdheS4gIFRoZSBVU0VfRE1BIGNvZGUgaXMgbGlrZXdpc2UgZ29uZS4gIE1hbnkgdGhhbmtzCit0byBZT0tPVEEgSGlyb3NoaSAobnNwX2NzIGRyaXZlcikgYW5kIERhdmlkIEhpbmRzIChxbG9naWNfY3MgZHJpdmVyKSBmb3IKK3RoZSBjb2RlIGZyYWdtZW50cyBJIHNoYW1lbGVzc2x5IGFkYXB0ZWQgZm9yIHRoaXMgd29yay4gIFRoYW5rcyBhbHNvIHRvCitDaHJpc3RvcGggSGVsbHdpZyBmb3IgaGlzIHBhdGllbnQgdHV0ZWxhZ2Ugd2hpbGUgSSBzdHVtYmxlZCBhYm91dC4KKworVGhlIFN5bWJpb3MgTG9naWMgNTNjNTAwIGNoaXAgd2FzIHVzZWQgaW4gdGhlICJuZXdlciIgKGNpcmNhIDE5OTcpIHZlcnNpb24KK29mIHRoZSBOZXcgTWVkaWEgQnVzIFRvYXN0ZXIgUENNQ0lBIFNDU0kgY29udHJvbGxlci4gIFByZXN1bWFibHkgdGhlcmUgYXJlCitvdGhlciBwcm9kdWN0cyB1c2luZyB0aGlzIGNoaXAsIGJ1dCBJJ3ZlIG5ldmVyIGxhaWQgZXllcyAobXVjaCBsZXNzIGhhbmRzKQorb24gb25lLgorCitUaHJvdWdoIHRoZSB5ZWFycywgdGhlcmUgaGF2ZSBiZWVuIGEgbnVtYmVyIG9mIGRvd25sb2FkcyBvZiB0aGUgcGNtY2lhLWNzCit2ZXJzaW9uIG9mIHRoaXMgZHJpdmVyLCBhbmQgSSBndWVzcyBpdCB3b3JrZWQgZm9yIHRob3NlIHVzZXJzLiAgSXQgd29ya2VkCitmb3IgVG9tIENvcm5lciwgYW5kIGl0IHdvcmtzIGZvciBtZS4gIFlvdXIgbWlsZWFnZSB3aWxsIHByb2JhYmx5IHZhcnkuCisKKy0tQm9iIFRyYWN5IChyY3RAZnJ1cy5jb20pCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvc3ltNTNjOHh4XzIudHh0IGIvRG9jdW1lbnRhdGlvbi9zY3NpL3N5bTUzYzh4eF8yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjUxNmNkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL3N5bTUzYzh4eF8yLnR4dApAQCAtMCwwICsxLDEwNTkgQEAKK1RoZSBMaW51eCBTWU0tMiBkcml2ZXIgZG9jdW1lbnRhdGlvbiBmaWxlCisKK1dyaXR0ZW4gYnkgR2VyYXJkIFJvdWRpZXIgPGdyb3VkaWVyQGZyZWUuZnI+CisyMSBSdWUgQ2Fybm90Cis5NTE3MCBERVVJTCBMQSBCQVJSRSAtIEZSQU5DRQorCitVcGRhdGVkIGJ5IE1hdHRoZXcgV2lsY294IDxtYXR0aGV3QHdpbC5jeD4KKworMjAwNC0xMC0wOQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxLiAgSW50cm9kdWN0aW9uCisyLiAgU3VwcG9ydGVkIGNoaXBzIGFuZCBTQ1NJIGZlYXR1cmVzCiszLiAgQWR2YW50YWdlcyBvZiB0aGlzIGRyaXZlciBmb3IgbmV3ZXIgY2hpcHMuCisgICAgICAzLjEgT3B0aW1pemVkIFNDU0kgU0NSSVBUUworICAgICAgMy4yIE5ldyBmZWF0dXJlcyBhcHBlYXJlZCB3aXRoIHRoZSBTWU01M0M4OTYKKzQuICBNZW1vcnkgbWFwcGVkIEkvTyB2ZXJzdXMgbm9ybWFsIEkvTworNS4gIFRhZ2dlZCBjb21tYW5kIHF1ZXVlaW5nCis2LiAgUGFyaXR5IGNoZWNraW5nCis3LiAgUHJvZmlsaW5nIGluZm9ybWF0aW9uCis4LiAgQ29udHJvbCBjb21tYW5kcworICAgICAgOC4xICBTZXQgbWluaW11bSBzeW5jaHJvbm91cyBwZXJpb2QKKyAgICAgIDguMiAgU2V0IHdpZGUgc2l6ZQorICAgICAgOC4zICBTZXQgbWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCB0YWdnZWQgY29tbWFuZHMKKyAgICAgIDguNCAgU2V0IGRlYnVnIG1vZGUKKyAgICAgIDguNSAgU2V0IGZsYWcgKG5vX2Rpc2MpCisgICAgICA4LjYgIFNldCB2ZXJib3NlIGxldmVsCisgICAgICA4LjcgIFJlc2V0IGFsbCBsb2dpY2FsIHVuaXRzIG9mIGEgdGFyZ2V0CisgICAgICA4LjggIEFib3J0IGFsbCB0YXNrcyBvZiBhbGwgbG9naWNhbCB1bml0cyBvZiBhIHRhcmdldAorOS4gIENvbmZpZ3VyYXRpb24gcGFyYW1ldGVycworMTAuIEJvb3Qgc2V0dXAgY29tbWFuZHMKKyAgICAgIDEwLjEgU3ludGF4CisgICAgICAxMC4yIEF2YWlsYWJsZSBhcmd1bWVudHMKKyAgICAgICAgICAgICAxMC4yLjEgIERlZmF1bHQgbnVtYmVyIG9mIHRhZ2dlZCBjb21tYW5kcworICAgICAgICAgICAgIDEwLjIuMiAgQnVyc3QgbWF4CisgICAgICAgICAgICAgMTAuMi4zICBMRUQgc3VwcG9ydAorICAgICAgICAgICAgIDEwLjIuNCAgRGlmZmVyZW50aWFsIG1vZGUKKyAgICAgICAgICAgICAxMC4yLjUgIElSUSBtb2RlCisgICAgICAgICAgICAgMTAuMi42ICBDaGVjayBTQ1NJIEJVUyAKKyAgICAgICAgICAgICAxMC4yLjcgIFN1Z2dlc3QgYSBkZWZhdWx0IFNDU0kgaWQgZm9yIGhvc3RzCisgICAgICAgICAgICAgMTAuMi44ICBWZXJib3NpdHkgbGV2ZWwKKyAgICAgICAgICAgICAxMC4yLjkgIERlYnVnIG1vZGUKKyAgICAgICAgICAgICAxMC4yLjEwIFNldHRsZSBkZWxheQorICAgICAgICAgICAgIDEwLjIuMTEgU2VyaWFsIE5WUkFNCisgICAgICAgICAgICAgMTAuMi4xMiBFeGNsdWRlIGEgaG9zdCBmcm9tIGJlaW5nIGF0dGFjaGVkCisgICAgICAxMC4zIENvbnZlcnRpbmcgZnJvbSBvbGQgb3B0aW9ucworICAgICAgMTAuNCBTQ1NJIEJVUyBjaGVja2luZyBib290IG9wdGlvbgorMTEuIFNDU0kgcHJvYmxlbSB0cm91Ymxlc2hvb3RpbmcKKyAgICAgIDE1LjEgUHJvYmxlbSB0cmFja2luZworICAgICAgMTUuMiBVbmRlcnN0YW5kaW5nIGhhcmR3YXJlIGVycm9yIHJlcG9ydHMKKzEyLiBTZXJpYWwgTlZSQU0gc3VwcG9ydCAoYnkgUmljaGFyZCBXYWx0aGFtKQorICAgICAgMTcuMSBGZWF0dXJlcworICAgICAgMTcuMiBTeW1iaW9zIE5WUkFNIGxheW91dAorICAgICAgMTcuMyBUZWtyYW0gIE5WUkFNIGxheW91dAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzEuIEludHJvZHVjdGlvbgorCitUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgd2hvbGUgU1lNNTNDOFhYIGZhbWlseSBvZiBQQ0ktU0NTSSBjb250cm9sbGVycy4KK0l0IGFsc28gc3VwcG9ydCB0aGUgc3Vic2V0IG9mIExTSTUzQzEwWFggUENJLVNDU0kgY29udHJvbGxlcnMgdGhhdCBhcmUgYmFzZWQgCitvbiB0aGUgU1lNNTNDOFhYIFNDUklQVFMgbGFuZ3VhZ2UuCisKK0l0IHJlcGxhY2VzIHRoZSBzeW01M2M4eHgrbmNyNTNjOHh4IGRyaXZlciBidW5kbGUgYW5kIHNoYXJlcyBpdHMgY29yZSBjb2RlIAord2l0aCB0aGUgRnJlZUJTRCBTWU0tMiBkcml2ZXIuIFRoZSBgZ2x1ZScgdGhhdCBhbGxvd3MgdGhpcyBkcml2ZXIgdG8gd29yayAKK3VuZGVyIExpbnV4IGlzIGNvbnRhaW5lZCBpbiAyIGZpbGVzIG5hbWVkIHN5bV9nbHVlLmggYW5kIHN5bV9nbHVlLmMuCitPdGhlciBkcml2ZXJzIGZpbGVzIGFyZSBpbnRlbmRlZCBub3QgdG8gZGVwZW5kIG9uIHRoZSBPcGVyYXRpbmcgU3lzdGVtIAorb24gd2hpY2ggdGhlIGRyaXZlciBpcyB1c2VkLgorCitUaGUgaGlzdG9yeSBvZiB0aGlzIGRyaXZlciBjYW4gYmUgc3VtbWVyaXplZCBhcyBmb2xsb3dzOgorCisxOTkzOiBuY3IgZHJpdmVyIHdyaXR0ZW4gZm9yIDM4NmJzZCBhbmQgRnJlZUJTRCBieToKKyAgICAgICAgICBXb2xmZ2FuZyBTdGFuZ2xtZWllciAgICAgICAgPHdvbGZAY29sb2duZS5kZT4KKyAgICAgICAgICBTdGVmYW4gRXNzZXIgICAgICAgICAgICAgICAgPHNlQG1pLlVuaS1Lb2Vsbi5kZT4KKworMTk5NjogcG9ydCBvZiB0aGUgbmNyIGRyaXZlciB0byBMaW51eC0xLjIuMTMgYW5kIHJlbmFtZSBpdCBuY3I1M2M4eHguCisgICAgICAgICAgR2VyYXJkIFJvdWRpZXIKKworMTk5ODogbmV3IHN5bTUzYzh4eCBkcml2ZXIgZm9yIExpbnV4IGJhc2VkIG9uIExPQUQvU1RPUkUgaW5zdHJ1Y3Rpb24gYW5kIHRoYXQgCisgICAgICBhZGRzIGZ1bGwgc3VwcG9ydCBmb3IgdGhlIDg5NiBidXQgZHJvcHMgc3VwcG9ydCBmb3IgZWFybHkgTkNSIGRldmljZXMuCisgICAgICAgICAgR2VyYXJkIFJvdWRpZXIKKworMTk5OTogcG9ydCBvZiB0aGUgc3ltNTNjOHh4IGRyaXZlciB0byBGcmVlQlNEIGFuZCBzdXBwb3J0IGZvciB0aGUgTFNJNTNDMTAxMCAKKyAgICAgIDMzIE1IeiBhbmQgNjZNSHogVWx0cmEtMyBjb250cm9sbGVycy4gVGhlIG5ldyBkcml2ZXIgaXMgbmFtZWQgYHN5bScuCisgICAgICAgICAgR2VyYXJkIFJvdWRpZXIKKworMjAwMDogQWRkIHN1cHBvcnQgZm9yIGVhcmx5IE5DUiBkZXZpY2VzIHRvIEZyZWVCU0QgYHN5bScgZHJpdmVyLgorICAgICAgQnJlYWsgdGhlIGRyaXZlciBpbnRvIHNldmVyYWwgc291cmNlcyBhbmQgc2VwYXJhdGUgdGhlIE9TIGdsdWUgCisgICAgICBjb2RlIGZyb20gdGhlIGNvcmUgY29kZSB0aGF0IGNhbiBiZSBzaGFyZWQgYW1vbmcgZGlmZmVyZW50IE8vU2VzLgorICAgICAgV3JpdGUgYSBnbHVlIGNvZGUgZm9yIExpbnV4LgorICAgICAgICAgIEdlcmFyZCBSb3VkaWVyCisKKzIwMDQ6IFJlbW92ZSBGcmVlQlNEIGNvbXBhdGliaWxpdHkgY29kZS4gIFJlbW92ZSBzdXBwb3J0IGZvciB2ZXJzaW9ucyBvZgorICAgICAgTGludXggYmVmb3JlIDIuNi4gIFN0YXJ0IHVzaW5nIExpbnV4IGZhY2lsaXRpZXMuCisKK1RoaXMgUkVBRE1FIGZpbGUgYWRkcmVzc2VzIHRoZSBMaW51eCB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIuIFVuZGVyIEZyZWVCU0QsIAordGhlIGRyaXZlciBkb2N1bWVudGF0aW9uIGlzIHRoZSBzeW0uOCBtYW4gcGFnZS4KKworSW5mb3JtYXRpb24gYWJvdXQgbmV3IGNoaXBzIGlzIGF2YWlsYWJsZSBhdCBMU0lMT0dJQyB3ZWIgc2VydmVyOgorCisgICAgICAgICAgaHR0cDovL3d3dy5sc2lsb2dpYy5jb20vCisKK1NDU0kgc3RhbmRhcmQgZG9jdW1lbnRhdGlvbnMgYXJlIGF2YWlsYWJsZSBhdCBUMTAgc2l0ZToKKworICAgICAgICAgIGh0dHA6Ly93d3cudDEwLm9yZy8KKworVXNlZnVsIFNDU0kgdG9vbHMgd3JpdHRlbiBieSBFcmljIFlvdW5nZGFsZSBhcmUgcGFydCBvZiBtb3N0IExpbnV4IAorZGlzdHJpYnV0aW9uczoKKyAgIHNjc2lpbmZvOiAgICBjb21tYW5kIGxpbmUgdG9vbAorICAgc2NzaS1jb25maWc6IFRDTC9UayB0b29sIHVzaW5nIHNjc2lpbmZvCisKKzIuIFN1cHBvcnRlZCBjaGlwcyBhbmQgU0NTSSBmZWF0dXJlcworCitUaGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBzdXBwb3J0ZWQgZm9yIGFsbCBjaGlwczoKKworCVN5bmNocm9ub3VzIG5lZ290aWF0aW9uCisJRGlzY29ubmVjdGlvbgorCVRhZ2dlZCBjb21tYW5kIHF1ZXVpbmcKKwlTQ1NJIHBhcml0eSBjaGVja2luZworCVBDSSBNYXN0ZXIgcGFyaXR5IGNoZWNraW5nCisKK090aGVyIGZlYXR1cmVzIGRlcGVuZHMgb24gY2hpcCBjYXBhYmlsaXRpZXMuCitUaGUgZHJpdmVyIG5vdGFibHkgdXNlcyBvcHRpbWl6ZWQgU0NSSVBUUyBmb3IgZGV2aWNlcyB0aGF0IHN1cHBvcnQgCitMT0FEL1NUT1JFIGFuZCBoYW5kbGVzIFBIQVNFIE1JU01BVENIIGZyb20gU0NSSVBUUyBmb3IgZGV2aWNlcyB0aGF0IAorc3VwcG9ydCB0aGUgY29ycmVzcG9uZGluZyBmZWF0dXJlLgorCitUaGUgZm9sbG93aW5nIHRhYmxlIHNob3dzIHNvbWUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBjaGlwIGZhbWlseS4KKworICAgICAgIE9uIGJvYXJkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMT0FEL1NUT1JFICAgSEFSRFdBUkUKK0NoaXAgICBTRE1TIEJJT1MgICBXaWRlICAgU0NTSSBzdGQuICAgTWF4LiBzeW5jICAgU0NSSVBUUyAgICAgIFBIQVNFIE1JU01BVENICistLS0tICAgLS0tLS0tLS0tICAgLS0tLSAgIC0tLS0tLS0tLSAgIC0tLS0tLS0tLS0gIC0tLS0tLS0tLS0gICAtLS0tLS0tLS0tLS0tLQorODEwICAgICAgICBOICAgICAgICAgTiAgICAgIEZBU1QxMCAgICAxMCBNQi9zICAgICAgICBOICAgICAgICAgICAgIE4KKzgxMEEgICAgICAgTiAgICAgICAgIE4gICAgICBGQVNUMTAgICAgMTAgTUIvcyAgICAgICAgWSAgICAgICAgICAgICBOCis4MTUgICAgICAgIFkgICAgICAgICBOICAgICAgRkFTVDEwICAgIDEwIE1CL3MgICAgICAgIE4gICAgICAgICAgICAgTgorODI1ICAgICAgICBZICAgICAgICAgWSAgICAgIEZBU1QxMCAgICAyMCBNQi9zICAgICAgICBOICAgICAgICAgICAgIE4KKzgyNUEgICAgICAgWSAgICAgICAgIFkgICAgICBGQVNUMTAgICAgMjAgTUIvcyAgICAgICAgWSAgICAgICAgICAgICBOCis4NjAgICAgICAgIE4gICAgICAgICBOICAgICAgRkFTVDIwICAgIDIwIE1CL3MgICAgICAgIFkgICAgICAgICAgICAgTgorODc1ICAgICAgICBZICAgICAgICAgWSAgICAgIEZBU1QyMCAgICA0MCBNQi9zICAgICAgICBZICAgICAgICAgICAgIE4KKzg3NUEgICAgICAgWSAgICAgICAgIFkgICAgICBGQVNUMjAgICAgNDAgTUIvcyAgICAgICAgWSAgICAgICAgICAgICBZCis4NzYgICAgICAgIFkgICAgICAgICBZICAgICAgRkFTVDIwICAgIDQwIE1CL3MgICAgICAgIFkgICAgICAgICAgICAgTgorODk1ICAgICAgICBZICAgICAgICAgWSAgICAgIEZBU1Q0MCAgICA4MCBNQi9zICAgICAgICBZICAgICAgICAgICAgIE4KKzg5NUEgICAgICAgWSAgICAgICAgIFkgICAgICBGQVNUNDAgICAgODAgTUIvcyAgICAgICAgWSAgICAgICAgICAgICBZCis4OTYgICAgICAgIFkgICAgICAgICBZICAgICAgRkFTVDQwICAgIDgwIE1CL3MgICAgICAgIFkgICAgICAgICAgICAgWQorODk3ICAgICAgICBZICAgICAgICAgWSAgICAgIEZBU1Q0MCAgICA4MCBNQi9zICAgICAgICBZICAgICAgICAgICAgIFkKKzE1MTBEICAgICAgWSAgICAgICAgIFkgICAgICBGQVNUNDAgICAgODAgTUIvcyAgICAgICAgWSAgICAgICAgICAgICBZCisxMDEwICAgICAgIFkgICAgICAgICBZICAgICAgRkFTVDgwICAgMTYwIE1CL3MgICAgICAgIFkgICAgICAgICAgICAgWQorMTAxMF82NiogICBZICAgICAgICAgWSAgICAgIEZBU1Q4MCAgIDE2MCBNQi9zICAgICAgICBZICAgICAgICAgICAgIFkKKworKiBDaGlwIHN1cHBvcnRzIDMzTUh6IGFuZCA2Nk1IeiBQQ0kgYnVzIGNsb2NrLgorCisKK1N1bW1hcnkgb2Ygb3RoZXIgc3VwcG9ydGVkIGZlYXR1cmVzOgorCitNb2R1bGU6ICAgICAgICAgICAgICAgIGFsbG93IHRvIGxvYWQgdGhlIGRyaXZlcgorTWVtb3J5IG1hcHBlZCBJL086ICAgICBpbmNyZWFzZXMgcGVyZm9ybWFuY2UKK0NvbnRyb2wgY29tbWFuZHM6ICAgICAgd3JpdGUgb3BlcmF0aW9ucyB0byB0aGUgcHJvYyBTQ1NJIGZpbGUgc3lzdGVtCitEZWJ1Z2dpbmcgaW5mb3JtYXRpb246IHdyaXR0ZW4gdG8gc3lzbG9nIChleHBlcnQgb25seSkKK1NjYXR0ZXIgLyBnYXRoZXIKK1NoYXJlZCBpbnRlcnJ1cHQKK0Jvb3Qgc2V0dXAgY29tbWFuZHMKK1NlcmlhbCBOVlJBTTogICAgICAgICAgU3ltYmlvcyBhbmQgVGVrcmFtIGZvcm1hdHMKKworCiszLiBBZHZhbnRhZ2VzIG9mIHRoaXMgZHJpdmVyIGZvciBuZXdlciBjaGlwcy4KKworMy4xIE9wdGltaXplZCBTQ1NJIFNDUklQVFMuCisKK0FsbCBjaGlwcyBleGNlcHQgdGhlIDgxMCwgODE1IGFuZCA4MjUsIHN1cHBvcnQgbmV3IFNDU0kgU0NSSVBUUyBpbnN0cnVjdGlvbnMgCituYW1lZCBMT0FEIGFuZCBTVE9SRSB0aGF0IGFsbG93IHRvIG1vdmUgdXAgdG8gMSBEV09SRCBmcm9tL3RvIGFuIElPIHJlZ2lzdGVyIAordG8vZnJvbSBtZW1vcnkgbXVjaCBmYXN0ZXIgdGhhdCB0aGUgTU9WRSBNRU1PUlkgaW5zdHJ1Y3Rpb24gdGhhdCBpcyBzdXBwb3J0ZWQgCitieSB0aGUgNTNjN3h4IGFuZCA1M2M4eHggZmFtaWx5LgorCitUaGUgTE9BRC9TVE9SRSBpbnN0cnVjdGlvbnMgc3VwcG9ydCBhYnNvbHV0ZSBhbmQgRFNBIHJlbGF0aXZlIGFkZHJlc3NpbmcgCittb2Rlcy4gVGhlIFNDU0kgU0NSSVBUUyBoYWQgYmVlbiBlbnRpcmVseSByZXdyaXR0ZW4gdXNpbmcgTE9BRC9TVE9SRSBpbnN0ZWFkIAorb2YgTU9WRSBNRU1PUlkgaW5zdHJ1Y3Rpb25zLgorCitEdWUgdG8gdGhlIGxhY2sgb2YgTE9BRC9TVE9SRSBTQ1JJUFRTIGluc3RydWN0aW9ucyBieSBlYXJsaWVyIGNoaXBzLCB0aGlzIAorZHJpdmVyIGFsc28gaW5jb3Jwb3JhdGVzIGEgZGlmZmVyZW50IFNDUklQVFMgc2V0IGJhc2VkIG9uIE1FTU9SWSBNT1ZFLCBpbiAKK29yZGVyIHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIGVudGlyZSBTWU01M0M4WFggY2hpcHMgZmFtaWx5LgorCiszLjIgTmV3IGZlYXR1cmVzIGFwcGVhcmVkIHdpdGggdGhlIFNZTTUzQzg5NgorCitOZXdlciBjaGlwcyAoc2VlIGFib3ZlKSBhbGxvd3MgaGFuZGxpbmcgb2YgdGhlIHBoYXNlIG1pc21hdGNoIGNvbnRleHQgZnJvbSAKK1NDUklQVFMgKGF2b2lkcyB0aGUgcGhhc2UgbWlzbWF0Y2ggaW50ZXJydXB0IHRoYXQgc3RvcHMgdGhlIFNDU0kgcHJvY2Vzc29yIAordW50aWwgdGhlIEMgY29kZSBoYXMgc2F2ZWQgdGhlIGNvbnRleHQgb2YgdGhlIHRyYW5zZmVyKS4KKworVGhlIDg5NiBhbmQgMTAxMCBjaGlwcyBzdXBwb3J0IDY0IGJpdCBQQ0kgdHJhbnNhY3Rpb25zIGFuZCBhZGRyZXNzaW5nLCAKK3doaWxlIHRoZSA4OTVBIHN1cHBvcnRzIDMyIGJpdCBQQ0kgdHJhbnNhY3Rpb25zIGFuZCA2NCBiaXQgYWRkcmVzc2luZy4KK1RoZSBTQ1JJUFRTIHByb2Nlc3NvciBvZiB0aGVzZSBjaGlwcyBpcyBub3QgdHJ1ZSA2NCBiaXQsIGJ1dCB1c2VzIHNlZ21lbnQgCityZWdpc3RlcnMgZm9yIGJpdCAzMi02My4gQW5vdGhlciBpbnRlcmVzdGluZyBmZWF0dXJlIGlzIHRoYXQgTE9BRC9TVE9SRSAKK2luc3RydWN0aW9ucyB0aGF0IGFkZHJlc3MgdGhlIG9uLWNoaXAgUkFNICg4aykgcmVtYWluIGludGVybmFsIHRvIHRoZSBjaGlwLgorCis0LiBNZW1vcnkgbWFwcGVkIEkvTyB2ZXJzdXMgbm9ybWFsIEkvTworCitNZW1vcnkgbWFwcGVkIEkvTyBoYXMgbGVzcyBsYXRlbmN5IHRoYW4gbm9ybWFsIEkvTyBhbmQgaXMgdGhlIHJlY29tbWVuZGVkIAord2F5IGZvciBkb2luZyBJTyB3aXRoIFBDSSBkZXZpY2VzLiBNZW1vcnkgbWFwcGVkIEkvTyBzZWVtcyB0byB3b3JrIGZpbmUgb24gCittb3N0IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zLCBidXQgc29tZSBwb29ybHkgZGVzaWduZWQgY2hpcHNldHMgbWF5IGJyZWFrIAordGhpcyBmZWF0dXJlLiBBIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHByb3ZpZGVkIGZvciBub3JtYWwgSS9PIHRvIGJlIAordXNlZCBidXQgdGhlIGRyaXZlciBkZWZhdWx0cyB0byBNTUlPLgorCis1LiBUYWdnZWQgY29tbWFuZCBxdWV1ZWluZworCitRdWV1aW5nIG1vcmUgdGhhbiAxIGNvbW1hbmQgYXQgYSB0aW1lIHRvIGEgZGV2aWNlIGFsbG93cyBpdCB0byBwZXJmb3JtIAorb3B0aW1pemF0aW9ucyBiYXNlZCBvbiBhY3R1YWwgaGVhZCBwb3NpdGlvbnMgYW5kIGl0cyBtZWNoYW5pY2FsIAorY2hhcmFjdGVyaXN0aWNzLiBUaGlzIGZlYXR1cmUgbWF5IGFsc28gcmVkdWNlIGF2ZXJhZ2UgY29tbWFuZCBsYXRlbmN5LgorSW4gb3JkZXIgdG8gcmVhbGx5IGdhaW4gYWR2YW50YWdlIG9mIHRoaXMgZmVhdHVyZSwgZGV2aWNlcyBtdXN0IGhhdmUgCithIHJlYXNvbmFibGUgY2FjaGUgc2l6ZSAoTm8gbWlyYWNsZSBpcyB0byBiZSBleHBlY3RlZCBmb3IgYSBsb3ctZW5kIAoraGFyZCBkaXNrIHdpdGggMTI4IEtCIG9yIGxlc3MpLgorU29tZSBrb3duIG9sZCBTQ1NJIGRldmljZXMgZG8gbm90IHByb3Blcmx5IHN1cHBvcnQgdGFnZ2VkIGNvbW1hbmQgcXVldWluZy4KK0dlbmVyYWxseSwgZmlybXdhcmUgcmV2aXNpb25zIHRoYXQgZml4IHRoaXMga2luZCBvZiBwcm9ibGVtcyBhcmUgYXZhaWxhYmxlIAorYXQgcmVzcGVjdGl2ZSB2ZW5kb3Igd2ViL2Z0cCBzaXRlcy4KK0FsbCBJIGNhbiBzYXkgaXMgdGhhdCBJIG5ldmVyIGhhdmUgaGFkIHByb2JsZW0gd2l0aCB0YWdnZWQgcXVldWluZyB1c2luZyAKK3RoaXMgZHJpdmVyIGFuZCBpdHMgcHJlZGVjZXNzb3JzLiBIYXJkIGRpc2tzIHRoYXQgYmVoYXZlZCBjb3JyZWN0bHkgZm9yIAorbWUgdXNpbmcgdGFnZ2VkIGNvbW1hbmRzIGFyZSB0aGUgZm9sbG93aW5nOgorCistIElCTSBTMTIgMDY2MgorLSBDb25uZXIgMTA4MFMKKy0gUXVhbnR1bSBBdGxhcyBJCistIFF1YW50dW0gQXRsYXMgSUkKKy0gU2VhZ2F0ZSBDaGVldGFoIEkKKy0gUXVhbnR1bSBWaWtpbmcgSUkKKy0gSUJNIERSVlMKKy0gUXVhbnR1bSBBdGxhcyBJVgorLSBTZWFnYXRlIENoZWV0YWggSUkKKworSWYgeW91ciBjb250cm9sbGVyIGhhcyBOVlJBTSwgeW91IGNhbiBjb25maWd1cmUgdGhpcyBmZWF0dXJlIHBlciB0YXJnZXQgCitmcm9tIHRoZSB1c2VyIHNldHVwIHRvb2wuIFRoZSBUZWtyYW0gU2V0dXAgcHJvZ3JhbSBhbGxvd3MgdG8gdHVuZSB0aGUgCittYXhpbXVtIG51bWJlciBvZiBxdWV1ZWQgY29tbWFuZHMgdXAgdG8gMzIuIFRoZSBTeW1iaW9zIFNldHVwIG9ubHkgYWxsb3dzIAordG8gZW5hYmxlIG9yIGRpc2FibGUgdGhpcyBmZWF0dXJlLgorCitUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2ltdWx0YW5lb3VzIHRhZ2dlZCBjb21tYW5kcyBxdWV1ZWQgdG8gYSBkZXZpY2UKK2lzIGN1cnJlbnRseSBzZXQgdG8gMTYgYnkgZGVmYXVsdC4gIFRoaXMgdmFsdWUgaXMgc3VpdGFibGUgZm9yIG1vc3QgU0NTSQorZGlza3MuICBXaXRoIGxhcmdlIFNDU0kgZGlza3MgKD49IDJHQiwgY2FjaGUgPj0gNTEyS0IsIGF2ZXJhZ2Ugc2VlayB0aW1lCis8PSAxMCBtcyksIHVzaW5nIGEgbGFyZ2VyIHZhbHVlIG1heSBnaXZlIGJldHRlciBwZXJmb3JtYW5jZXMuCisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIHVwIHRvIDI1NSBjb21tYW5kcyBwZXIgZGV2aWNlLCBhbmQgYnV0IHVzaW5nIG1vcmUgdGhhbiAKKzY0IGlzIGdlbmVyYWxseSBub3Qgd29ydGgtd2hpbGUsIHVubGVzcyB5b3UgYXJlIHVzaW5nIGEgdmVyeSBsYXJnZSBkaXNrIG9yIAorZGlzayBhcnJheXMuIEl0IGlzIG5vdGljZWFibGUgdGhhdCBtb3N0IG9mIHJlY2VudCBoYXJkIGRpc2tzIHNlZW0gbm90IHRvIAorYWNjZXB0IG1vcmUgdGhhbiA2NCBzaW11bHRhbmVvdXMgY29tbWFuZHMuIFNvLCB1c2luZyBtb3JlIHRoYW4gNjQgcXVldWVkIAorY29tbWFuZHMgaXMgcHJvYmFibHkganVzdCByZXNvdXJjZSB3YXN0aW5nLgorCitJZiB5b3VyIGNvbnRyb2xsZXIgZG9lcyBub3QgaGF2ZSBOVlJBTSBvciBpZiBpdCBpcyBtYW5hZ2VkIGJ5IHRoZSBTRE1TIAorQklPUy9TRVRVUCwgeW91IGNhbiBjb25maWd1cmUgdGFnZ2VkIHF1ZXVlaW5nIGZlYXR1cmUgYW5kIGRldmljZSBxdWV1ZSAKK2RlcHRocyBmcm9tIHRoZSBib290IGNvbW1hbmQtbGluZS4gRm9yIGV4YW1wbGU6CisKKyAgc3ltNTNjOHh4PXRhZ3M6NC90MnQzcTE1LXQ0cTcvdDF1MHEzMgorCit3aWxsIHNldCB0YWdnZWQgY29tbWFuZHMgcXVldWUgZGVwdGhzIGFzIGZvbGxvdzoKKworLSB0YXJnZXQgMiAgYWxsIGx1bnMgIG9uIGNvbnRyb2xsZXIgMCAtLT4gMTUKKy0gdGFyZ2V0IDMgIGFsbCBsdW5zICBvbiBjb250cm9sbGVyIDAgLS0+IDE1CistIHRhcmdldCA0ICBhbGwgbHVucyAgb24gY29udHJvbGxlciAwIC0tPiAgNworLSB0YXJnZXQgMSAgbHVuIDAgICAgIG9uIGNvbnRyb2xsZXIgMSAtLT4gMzIKKy0gYWxsIG90aGVyIHRhcmdldC9sdW4gICAgICAgICAgICAgICAgLS0+ICA0CisKK0luIHNvbWUgc3BlY2lhbCBjb25kaXRpb25zLCBzb21lIFNDU0kgZGlzayBmaXJtd2FyZXMgbWF5IHJldHVybiBhCitRVUVVRSBGVUxMIHN0YXR1cyBmb3IgYSBTQ1NJIGNvbW1hbmQuIFRoaXMgYmVoYXZpb3VyIGlzIG1hbmFnZWQgYnkgdGhlCitkcml2ZXIgdXNpbmcgdGhlIGZvbGxvd2luZyBoZXVyaXN0aWM6CisKKy0gRWFjaCB0aW1lIGEgUVVFVUUgRlVMTCBzdGF0dXMgaXMgcmV0dXJuZWQsIHRhZ2dlZCBxdWV1ZSBkZXB0aCBpcyByZWR1Y2VkIAorICB0byB0aGUgYWN0dWFsIG51bWJlciBvZiBkaXNjb25uZWN0ZWQgY29tbWFuZHMuIAorCistIEV2ZXJ5IDIwMCBzdWNjZXNzZnVsbHkgY29tcGxldGVkIFNDU0kgY29tbWFuZHMsIGlmIGFsbG93ZWQgYnkgdGhlCisgIGN1cnJlbnQgbGltaXQsIHRoZSBtYXhpbXVtIG51bWJlciBvZiBxdWV1ZWFibGUgY29tbWFuZHMgaXMgaW5jcmVtZW50ZWQuCisKK1NpbmNlIFFVRVVFIEZVTEwgc3RhdHVzIHJlY2VwdGlvbiBhbmQgaGFuZGxpbmcgaXMgcmVzb3VyY2Ugd2FzdGluZywgdGhlIAorZHJpdmVyIG5vdGlmaWVzIGJ5IGRlZmF1bHQgdGhpcyBwcm9ibGVtIHRvIHVzZXIgYnkgaW5kaWNhdGluZyB0aGUgYWN0dWFsIAorbnVtYmVyIG9mIGNvbW1hbmRzIHVzZWQgYW5kIHRoZWlyIHN0YXR1cywgYXMgd2VsbCBhcyBpdHMgZGVjaXNpb24gb24gdGhlIAorZGV2aWNlIHF1ZXVlIGRlcHRoIGNoYW5nZS4KK1RoZSBoZXVyaXN0aWMgdXNlZCBieSB0aGUgZHJpdmVyIGluIGhhbmRsaW5nIFFVRVVFIEZVTEwgZW5zdXJlcyB0aGF0IHRoZSAKK2ltcGFjdCBvbiBwZXJmb3JtYW5jZXMgaXMgbm90IHRvbyBiYWQuIFlvdSBjYW4gZ2V0IHJpZCBvZiB0aGUgbWVzc2FnZXMgYnkgCitzZXR0aW5nIHZlcmJvc2UgbGV2ZWwgdG8gemVybywgYXMgZm9sbG93OgorCisxc3QgbWV0aG9kOiBib290IHlvdXIgc3lzdGVtIHVzaW5nICdzeW01M2M4eHg9dmVyYjowJyBvcHRpb24uCisybmQgbWV0aG9kOiBhcHBseSAic2V0dmVyYm9zZSAwIiBjb250cm9sIGNvbW1hbmQgdG8gdGhlIHByb2MgZnMgZW50cnkgCisgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHRvIHlvdXIgY29udHJvbGxlciBhZnRlciBib290LXVwLgorCis2LiBQYXJpdHkgY2hlY2tpbmcKKworVGhlIGRyaXZlciBzdXBwb3J0cyBTQ1NJIHBhcml0eSBjaGVja2luZyBhbmQgUENJIGJ1cyBtYXN0ZXIgcGFyaXR5CitjaGVja2luZy4gIFRoZXNlIGZlYXR1cmVzIG11c3QgYmUgZW5hYmxlZCBpbiBvcmRlciB0byBlbnN1cmUgc2FmZQorZGF0YSB0cmFuc2ZlcnMuICBTb21lIGZsYXdlZCBkZXZpY2VzIG9yIG1vdGhlciBib2FyZHMgbWF5IGhhdmUgcHJvYmxlbXMKK3dpdGggcGFyaXR5LiAgVGhlIG9wdGlvbnMgdG8gZGVmZWF0IHBhcml0eSBjaGVja2luZyBoYXZlIGJlZW4gcmVtb3ZlZAorZnJvbSB0aGUgZHJpdmVyLgorCis3LiBQcm9maWxpbmcgaW5mb3JtYXRpb24KKworVGhpcyBkcml2ZXIgZG9lcyBub3QgcHJvdmlkZSBwcm9maWxpbmcgaW5mb3JtYXRpb25zIGFzIGRpZCBpdHMgcHJlZGVjZXNzb3JzLgorVGhpcyBmZWF0dXJlIHdhcyBub3QgdGhpcyB1c2VmdWwgYW5kIGFkZGVkIGNvbXBsZXhpdHkgdG8gdGhlIGNvZGUuIAorQXMgdGhlIGRyaXZlciBjb2RlIGdvdCBtb3JlIGNvbXBsZXgsIEkgaGF2ZSBkZWNpZGVkIHRvIHJlbW92ZSBldmVyeXRoaW5nIAordGhhdCBkaWRuJ3Qgc2VlbSBhY3R1YWxseSB1c2VmdWwuCisKKzguIENvbnRyb2wgY29tbWFuZHMKKworQ29udHJvbCBjb21tYW5kcyBjYW4gYmUgc2VudCB0byB0aGUgZHJpdmVyIHdpdGggd3JpdGUgb3BlcmF0aW9ucyB0bwordGhlIHByb2MgU0NTSSBmaWxlIHN5c3RlbS4gVGhlIGdlbmVyaWMgY29tbWFuZCBzeW50YXggaXMgdGhlCitmb2xsb3dpbmc6CisKKyAgICAgIGVjaG8gIjx2ZXJiPiA8cGFyYW1ldGVycz4iID4vcHJvYy9zY3NpL3N5bTUzYzh4eC8wCisgICAgICAoYXNzdW1lcyBjb250cm9sbGVyIG51bWJlciBpcyAwKQorCitVc2luZyAiYWxsIiBmb3IgIjx0YXJnZXQ+IiBwYXJhbWV0ZXIgd2l0aCB0aGUgY29tbWFuZHMgYmVsb3cgd2lsbAorYXBwbHkgdG8gYWxsIHRhcmdldHMgb2YgdGhlIFNDU0kgY2hhaW4gKGV4Y2VwdCB0aGUgY29udHJvbGxlcikuCisKK0F2YWlsYWJsZSBjb21tYW5kczoKKworOC4xIFNldCBtaW5pbXVtIHN5bmNocm9ub3VzIHBlcmlvZCBmYWN0b3IKKworICAgIHNldHN5bmMgPHRhcmdldD4gPHBlcmlvZCBmYWN0b3I+CisKKyAgICB0YXJnZXQ6ICAgIHRhcmdldCBudW1iZXIKKyAgICBwZXJpb2Q6ICAgIG1pbmltdW0gc3luY2hyb25vdXMgcGVyaW9kLgorICAgICAgICAgICAgICAgTWF4aW11bSBzcGVlZCA9IDEwMDAvKDQqcGVyaW9kIGZhY3RvcikgZXhjZXB0IGZvciBzcGVjaWFsCisgICAgICAgICAgICAgICBjYXNlcyBiZWxvdy4KKworICAgIFNwZWNpZnkgYSBwZXJpb2Qgb2YgMCwgdG8gZm9yY2UgYXN5bmNocm9ub3VzIHRyYW5zZmVyIG1vZGUuCisKKyAgICAgICA5IG1lYW5zIDEyLjUgbmFuby1zZWNvbmRzIHN5bmNocm9ub3VzIHBlcmlvZAorICAgICAgMTAgbWVhbnMgMjUgbmFuby1zZWNvbmRzIHN5bmNocm9ub3VzIHBlcmlvZAorICAgICAgMTEgbWVhbnMgMzAgbmFuby1zZWNvbmRzIHN5bmNocm9ub3VzIHBlcmlvZAorICAgICAgMTIgbWVhbnMgNTAgbmFuby1zZWNvbmRzIHN5bmNocm9ub3VzIHBlcmlvZAorCis4LjIgU2V0IHdpZGUgc2l6ZQorCisgICAgc2V0d2lkZSA8dGFyZ2V0PiA8c2l6ZT4KKworICAgIHRhcmdldDogICAgdGFyZ2V0IG51bWJlcgorICAgIHNpemU6ICAgICAgMD04IGJpdHMsIDE9MTZiaXRzCisKKzguMyBTZXQgbWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCB0YWdnZWQgY29tbWFuZHMKKyAKKyAgICBzZXR0YWdzIDx0YXJnZXQ+IDx0YWdzPgorCisgICAgdGFyZ2V0OiAgICB0YXJnZXQgbnVtYmVyCisgICAgdGFnczogICAgICBudW1iZXIgb2YgY29uY3VycmVudCB0YWdnZWQgY29tbWFuZHMKKyAgICAgICAgICAgICAgIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiBjb25maWd1cmVkIChkZWZhdWx0OiAxNikKKworOC40IFNldCBkZWJ1ZyBtb2RlCisKKyAgICBzZXRkZWJ1ZyA8bGlzdCBvZiBkZWJ1ZyBmbGFncz4KKworICAgIEF2YWlsYWJsZSBkZWJ1ZyBmbGFnczoKKyAgICAgICAgYWxsb2M6ICAgcHJpbnQgaW5mbyBhYm91dCBtZW1vcnkgYWxsb2NhdGlvbnMgKGNjYiwgbGNiKQorICAgICAgICBxdWV1ZTogICBwcmludCBpbmZvIGFib3V0IGluc2VydGlvbnMgaW50byB0aGUgY29tbWFuZCBzdGFydCBxdWV1ZQorICAgICAgICByZXN1bHQ6ICBwcmludCBzZW5zZSBkYXRhIG9uIENIRUNLIENPTkRJVElPTiBzdGF0dXMKKyAgICAgICAgc2NhdHRlcjogcHJpbnQgaW5mbyBhYm91dCB0aGUgc2NhdHRlciBwcm9jZXNzCisgICAgICAgIHNjcmlwdHM6IHByaW50IGluZm8gYWJvdXQgdGhlIHNjcmlwdCBiaW5kaW5nIHByb2Nlc3MKKwl0aW55OiAgICBwcmludCBtaW5pbWFsIGRlYnVnZ2luZyBpbmZvcm1hdGlvbgorCXRpbWluZzogIHByaW50IHRpbWluZyBpbmZvcm1hdGlvbiBvZiB0aGUgTkNSIGNoaXAKKwluZWdvOiAgICBwcmludCBpbmZvcm1hdGlvbiBhYm91dCBTQ1NJIG5lZ290aWF0aW9ucworCXBoYXNlOiAgIHByaW50IGluZm9ybWF0aW9uIG9uIHNjcmlwdCBpbnRlcnJ1cHRpb25zCisKKyAgICBVc2UgInNldGRlYnVnIiB3aXRoIG5vIGFyZ3VtZW50IHRvIHJlc2V0IGRlYnVnIGZsYWdzLgorCisKKzguNSBTZXQgZmxhZyAobm9fZGlzYykKKyAKKyAgICBzZXRmbGFnIDx0YXJnZXQ+IDxmbGFnPgorCisgICAgdGFyZ2V0OiAgICB0YXJnZXQgbnVtYmVyCisKKyAgICBGb3IgdGhlIG1vbWVudCwgb25seSBvbmUgZmxhZyBpcyBhdmFpbGFibGU6CisKKyAgICAgICAgbm9fZGlzYzogICBub3QgYWxsb3cgdGFyZ2V0IHRvIGRpc2Nvbm5lY3QuCisKKyAgICBEbyBub3Qgc3BlY2lmeSBhbnkgZmxhZyBpbiBvcmRlciB0byByZXNldCB0aGUgZmxhZy4gRm9yIGV4YW1wbGU6CisgICAgLSBzZXRmbGFnIDQKKyAgICAgIHdpbGwgcmVzZXQgbm9fZGlzYyBmbGFnIGZvciB0YXJnZXQgNCwgc28gd2lsbCBhbGxvdyBpdCBkaXNjb25uZWN0aW9ucy4KKyAgICAtIHNldGZsYWcgYWxsCisgICAgICB3aWxsIGFsbG93IGRpc2Nvbm5lY3Rpb24gZm9yIGFsbCBkZXZpY2VzIG9uIHRoZSBTQ1NJIGJ1cy4KKworCis4LjYgU2V0IHZlcmJvc2UgbGV2ZWwKKworICAgIHNldHZlcmJvc2UgI2xldmVsCisKKyAgICBUaGUgZHJpdmVyIGRlZmF1bHQgdmVyYm9zZSBsZXZlbCBpcyAxLiBUaGlzIGNvbW1hbmQgYWxsb3dzIHRvIGNoYW5nZSAKKyAgICB0aCBkcml2ZXIgdmVyYm9zZSBsZXZlbCBhZnRlciBib290LXVwLgorCis4LjcgUmVzZXQgYWxsIGxvZ2ljYWwgdW5pdHMgb2YgYSB0YXJnZXQKKworICAgIHJlc2V0ZGV2IDx0YXJnZXQ+CisKKyAgICB0YXJnZXQ6ICAgIHRhcmdldCBudW1iZXIKKyAgICBUaGUgZHJpdmVyIHdpbGwgdHJ5IHRvIHNlbmQgYSBCVVMgREVWSUNFIFJFU0VUIG1lc3NhZ2UgdG8gdGhlIHRhcmdldC4KKworOC44IEFib3J0IGFsbCB0YXNrcyBvZiBhbGwgbG9naWNhbCB1bml0cyBvZiBhIHRhcmdldAorCisgICAgY2xlYXJkZXYgPHRhcmdldD4KKworICAgIHRhcmdldDogICAgdGFyZ2V0IG51bWJlcgorICAgIFRoZSBkcml2ZXIgd2lsbCB0cnkgdG8gc2VuZCBhIEFCT1JUIG1lc3NhZ2UgdG8gYWxsIHRoZSBsb2dpY2FsIHVuaXRzIAorICAgIG9mIHRoZSB0YXJnZXQuCisKKworOS4gQ29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzCisKK1VuZGVyIGtlcm5lbCBjb25maWd1cmF0aW9uIHRvb2xzIChtYWtlIG1lbnVjb25maWcsIGZvciBleGFtcGxlKSwgaXQgaXMgCitwb3NzaWJsZSB0byBjaGFuZ2Ugc29tZSBkZWZhdWx0IGRyaXZlciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCitJZiB0aGUgZmlybXdhcmUgb2YgYWxsIHlvdXIgZGV2aWNlcyBpcyBwZXJmZWN0IGVub3VnaCwgYWxsIHRoZQorZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgY2FuIGJlIGVuYWJsZWQgYXQgc3RhcnQtdXAuIEhvd2V2ZXIsCitpZiBvbmx5IG9uZSBoYXMgYSBmbGF3IGZvciBzb21lIFNDU0kgZmVhdHVyZSwgeW91IGNhbiBkaXNhYmxlIHRoZQorc3VwcG9ydCBieSB0aGUgZHJpdmVyIG9mIHRoaXMgZmVhdHVyZSBhdCBsaW51eCBzdGFydC11cCBhbmQgZW5hYmxlCit0aGlzIGZlYXR1cmUgYWZ0ZXIgYm9vdC11cCBvbmx5IGZvciBkZXZpY2VzIHRoYXQgc3VwcG9ydCBpdCBzYWZlbHkuCisKK0NvbmZpZ3VyYXRpb24gcGFyYW1ldGVyczoKKworVXNlIG5vcm1hbCBJTyAgICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdCBhbnN3ZXI6IG4pCisgICAgQW5zd2VyICJ5IiBpZiB5b3Ugc3VzcGVjdCB5b3VyIG1vdGhlciBib2FyZCB0byBub3QgYWxsb3cgbWVtb3J5IG1hcHBlZCBJL08uCisgICAgTWF5IHNsb3cgZG93biBwZXJmb3JtYW5jZSBhIGxpdHRsZS4KKworRGVmYXVsdCB0YWdnZWQgY29tbWFuZCBxdWV1ZSBkZXB0aCAgICAoZGVmYXVsdCBhbnN3ZXI6IDE2KQorICAgIEVudGVyaW5nIDAgZGVmYXVsdHMgdG8gdGFnZ2VkIGNvbW1hbmRzIG5vdCBiZWluZyB1c2VkLgorICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBzcGVjaWZpZWQgZnJvbSB0aGUgYm9vdCBjb21tYW5kIGxpbmUuCisKK01heGltdW0gbnVtYmVyIG9mIHF1ZXVlZCBjb21tYW5kcyAgICAgKGRlZmF1bHQgYW5zd2VyOiAzMikKKyAgICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIHNwZWNpZnkgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRhZ2dlZCBjb21tYW5kcyAKKyAgICB0aGF0IGNhbiBiZSBxdWV1ZWQgdG8gYSBkZXZpY2UuIFRoZSBtYXhpbXVtIHN1cHBvcnRlZCB2YWx1ZSBpcyAyNTUuCisKK1N5bmNocm9ub3VzIHRyYW5zZmVycyBmcmVxdWVuY3kgICAgICAgKGRlZmF1bHQgYW5zd2VyOiA4MCkKKyAgICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIHNwZWNpZnkgdGhlIGZyZXF1ZW5jeSBpbiBNSHogdGhlIGRyaXZlciAKKyAgICB3aWxsIHVzZSBhdCBib290IHRpbWUgZm9yIHN5bmNocm9ub3VzIGRhdGEgdHJhbnNmZXIgbmVnb3RpYXRpb25zLgorICAgIDAgbWVhbnMgImFzeW5jaHJvbm91cyBkYXRhIHRyYW5zZmVycyIuCisKKzEwLiBCb290IHNldHVwIGNvbW1hbmRzCisKKzEwLjEgU3ludGF4CisKK1NldHVwIGNvbW1hbmRzIGNhbiBiZSBwYXNzZWQgdG8gdGhlIGRyaXZlciBlaXRoZXIgYXQgYm9vdCB0aW1lIG9yIGFzCitwYXJhbWV0ZXJzIHRvIG1vZHByb2JlLCBhcyBkZXNjcmliZWQgaW4gRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKKworRXhhbXBsZSBvZiBib290IHNldHVwIGNvbW1hbmQgdW5kZXIgbGlsbyBwcm9tcHQ6CisKK2xpbG86IGxpbnV4IHJvb3Q9L2Rldi9zZGEyIHN5bTUzYzh4eC5jbWRfcGVyX2x1bj00IHN5bTUzYzh4eC5zeW5jPTEwIHN5bTUzYzh4eC5kZWJ1Zz0weDIwMAorCistIGVuYWJsZSB0YWdnZWQgY29tbWFuZHMsIHVwIHRvIDQgdGFnZ2VkIGNvbW1hbmRzIHF1ZXVlZC4KKy0gc2V0IHN5bmNocm9ub3VzIG5lZ290aWF0aW9uIHNwZWVkIHRvIDEwIE1lZ2EtdHJhbnNmZXJzIC8gc2Vjb25kLgorLSBzZXQgREVCVUdfTkVHTyBmbGFnLgorCitUaGUgZm9sbG93aW5nIGNvbW1hbmQgd2lsbCBpbnN0YWxsIHRoZSBkcml2ZXIgbW9kdWxlIHdpdGggdGhlIHNhbWUKK29wdGlvbnMgYXMgYWJvdmUuCisKKyAgICBtb2Rwcm9iZSBzeW01M2M4eHggY21kX3Blcl9sdW49NCBzeW5jPTEwIGRlYnVnPTB4MjAwCisKKzEwLjIgQXZhaWxhYmxlIGFyZ3VtZW50cworCisxMC4yLjEgIERlZmF1bHQgbnVtYmVyIG9mIHRhZ2dlZCBjb21tYW5kcworICAgICAgICBjbWRfcGVyX2x1bj0wIChvciBjbWRfcGVyX2x1bj0xKSB0YWdnZWQgY29tbWFuZCBxdWV1aW5nIGRpc2FibGVkCisgICAgICAgIGNtZF9wZXJfbHVuPSN0YWdzICgjdGFncyA+IDEpIHRhZ2dlZCBjb21tYW5kIHF1ZXVpbmcgZW5hYmxlZAorICAjdGFncyB3aWxsIGJlIHRydW5jYXRlZCB0byB0aGUgbWF4IHF1ZXVlZCBjb21tYW5kcyBjb25maWd1cmF0aW9uIHBhcmFtZXRlci4KKworMTAuMi4yICBEZXRhaWxlZCBjb250cm9sIG9mIHRhZ2dlZCBjb21tYW5kcworICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIHNwZWNpZnkgYSBjb21tYW5kIHF1ZXVlIGRlcHRoIGZvciBlYWNoIGRldmljZSAKKyAgdGhhdCBzdXBwb3J0cyB0YWdnZWQgY29tbWFuZCBxdWV1ZWluZy4KKyAgRXhhbXBsZToKKyAgICAgIHRhZ19jdHJsPTEwL3QydDNxMTYtdDVxMjQvdDF1MnEzMgorICB3aWxsIHNldCBkZXZpY2VzIHF1ZXVlIGRlcHRoIGFzIGZvbGxvdzoKKyAgICAgIC0gY29udHJvbGxlciAjMCB0YXJnZXQgIzIgYW5kIHRhcmdldCAjMyAgICAgICAgICAgICAgICAgIC0+IDE2IGNvbW1hbmRzLAorICAgICAgLSBjb250cm9sbGVyICMwIHRhcmdldCAjNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gMjQgY29tbWFuZHMsCisgICAgICAtIGNvbnRyb2xsZXIgIzEgdGFyZ2V0ICMxIGxvZ2ljYWwgdW5pdCAjMiAgICAgICAgICAgICAgICAtPiAzMiBjb21tYW5kcywKKyAgICAgIC0gYWxsIG90aGVyIGxvZ2ljYWwgdW5pdHMgKGFsbCB0YXJnZXRzLCBhbGwgY29udHJvbGxlcnMpIC0+IDEwIGNvbW1hbmRzLgorCisxMC4yLjMgQnVyc3QgbWF4CisgICAgICAgIGJ1cnN0PTAgICAgYnVyc3QgZGlzYWJsZWQKKyAgICAgICAgYnVyc3Q9MjU1ICBnZXQgYnVyc3QgbGVuZ3RoIGZyb20gaW5pdGlhbCBJTyByZWdpc3RlciBzZXR0aW5ncy4KKyAgICAgICAgYnVyc3Q9I3ggICBidXJzdCBlbmFibGVkICgxPDwjeCBidXJzdCB0cmFuc2ZlcnMgbWF4KQorICAjeCBpcyBhbiBpbnRlZ2VyIHZhbHVlIHdoaWNoIGlzIGxvZyBiYXNlIDIgb2YgdGhlIGJ1cnN0IHRyYW5zZmVycyBtYXguCisgIEJ5IGRlZmF1bHQgdGhlIGRyaXZlciB1c2VzIHRoZSBtYXhpbXVtIHZhbHVlIHN1cHBvcnRlZCBieSB0aGUgY2hpcC4KKworMTAuMi40IExFRCBzdXBwb3J0CisgICAgICAgIGxlZD0xICAgICAgZW5hYmxlICBMRUQgc3VwcG9ydAorICAgICAgICBsZWQ9MCAgICAgIGRpc2FibGUgTEVEIHN1cHBvcnQKKyAgRG8gbm90IGVuYWJsZSBMRUQgc3VwcG9ydCBpZiB5b3VyIHNjc2kgYm9hcmQgZG9lcyBub3QgdXNlIFNETVMgQklPUy4KKyAgKFNlZSAnQ29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzJykKKworMTAuMi40IERpZmZlcmVudGlhbCBtb2RlCisgICAgICAgIGRpZmY9MAluZXZlciBzZXQgdXAgZGlmZiBtb2RlCisgICAgICAgIGRpZmY9MQlzZXQgdXAgZGlmZiBtb2RlIGlmIEJJT1Mgc2V0IGl0CisgICAgICAgIGRpZmY9MglhbHdheXMgc2V0IHVwIGRpZmYgbW9kZQorICAgICAgICBkaWZmPTMJc2V0IGRpZmYgbW9kZSBpZiBHUElPMyBpcyBub3Qgc2V0CisKKzEwLjIuNSBJUlEgbW9kZQorICAgICAgICBpcnFtPTAgICAgIGFsd2F5cyBvcGVuIGRyYWluCisgICAgICAgIGlycW09MSAgICAgc2FtZSBhcyBpbml0aWFsIHNldHRpbmdzIChhc3N1bWVkIEJJT1Mgc2V0dGluZ3MpCisgICAgICAgIGlycW09MiAgICAgYWx3YXlzIHRvdGVtIHBvbGUKKworMTAuMi42IENoZWNrIFNDU0kgQlVTIAorICAgICAgICBidXNjaGs9PG9wdGlvbiBiaXRzPgorCisgICAgQXZhaWxhYmxlIG9wdGlvbiBiaXRzOgorICAgICAgICAweDA6ICAgTm8gY2hlY2suCisgICAgICAgIDB4MTogICBDaGVjayBhbmQgZG8gbm90IGF0dGFjaCB0aGUgY29udHJvbGxlciBvbiBlcnJvci4gIAorICAgICAgICAweDI6ICAgQ2hlY2sgYW5kIGp1c3Qgd2FybiBvbiBlcnJvci4KKworMTAuMi43IFN1Z2dlc3QgYSBkZWZhdWx0IFNDU0kgaWQgZm9yIGhvc3RzCisgICAgICAgIGhvc3RpZD0yNTUJbm8gaWQgc3VnZ2VzdGVkLgorICAgICAgICBob3N0aWQ9I3ggICAoMCA8IHggPCA3KSB4IHN1Z2dlc3RlZCBmb3IgaG9zdHMgU0NTSSBpZC4KKworICAgIElmIGEgaG9zdCBTQ1NJIGlkIGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBOVlJBTSwgdGhlIGRyaXZlciB3aWxsIGlnbm9yZSAKKyAgICBhbnkgdmFsdWUgc3VnZ2VzdGVkIGFzIGJvb3Qgb3B0aW9uLiBPdGhlcndpc2UsIGlmIGEgc3VnZ2VzdGVkIHZhbHVlIAorICAgIGRpZmZlcmVudCBmcm9tIDI1NSBoYXMgYmVlbiBzdXBwbGllZCwgaXQgd2lsbCB1c2UgaXQuIE90aGVyd2lzZSwgaXQgd2lsbCAKKyAgICB0cnkgdG8gZGVkdWNlIHRoZSB2YWx1ZSBwcmV2aW91c2x5IHNldCBpbiB0aGUgaGFyZHdhcmUgYW5kIHVzZSB2YWx1ZSAKKyAgICA3IGlmIHRoZSBoYXJkd2FyZSB2YWx1ZSBpcyB6ZXJvLgorCisxMC4yLjggIFZlcmJvc2l0eSBsZXZlbAorICAgICAgICB2ZXJiPTAgICAgIG1pbmltYWwKKyAgICAgICAgdmVyYj0xICAgICBub3JtYWwKKyAgICAgICAgdmVyYj0yICAgICB0b28gbXVjaAorCisxMC4yLjkgRGVidWcgbW9kZQorICAgICAgICBkZWJ1Zz0wCSBjbGVhciBkZWJ1ZyBmbGFncworICAgICAgICBkZWJ1Zz0jeCAgIHNldCBkZWJ1ZyBmbGFncworICAjeCBpcyBhbiBpbnRlZ2VyIHZhbHVlIGNvbWJpbmluZyB0aGUgZm9sbG93aW5nIHBvd2VyLW9mLTIgdmFsdWVzOgorICBERUJVR19BTExPQyAgICAgICAweDEKKyAgREVCVUdfUEhBU0UgICAgICAgMHgyCisgIERFQlVHX1BPTEwgICAgICAgIDB4NAorICBERUJVR19RVUVVRSAgICAgICAweDgKKyAgREVCVUdfUkVTVUxUICAgICAweDEwCisgIERFQlVHX1NDQVRURVIgICAgMHgyMAorICBERUJVR19TQ1JJUFQgICAgIDB4NDAKKyAgREVCVUdfVElOWSAgICAgICAweDgwCisgIERFQlVHX1RJTUlORyAgICAweDEwMAorICBERUJVR19ORUdPICAgICAgMHgyMDAKKyAgREVCVUdfVEFHUyAgICAgIDB4NDAwCisgIERFQlVHX0ZSRUVaRSAgICAweDgwMAorICBERUJVR19SRVNUQVJUICAweDEwMDAKKworICBZb3UgY2FuIHBsYXkgc2FmZWx5IHdpdGggREVCVUdfTkVHTy4gSG93ZXZlciwgc29tZSBvZiB0aGVzZSBmbGFncyBtYXkgCisgIGdlbmVyYXRlIGJ1bmNoZXMgb2Ygc3lzbG9nIG1lc3NhZ2VzLiAKKworMTAuMi4xMCBTZXR0bGUgZGVsYXkKKyAgICAgICAgc2V0dGxlPW4JZGVsYXkgZm9yIG4gc2Vjb25kcworCisgIEFmdGVyIGEgYnVzIHJlc2V0LCB0aGUgZHJpdmVyIHdpbGwgZGVsYXkgZm9yIG4gc2Vjb25kcyBiZWZvcmUgdGFsa2luZworICB0byBhbnkgZGV2aWNlIG9uIHRoZSBidXMuICBUaGUgZGVmYXVsdCBpcyAzIHNlY29uZHMgYW5kIHNhZmUgbW9kZSB3aWxsCisgIGRlZmF1bHQgaXQgdG8gMTAuCisKKzEwLjIuMTEgU2VyaWFsIE5WUkFNCisJTkI6IG9wdGlvbiBub3QgY3VycmVudGx5IGltcGxlbWVudGVkLgorICAgICAgICBudnJhbT1uICAgICBkbyBub3QgbG9vayBmb3Igc2VyaWFsIE5WUkFNCisgICAgICAgIG52cmFtPXkgICAgIHRlc3QgY29udHJvbGxlcnMgZm9yIG9uYm9hcmQgc2VyaWFsIE5WUkFNCisgICAgICAgIChhbHRlcm5hdGUgYmluYXJ5IGZvcm0pCisgICAgICAgIG52cmFtPTxiaXRzIG9wdGlvbnM+CisgICAgICAgIDB4MDEgICBsb29rIGZvciBOVlJBTSAgKGVxdWl2YWxlbnQgdG8gbnZyYW09eSkKKyAgICAgICAgMHgwMiAgIGlnbm9yZSBOVlJBTSAiU3luY2hyb25vdXMgbmVnb3RpYXRpb24iIHBhcmFtZXRlcnMgZm9yIGFsbCBkZXZpY2VzCisgICAgICAgIDB4MDQgICBpZ25vcmUgTlZSQU0gIldpZGUgbmVnb3RpYXRpb24iICBwYXJhbWV0ZXIgZm9yIGFsbCBkZXZpY2VzCisgICAgICAgIDB4MDggICBpZ25vcmUgTlZSQU0gIlNjYW4gYXQgYm9vdCB0aW1lIiBwYXJhbWV0ZXIgZm9yIGFsbCBkZXZpY2VzCisgICAgICAgIDB4ODAgICBhbHNvIGF0dGFjaCBjb250cm9sbGVycyBzZXQgdG8gT0ZGIGluIHRoZSBOVlJBTSAoc3ltNTNjOHh4IG9ubHkpCisKKzEwLjIuMTIgRXhjbHVkZSBhIGhvc3QgZnJvbSBiZWluZyBhdHRhY2hlZAorICAgICAgICBleGNsPTxpb19hZGRyZXNzPiwuLi4KKworICAgIFByZXZlbnQgaG9zdCBhdCBhIGdpdmVuIGlvIGFkZHJlc3MgZnJvbSBiZWluZyBhdHRhY2hlZC4KKyAgICBGb3IgZXhhbXBsZSAnZXhjbD0weGI0MDAsMHhjMDAwJyBpbmRpY2F0ZSB0byB0aGUgCisgICAgZHJpdmVyIG5vdCB0byBhdHRhY2ggaG9zdHMgYXQgYWRkcmVzcyAweGI0MDAgYW5kIDB4YzAwMC4KKworMTAuMyBDb252ZXJ0aW5nIGZyb20gb2xkIHN0eWxlIG9wdGlvbnMKKworUHJldmlvdXNseSwgdGhlIHN5bTIgZHJpdmVyIGFjY2VwdGVkIGFyZ3VtZW50cyBvZiB0aGUgZm9ybQorCXN5bTUzYzh4eD10YWdzOjQsc3luYzoxMCxkZWJ1ZzoweDIwMAorCitBcyBhIHJlc3VsdCBvZiB0aGUgbmV3IG1vZHVsZSBwYXJhbWV0ZXJzLCB0aGlzIGlzIG5vIGxvbmdlciBhdmFpbGFibGUuCitNb3N0IG9mIHRoZSBvcHRpb25zIGhhdmUgcmVtYWluZWQgdGhlIHNhbWUsIGJ1dCB0YWdzIGhhcyBzcGxpdCBpbnRvCitjbWRfcGVyX2x1biBhbmQgdGFnX2N0cmwgZm9yIGl0cyB0d28gZGlmZmVyZW50IHB1cnBvc2VzLiAgVGhlIHNhbXBsZSBhYm92ZQord291bGQgYmUgc3BlY2lmaWVkIGFzOgorCW1vZHByb2JlIHN5bTUzYzh4eCBjbWRfcGVyX2x1bj00IHN5bmM9MTAgZGVidWc9MHgyMDAKKworb3Igb24gdGhlIGtlcm5lbCBib290IGxpbmUgYXM6CisJc3ltNTNjOHh4LmNtZF9wZXJfbHVuPTQgc3ltNTNjOHh4LnN5bmM9MTAgc3ltNTNjOHh4LmRlYnVnPTB4MjAwCisKKzEwLjQgU0NTSSBCVVMgY2hlY2tpbmcgYm9vdCBvcHRpb24uCisKK1doZW4gdGhpcyBvcHRpb24gaXMgc2V0IHRvIGEgbm9uLXplcm8gdmFsdWUsIHRoZSBkcml2ZXIgY2hlY2tzIFNDU0kgbGluZXMgCitsb2dpYyBzdGF0ZSwgMTAwIG1pY3JvLXNlY29uZHMgYWZ0ZXIgaGF2aW5nIGFzc2VydGVkIHRoZSBTQ1NJIFJFU0VUIGxpbmUuCitUaGUgZHJpdmVyIGp1c3QgcmVhZHMgU0NTSSBsaW5lcyBhbmQgY2hlY2tzIGFsbCBsaW5lcyByZWFkIEZBTFNFIGV4Y2VwdCBSRVNFVC4KK1NpbmNlIFNDU0kgZGV2aWNlcyBzaGFsbCByZWxlYXNlIHRoZSBCVVMgYXQgbW9zdCA4MDAgbmFuby1zZWNvbmRzIGFmdGVyIFNDU0kgCitSRVNFVCBoYXMgYmVlbiBhc3NlcnRlZCwgYW55IHNpZ25hbCB0byBUUlVFIG1heSBpbmRpY2F0ZSBhIFNDU0kgQlVTIHByb2JsZW0uCitVbmZvcnR1bmF0ZWx5LCB0aGUgZm9sbG93aW5nIGNvbW1vbiBTQ1NJIEJVUyBwcm9ibGVtcyBhcmUgbm90IGRldGVjdGVkOgorLSBPbmx5IDEgdGVybWluYXRvciBpbnN0YWxsZWQuCistIE1pc3BsYWNlZCB0ZXJtaW5hdG9ycy4KKy0gQmFkIHF1YWxpdHkgdGVybWluYXRvcnMuCitPbiB0aGUgb3RoZXIgaGFuZCwgZWl0aGVyIGJhZCBjYWJsaW5nLCBicm9rZW4gZGV2aWNlcywgbm90IGNvbmZvcm1hbnQgCitkZXZpY2VzLCAuLi4gbWF5IGNhdXNlIGEgU0NTSSBzaWduYWwgdG8gYmUgd3Jvbmcgd2hlbiB0ZSBkcml2ZXIgcmVhZHMgaXQuCisKKzE1LiBTQ1NJIHByb2JsZW0gdHJvdWJsZXNob290aW5nCisKKzE1LjEgUHJvYmxlbSB0cmFja2luZworCitNb3N0IFNDU0kgcHJvYmxlbXMgYXJlIGR1ZSB0byBhIG5vbiBjb25mb3JtYW50IFNDU0kgYnVzIG9yIHRvbyBidWdneQorZGV2aWNlcy4gIElmIGluZm9ydHVuYXRlbHkgeW91IGhhdmUgU0NTSSBwcm9ibGVtcywgeW91IGNhbiBjaGVjayB0aGUKK2ZvbGxvd2luZyB0aGluZ3M6CisKKy0gU0NTSSBidXMgY2FibGVzCistIHRlcm1pbmF0aW9ucyBhdCBib3RoIGVuZCBvZiB0aGUgU0NTSSBjaGFpbgorLSBsaW51eCBzeXNsb2cgbWVzc2FnZXMgKHNvbWUgb2YgdGhlbSBtYXkgaGVscCB5b3UpCisKK0lmIHlvdSBkbyBub3QgZmluZCB0aGUgc291cmNlIG9mIHByb2JsZW1zLCB5b3UgY2FuIGNvbmZpZ3VyZSB0aGUKK2RyaXZlciBvciBkZXZpY2VzIGluIHRoZSBOVlJBTSB3aXRoIG1pbmltYWwgZmVhdHVyZXMuCisKKy0gb25seSBhc3luY2hyb25vdXMgZGF0YSB0cmFuc2ZlcnMKKy0gdGFnZ2VkIGNvbW1hbmRzIGRpc2FibGVkCistIGRpc2Nvbm5lY3Rpb25zIG5vdCBhbGxvd2VkCisKK05vdywgaWYgeW91ciBTQ1NJIGJ1cyBpcyBvaywgeW91ciBzeXN0ZW0gaGFzIGV2ZXJ5IGNoYW5jZSB0byB3b3JrCit3aXRoIHRoaXMgc2FmZSBjb25maWd1cmF0aW9uIGJ1dCBwZXJmb3JtYW5jZXMgd2lsbCBub3QgYmUgb3B0aW1hbC4KKworSWYgaXQgc3RpbGwgZmFpbHMsIHRoZW4geW91IGNhbiBzZW5kIHlvdXIgcHJvYmxlbSBkZXNjcmlwdGlvbiB0bworYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzLWdyb3Vwcy4gIFNlbmQgbWUgYSBjb3B5IGluIG9yZGVyIHRvCitiZSBzdXJlIEkgd2lsbCByZWNlaXZlIGl0LiAgT2J2aW91c2x5LCBhIGJ1ZyBpbiB0aGUgZHJpdmVyIGNvZGUgaXMKK3Bvc3NpYmxlLgorCisgIE15IGN5cnJlbnQgZW1haWwgYWRkcmVzczogR2VyYXJkIFJvdWRpZXIgPGdyb3VkaWVyQGZyZWUuZnI+CisKK0FsbG93aW5nIGRpc2Nvbm5lY3Rpb25zIGlzIGltcG9ydGFudCBpZiB5b3UgdXNlIHNldmVyYWwgZGV2aWNlcyBvbgoreW91ciBTQ1NJIGJ1cyBidXQgb2Z0ZW4gY2F1c2VzIHByb2JsZW1zIHdpdGggYnVnZ3kgZGV2aWNlcy4KK1N5bmNocm9ub3VzIGRhdGEgdHJhbnNmZXJzIGluY3JlYXNlcyB0aHJvdWdocHV0IG9mIGZhc3QgZGV2aWNlcyBsaWtlCitoYXJkIGRpc2tzLiAgR29vZCBTQ1NJIGhhcmQgZGlza3Mgd2l0aCBhIGxhcmdlIGNhY2hlIGdhaW4gYWR2YW50YWdlIG9mCit0YWdnZWQgY29tbWFuZHMgcXVldWluZy4KKworMTUuMiBVbmRlcnN0YW5kaW5nIGhhcmR3YXJlIGVycm9yIHJlcG9ydHMKKworV2hlbiB0aGUgZHJpdmVyIGRldGVjdHMgYW4gdW5leHBlY3RlZCBlcnJvciBjb25kaXRpb24sIGl0IG1heSBkaXNwbGF5IGEgCittZXNzYWdlIG9mIHRoZSBmb2xsb3dpbmcgcGF0dGVybi4KKworc3ltMDoxOiBFUlJPUiAoMDo0OCkgKDEtMjEtNjUpIChmLzk1LzApIEAgKHNjcmlwdCA3YzA6MTkwMDAwMDApLgorc3ltMDogc2NyaXB0IGNtZCA9IDE5MDAwMDAwCitzeW0wOiByZWdkdW1wOiBkYSAxMCA4MCA5NSA0NyAwZiAwMSAwNyA3NSAwMSA4MSAyMSA4MCAwMSAwOSAwMC4KKworU29tZSBmaWVsZHMgaW4gc3VjaCBhIG1lc3NhZ2UgbWF5IGhlbHAgeW91IHVuZGVyc3RhbmQgdGhlIGNhdXNlIG9mIHRoZSAKK3Byb2JsZW0sIGFzIGZvbGxvd3M6CisKK3N5bTA6MTogRVJST1IgKDA6NDgpICgxLTIxLTY1KSAoZi85NS8wKSBAIChzY3JpcHQgN2MwOjE5MDAwMDAwKS4KKy4uLi4uQS4uLi4uLi4uLkIuQy4uLi5ELkUuLkYuLi4uRy5ILi5JLi4uLi4uLkouLi4uLksuLi5MLi4uLi4uLgorCitGaWVsZCBBIDogdGFyZ2V0IG51bWJlci4KKyAgU0NTSSBJRCBvZiB0aGUgZGV2aWNlIHRoZSBjb250cm9sbGVyIHdhcyB0YWxraW5nIHdpdGggYXQgdGhlIG1vbWVudCB0aGUgCisgIGVycm9yIG9jY3Vycy4KKworRmllbGQgQiA6IERTVEFUIGlvIHJlZ2lzdGVyIChETUEgU1RBVFVTKQorICBCaXQgMHg0MCA6IE1EUEUgTWFzdGVyIERhdGEgUGFyaXR5IEVycm9yCisgICAgICAgICAgICAgRGF0YSBwYXJpdHkgZXJyb3IgZGV0ZWN0ZWQgb24gdGhlIFBDSSBCVVMuCisgIEJpdCAweDIwIDogQkYgICBCdXMgRmF1bHQKKyAgICAgICAgICAgICBQQ0kgYnVzIGZhdWx0IGNvbmRpdGlvbiBkZXRlY3RlZAorICBCaXQgMHgwMSA6IElJRCAgSWxsZWdhbCBJbnN0cnVjdGlvbiBEZXRlY3RlZAorICAgICAgICAgICAgIFNldCBieSB0aGUgY2hpcCB3aGVuIGl0IGRldGVjdHMgYW4gSWxsZWdhbCBJbnN0cnVjdGlvbiBmb3JtYXQgCisgICAgICAgICAgICAgb24gc29tZSBjb25kaXRpb24gdGhhdCBtYWtlcyBhbiBpbnN0cnVjdGlvbiBpbGxlZ2FsLgorICBCaXQgMHg4MCA6IERGRSBEbWEgRmlmbyBFbXB0eQorICAgICAgICAgICAgIFB1cmUgc3RhdHVzIGJpdCB0aGF0IGRvZXMgbm90IGluZGljYXRlIGFuIGVycm9yLgorICBJZiB0aGUgcmVwb3J0ZWQgRFNUQVQgdmFsdWUgY29udGFpbnMgYSBjb21iaW5hdGlvbiBvZiBNRFBFICgweDQwKSwgCisgIEJGICgweDIwKSwgdGhlbiB0aGUgY2F1c2UgbWF5IGJlIGxpa2VseSBkdWUgdG8gYSBQQ0kgQlVTIHByb2JsZW0uCisKK0ZpZWxkIEMgOiBTSVNUIGlvIHJlZ2lzdGVyIChTQ1NJIEludGVycnVwdCBTdGF0dXMpCisgIEJpdCAweDA4IDogU0dFICBTQ1NJIEdST1NTIEVSUk9SCisgICAgICAgICAgICAgSW5kaWNhdGVzIHRoYXQgdGhlIGNoaXAgZGV0ZWN0ZWQgYSBzZXZlcmUgZXJyb3IgY29uZGl0aW9uIAorICAgICAgICAgICAgIG9uIHRoZSBTQ1NJIEJVUyB0aGF0IHByZXZlbnRzIHRoZSBTQ1NJIHByb3RvY29sIGZyb20gZnVuY3Rpb25pbmcKKyAgICAgICAgICAgICBwcm9wZXJseS4KKyAgQml0IDB4MDQgOiBVREMgIFVuZXhwZWN0ZWQgRGlzY29ubmVjdGlvbgorICAgICAgICAgICAgIEluZGljYXRlcyB0aGF0IHRoZSBkZXZpY2UgcmVsZWFzZWQgdGhlIFNDU0kgQlVTIHdoZW4gdGhlIGNoaXAgCisgICAgICAgICAgICAgd2FzIG5vdCBleHBlY3RpbmcgdGhpcyB0byBoYXBwZW4uIEEgZGV2aWNlIG1heSBiZWhhdmUgc28gdG8gCisgICAgICAgICAgICAgaW5kaWNhdGUgdGhlIFNDU0kgaW5pdGlhdG9yIHRoYXQgYW4gZXJyb3IgY29uZGl0aW9uIG5vdCByZXBvcnRhYmxlICAgICAgICAgICAgICB1c2luZyB0aGUgU0NTSSBwcm90b2NvbCBoYXMgb2NjdXJyZWQuCisgIEJpdCAweDAyIDogUlNUICBTQ1NJIEJVUyBSZXNldAorICAgICAgICAgICAgIEdlbmVyYWxseSBTQ1NJIHRhcmdldHMgZG8gbm90IHJlc2V0IHRoZSBTQ1NJIEJVUywgYWx0aG91Z2ggYW55IAorICAgICAgICAgICAgIGRldmljZSBvbiB0aGUgQlVTIGNhbiByZXNldCBpdCBhdCBhbnkgdGltZS4KKyAgQml0IDB4MDEgOiBQQVIgIFBhcml0eQorICAgICAgICAgICAgIFNDU0kgcGFyaXR5IGVycm9yIGRldGVjdGVkLgorICBPbiBhIGZhdWx0eSBTQ1NJIEJVUywgYW55IGVycm9yIGNvbmRpdGlvbiBhbW9uZyBTR0UgKDB4MDgpLCBVREMgKDB4MDQpIGFuZCAKKyAgUEFSICgweDAxKSBtYXkgYmUgZGV0ZWN0ZWQgYnkgdGhlIGNoaXAuIElmIHlvdXIgU0NTSSBzeXN0ZW0gc29tZXRpbWVzIAorICBlbmNvdW50ZXJzIHN1Y2ggZXJyb3IgY29uZGl0aW9ucywgZXNwZWNpYWxseSBTQ1NJIEdST1NTIEVSUk9SLCB0aGVuIGEgU0NTSSAKKyAgQlVTIHByb2JsZW0gaXMgbGlrZWx5IHRoZSBjYXVzZSBvZiB0aGVzZSBlcnJvcnMuCisKK0ZvciBmaWVsZHMgRCxFLEYsRyBhbmQgSCwgeW91IG1heSBsb29rIGludG8gdGhlIHN5bTUzYzh4eF9kZWZzLmggZmlsZSAKK3RoYXQgY29udGFpbnMgc29tZSBtaW5pbWFsIGNvbW1lbnRzIG9uIElPIHJlZ2lzdGVyIGJpdHMuCitGaWVsZCBEIDogU09DTCAgU2NzaSBPdXRwdXQgQ29udHJvbCBMYXRjaAorICAgICAgICAgIFRoaXMgcmVnaXN0ZXIgcmVmbGVjdHMgdGhlIHN0YXRlIG9mIHRoZSBTQ1NJIGNvbnRyb2wgbGluZXMgdGhlIAorICAgICAgICAgIGNoaXAgd2FudCB0byBkcml2ZSBvciBjb21wYXJlIGFnYWluc3QuCitGaWVsZCBFIDogU0JDTCAgU2NzaSBCdXMgQ29udHJvbCBMaW5lcworICAgICAgICAgIEFjdHVhbCB2YWx1ZSBvZiBjb250cm9sIGxpbmVzIG9uIHRoZSBTQ1NJIEJVUy4KK0ZpZWxkIEYgOiBTQkRMICBTY3NpIEJ1cyBEYXRhIExpbmVzCisgICAgICAgICAgQWN0dWFsIHZhbHVlIG9mIGRhdGEgbGluZXMgb24gdGhlIFNDU0kgQlVTLgorRmllbGQgRyA6IFNYRkVSICBTQ1NJIFRyYW5zZmVyCisgICAgICAgICAgQ29udGFpbnMgdGhlIHNldHRpbmcgb2YgdGhlIFN5bmNocm9ub3VzIFBlcmlvZCBmb3Igb3V0cHV0IGFuZCAKKyAgICAgICAgICB0aGUgY3VycmVudCBTeW5jaHJvbm91cyBvZmZzZXQgKG9mZnNldCAwIG1lYW5zIGFzeW5jaHJvbm91cykuCitGaWVsZCBIIDogU0NOVEwzIFNjc2kgQ29udHJvbCBSZWdpc3RlciAzCisgICAgICAgICAgQ29udGFpbnMgdGhlIHNldHRpbmcgb2YgdGltaW5nIHZhbHVlcyBmb3IgYm90aCBhc3luY2hyb25vdXMgYW5kIAorICAgICAgICAgIHN5bmNocm9ub3VzIGRhdGEgdHJhbnNmZXJzLiAKK0ZpZWxkIEkgOiBTQ05UTDQgU2NzaSBDb250cm9sIFJlZ2lzdGVyIDQKKyAgICAgICAgICBPbmx5IG1lYW5pbmZ1bCBmb3IgNTNDMTAxMCBVbHRyYTMgY29udHJvbGxlcnMuCisKK1VuZGVyc3RhbmRpbmcgRmllbGRzIEosIEssIEwgYW5kIGR1bXBzIHJlcXVpcmVzIHRvIGhhdmUgZ29vZCBrbm93bGVkZ2Ugb2YgCitTQ1NJIHN0YW5kYXJkcywgY2hpcCBjb3JlcyBmdW5jdGlvbm5hbHMgYW5kIGludGVybmFsIGRyaXZlciBkYXRhIHN0cnVjdHVyZXMuCitZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBkZWNvZGUgYW5kIHVuZGVyc3RhbmQgdGhlbSwgdW5sZXNzIHlvdSB3YW50IHRvIGhlbHAgCittYWludGFpbiB0aGUgZHJpdmVyIGNvZGUuCisKKzE3LiBTZXJpYWwgTlZSQU0gKGFkZGVkIGJ5IFJpY2hhcmQgV2FsdGhhbTogZG9ybW91c2VAZmFyc3JvYnQuZGVtb24uY28udWspCisKKzE3LjEgRmVhdHVyZXMKKworRW5hYmxpbmcgc2VyaWFsIE5WUkFNIHN1cHBvcnQgZW5hYmxlcyBkZXRlY3Rpb24gb2YgdGhlIHNlcmlhbCBOVlJBTSBpbmNsdWRlZAorb24gU3ltYmlvcyBhbmQgc29tZSBTeW1iaW9zIGNvbXBhdGlibGUgaG9zdCBhZGFwdG9ycywgYW5kIFRla3JhbSBib2FyZHMuIFRoZSAKK3NlcmlhbCBOVlJBTSBpcyB1c2VkIGJ5IFN5bWJpb3MgYW5kIFRla3JhbSB0byBob2xkIHNldCB1cCBwYXJhbWV0ZXJzIGZvciB0aGUgCitob3N0IGFkYXB0b3IgYW5kIGl0J3MgYXR0YWNoZWQgZHJpdmVzLgorCitUaGUgU3ltYmlvcyBOVlJBTSBhbHNvIGhvbGRzIGRhdGEgb24gdGhlIGJvb3Qgb3JkZXIgb2YgaG9zdCBhZGFwdG9ycyBpbiBhCitzeXN0ZW0gd2l0aCBtb3JlIHRoYW4gb25lIGhvc3QgYWRhcHRvci4gIFRoaXMgaW5mb3JtYXRpb24gaXMgbm8gbG9uZ2VyIHVzZWQKK2FzIGl0J3MgZnVuZGFtZW50YWxseSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgaG90cGx1ZyBQQ0kgbW9kZWwuCisKK1Rla3JhbSBib2FyZHMgdXNpbmcgU3ltYmlvcyBjaGlwcywgREMzOTBXL0YvVSwgd2hpY2ggaGF2ZSBOVlJBTSBhcmUgZGV0ZWN0ZWQKK2FuZCB0aGlzIGlzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBTeW1iaW9zIGNvbXBhdGlibGUgYW5kIFRla3JhbSBob3N0IAorYWRhcHRvcnMuIFRoaXMgaXMgdXNlZCB0byBkaXNhYmxlIHRoZSBTeW1iaW9zIGNvbXBhdGlibGUgImRpZmYiIHNldHRpbmcKK2luY29ycmVjdGx5IHNldCBvbiBUZWtyYW0gYm9hcmRzIGlmIHRoZSBDT05GSUdfU0NTSV81M0M4WFhfU1lNQklPU19DT01QQVQgCitjb25maWd1cmF0aW9uIHBhcmFtZXRlciBpcyBzZXQgZW5hYmxpbmcgYm90aCBTeW1iaW9zIGFuZCBUZWtyYW0gYm9hcmRzIHRvIGJlIAordXNlZCB0b2dldGhlciB3aXRoIHRoZSBTeW1iaW9zIGNhcmRzIHVzaW5nIGFsbCB0aGVpciBmZWF0dXJlcywgaW5jbHVkaW5nCisiZGlmZiIgc3VwcG9ydC4gKCJsZWQgcGluIiBzdXBwb3J0IGZvciBTeW1iaW9zIGNvbXBhdGlibGUgY2FyZHMgY2FuIHJlbWFpbgorZW5hYmxlZCB3aGVuIHVzaW5nIFRla3JhbSBjYXJkcy4gSXQgZG9lcyBub3RoaW5nIHVzZWZ1bCBmb3IgVGVrcmFtIGhvc3QKK2FkYXB0b3JzIGJ1dCBkb2VzIG5vdCBjYXVzZSBwcm9ibGVtcyBlaXRoZXIuKQorCitUaGUgcGFyYW1ldGVycyB0aGUgZHJpdmVyIGlzIGFibGUgdG8gZ2V0IGZyb20gdGhlIE5WUkFNIGRlcGVuZCBvbiB0aGUgCitkYXRhIGZvcm1hdCB1c2VkLCBhcyBmb2xsb3c6CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRla3JhbSBmb3JtYXQgICAgICBTeW1iaW9zIGZvcm1hdAorR2VuZXJhbCBhbmQgaG9zdCBwYXJhbWV0ZXJzCisgICAgQm9vdCBvcmRlciAgICAgICAgICAgICAgICAgICAgICAgICBOICAgICAgICAgICAgICAgICAgIFkKKyAgICBIb3N0IFNDU0kgSUQgICAgICAgICAgICAgICAgICAgICAgIFkgICAgICAgICAgICAgICAgICAgWQorICAgIFNDU0kgcGFyaXR5IGNoZWNraW5nICAgICAgICAgICAgICAgWSAgICAgICAgICAgICAgICAgICBZCisgICAgVmVyYm9zZSBib290IG1lc3NhZ2VzICAgICAgICAgICAgICBOICAgICAgICAgICAgICAgICAgIFkKK1NDU0kgZGV2aWNlcyBwYXJhbWV0ZXJzCisgICAgU3luY2hyb25vdXMgdHJhbnNmZXIgc3BlZWQgICAgICAgICBZICAgICAgICAgICAgICAgICAgIFkKKyAgICBXaWRlIDE2IC8gTmFycm93ICAgICAgICAgICAgICAgICAgIFkgICAgICAgICAgICAgICAgICAgWQorICAgIFRhZ2dlZCBDb21tYW5kIFF1ZXVpbmcgZW5hYmxlZCAgICAgWSAgICAgICAgICAgICAgICAgICBZCisgICAgRGlzY29ubmVjdGlvbnMgZW5hYmxlZCAgICAgICAgICAgICBZICAgICAgICAgICAgICAgICAgIFkKKyAgICBTY2FuIGF0IGJvb3QgdGltZSAgICAgICAgICAgICAgICAgIE4gICAgICAgICAgICAgICAgICAgWQorCitJbiBvcmRlciB0byBzcGVlZCB1cCB0aGUgc3lzdGVtIGJvb3QsIGZvciBlYWNoIGRldmljZSBjb25maWd1cmVkIHdpdGhvdXQgCit0aGUgInNjYW4gYXQgYm9vdCB0aW1lIiBvcHRpb24sIHRoZSBkcml2ZXIgZm9yY2VzIGFuIGVycm9yIG9uIHRoZSAKK2ZpcnN0IFRFU1QgVU5JVCBSRUFEWSBjb21tYW5kIHJlY2VpdmVkIGZvciB0aGlzIGRldmljZS4KKworCisxNy4yIFN5bWJpb3MgTlZSQU0gbGF5b3V0CisKK3R5cGljYWwgZGF0YSBhdCBOVlJBTSBhZGRyZXNzIDB4MTAwICg1M2M4MTBhIE5WUkFNKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzAwIDAwCis2NCAwMQorOGUgMGIKKworMDAgMzAgMDAgMDAgMDAgMDAgMDcgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDcgMDQgMTAgMDQgMDAgMDAgCisKKzA0IDAwIDBmIDAwIDAwIDEwIDAwIDUwIDAwIDAwIDAxIDAwIDAwIDYyIAorMDQgMDAgMDMgMDAgMDAgMTAgMDAgNTggMDAgMDAgMDEgMDAgMDAgNjMgCiswNCAwMCAwMSAwMCAwMCAxMCAwMCA0OCAwMCAwMCAwMSAwMCAwMCA2MSAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCisKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCisKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCisKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCisKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIAorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAKKworZmUgZmUKKzAwIDAwCiswMCAwMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK05WUkFNIGxheW91dCBkZXRhaWxzCisKK05WUkFNIEFkZHJlc3MgMHgwMDAtMHgwZmYgbm90IHVzZWQKKyAgICAgICAgICAgICAgMHgxMDAtMHgyNmYgaW5pdGlhbGlzZWQgZGF0YQorICAgICAgICAgICAgICAweDI3MC0weDdmZiBub3QgdXNlZAorCitnZW5lcmFsIGxheW91dAorCisgICAgICAgIGhlYWRlciAgLSAgIDYgYnl0ZXMsCisgICAgICAgIGRhdGEgICAgLSAzNTYgYnl0ZXMgKGNoZWNrc3VtIGlzIGJ5dGUgc3VtIG9mIHRoaXMgZGF0YSkKKyAgICAgICAgdHJhaWxlciAtICAgNiBieXRlcworICAgICAgICAgICAgICAgICAgLS0tCisgICAgICAgIHRvdGFsICAgICAzNjggYnl0ZXMKKworZGF0YSBhcmVhIGxheW91dAorCisgICAgICAgIGNvbnRyb2xsZXIgc2V0IHVwICAtICAyMCBieXRlcworICAgICAgICBib290IGNvbmZpZ3VyYXRpb24gLSAgNTYgYnl0ZXMgKDR4MTQgYnl0ZXMpCisgICAgICAgIGRldmljZSBzZXQgdXAgICAgICAtIDEyOCBieXRlcyAoMTZ4OCBieXRlcykKKyAgICAgICAgdW51c2VkIChzcGFyZT8pICAgIC0gMTUyIGJ5dGVzICgxOXg4IGJ5dGVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0KKyAgICAgICAgdG90YWwgICAgICAgICAgICAgICAgMzU2IGJ5dGVzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitoZWFkZXIKKworMDAgMDAgICAtID8/IHN0YXJ0IG1hcmtlcgorNjQgMDEgICAtIGJ5dGUgY291bnQgKGxzYi9tc2IgZXhjbHVkZXMgaGVhZGVyL3RyYWlsZXIpCis4ZSAwYiAgIC0gY2hlY2tzdW0gKGxzYi9tc2IgZXhjbHVkZXMgaGVhZGVyL3RyYWlsZXIpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorY29udHJvbGxlciBzZXQgdXAKKworMDAgMzAgMDAgMDAgMDAgMDAgMDcgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDcgMDQgMTAgMDQgMDAgMDAKKyAgICAgICAgICAgICAgICAgICB8ICAgICB8ICAgICAgICAgICB8ICAgICB8CisgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgICAgICAgICAgfCAgICAgIC0tIGhvc3QgSUQKKyAgICAgICAgICAgICAgICAgICB8ICAgICB8ICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgICAgICAgICAgIC0tUmVtb3ZhYmxlIE1lZGlhIFN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICB8ICAgICB8ICAgICAgICAgICAgICAgMHgwMCA9IG5vbmUKKyAgICAgICAgICAgICAgICAgICB8ICAgICB8ICAgICAgICAgICAgICAgMHgwMSA9IEJvb3RhYmxlIERldmljZQorICAgICAgICAgICAgICAgICAgIHwgICAgIHwgICAgICAgICAgICAgICAweDAyID0gQWxsIHdpdGggTWVkaWEKKyAgICAgICAgICAgICAgICAgICB8ICAgICB8CisgICAgICAgICAgICAgICAgICAgfCAgICAgIC0tZmxhZyBiaXRzIDIKKyAgICAgICAgICAgICAgICAgICB8ICAgICAgICAweDAwMDAwMDAxPSBzY2FuIG9yZGVyIGhpLT5sb3cKKyAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgKGRlZmF1bHQgMHgwMCAtIHNjYW4gbG93LT5oaSkKKyAgICAgICAgICAgICAgICAgICAgLS1mbGFnIGJpdHMgMQorICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxIHNjYW0gZW5hYmxlCisgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAgcGFyaXR5IGVuYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwIHZlcmJvc2UgYm9vdCBtc2dzCisKK3JlbWFpbmluZyBieXRlcyB1bmtub3duIC0gdGhleSBkbyBub3QgYXBwZWFyIHRvIGNoYW5nZSBpbiBteQorY3VycmVudCBzZXQgdXAgZm9yIGFueSBvZiB0aGUgY29udHJvbGxlcnMuCisKK2RlZmF1bHQgc2V0IHVwIGlzIGlkZW50aWNhbCBmb3IgNTNjODEwYSBhbmQgNTNjODc1IE5WUkFNCisoUmVtb3ZhYmxlIE1lZGlhIGFkZGVkIFN5bWJpb3MgQklPUyB2ZXJzaW9uIDQuMDkpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYm9vdCBjb25maWd1cmF0aW9uCisKK2Jvb3Qgb3JkZXIgc2V0IGJ5IG9yZGVyIG9mIHRoZSBkZXZpY2VzIGluIHRoaXMgdGFibGUKKworMDQgMDAgMGYgMDAgMDAgMTAgMDAgNTAgMDAgMDAgMDEgMDAgMDAgNjIgLS0gMXN0IGNvbnRyb2xsZXIKKzA0IDAwIDAzIDAwIDAwIDEwIDAwIDU4IDAwIDAwIDAxIDAwIDAwIDYzICAgIDJuZCBjb250cm9sbGVyCiswNCAwMCAwMSAwMCAwMCAxMCAwMCA0OCAwMCAwMCAwMSAwMCAwMCA2MSAgICAzcmQgY29udHJvbGxlcgorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgICAgNHRoIGNvbnRyb2xsZXIKKyAgICAgICB8ICB8ICB8ICB8ICAgICB8ICAgICAgICB8ICAgICB8ICB8CisgICAgICAgfCAgfCAgfCAgfCAgICAgfCAgICAgICAgfCAgICAgIC0tLS0gUENJIGlvIHBvcnQgYWRyCisgICAgICAgfCAgfCAgfCAgfCAgICAgfCAgICAgICAgIC0tMHgwMSBpbml0L3NjYW4gYXQgYm9vdCB0aW1lCisgICAgICAgfCAgfCAgfCAgfCAgICAgIC0tUENJIGRldmljZS9mdW5jdGlvbiBudW1iZXIgKDB4ZGRkZGRmZmYpCisgICAgICAgfCAgfCAgIC0tLS0tID8/IFBDSSB2ZW5kb3IgSUQgKGxzYi9tc2IpCisgICAgICAgIC0tLS1QQ0kgZGV2aWNlIElEIChsc2IvbXNiKQorCis/PyB1c2Ugb2YgdGhpcyBkYXRhIGlzIGEgZ3Vlc3MgYnV0IHNlZW1zIHJlYXNvbmFibGUKKworcmVtYWluaW5nIGJ5dGVzIHVua25vd24gLSB0aGV5IGRvIG5vdCBhcHBlYXIgdG8gY2hhbmdlIGluIG15CitjdXJyZW50IHNldCB1cAorCitkZWZhdWx0IHNldCB1cCBpcyBpZGVudGljYWwgZm9yIDUzYzgxMGEgYW5kIDUzYzg3NSBOVlJBTQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RldmljZSBzZXQgdXAgKHVwIHRvIDE2IGRldmljZXMgLSBpbmNsdWRlcyBjb250cm9sbGVyKQorCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAtIGlkIDAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIAorMGYgMDAgMDggMDggNjQgMDAgMGEgMDAgCiswZiAwMCAwOCAwOCA2NCAwMCAwYSAwMCAKKzBmIDAwIDA4IDA4IDY0IDAwIDBhIDAwIC0gaWQgMTUKKyB8ICAgICB8ICB8ICB8ICAgICB8ICB8CisgfCAgICAgfCAgfCAgfCAgICAgIC0tLS10aW1lb3V0IChsc2IvbXNiKQorIHwgICAgIHwgIHwgICAtLXN5bmNoIHBlcmlvZCAoMHg/PyA0MCBNdHJhbnMvc2VjLSBmYXN0IDQwKSAocHJvYmFibHkgMHgyOCkKKyB8ICAgICB8ICB8ICAgICAgICAgICAgICAgICAgKDB4MzAgMjAgTXRyYW5zL3NlYy0gZmFzdCAyMCkKKyB8ICAgICB8ICB8ICAgICAgICAgICAgICAgICAgKDB4NjQgMTAgTXRyYW5zL3NlYy0gZmFzdCApCisgfCAgICAgfCAgfCAgICAgICAgICAgICAgICAgICgweGM4ICA1IE10cmFucy9zZWMpCisgfCAgICAgfCAgfCAgICAgICAgICAgICAgICAgICgweDAwICBhc3luY2hyb25vdXMpCisgfCAgICAgfCAgIC0tID8/IG1heCBzeW5jIG9mZnNldCAoMHgwOCBpbiBOVlJBTSBvbiA1M2M4MTBhKSAKKyB8ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwIGluIE5WUkFNIG9uIDUzYzg3NSkKKyB8ICAgICAgLS1kZXZpY2UgYnVzIHdpZHRoICgweDA4IG5hcnJvdykKKyB8ICAgICAgICAgICAgICAgICAgICAgICAgICgweDEwIDE2IGJpdCB3aWRlKQorICAtLWZsYWcgYml0cworICAgIDB4MDAwMDAwMDEgLSBkaXNjb25uZWN0IGVuYWJsZWQKKyAgICAweDAwMDAwMDEwIC0gc2NhbiBhdCBib290IHRpbWUKKyAgICAweDAwMDAwMTAwIC0gc2NhbiBsdW5zCisgICAgMHgwMDAwMTAwMCAtIHF1ZXVlIHRhZ3MgZW5hYmxlZAorCityZW1haW5pbmcgYnl0ZXMgdW5rbm93biAtIHRoZXkgZG8gbm90IGFwcGVhciB0byBjaGFuZ2UgaW4gbXkKK2N1cnJlbnQgc2V0IHVwCisKKz8/IHVzZSBvZiB0aGlzIGRhdGEgaXMgYSBndWVzcyBidXQgc2VlbXMgcmVhc29uYWJsZSAKKyhidXQgaXQgY291bGQgYmUgbWF4IGJ1cyB3aWR0aCkKKworZGVmYXVsdCBzZXQgdXAgZm9yIDUzYzgxMGEgTlZSQU0KK2RlZmF1bHQgc2V0IHVwIGZvciA1M2M4NzUgTlZSQU0gLSBidXMgd2lkdGggICAgIC0gMHgxMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHN5bmMgb2Zmc2V0ID8gLSAweDEwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3luYyBwZXJpb2QgICAtIDB4MzAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis/PyBzcGFyZSBkZXZpY2Ugc3BhY2UgKDMyIGJpdCBidXMgPz8pCisKKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwICAoMTl4OGJ5dGVzKQorLgorLgorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAKKworZGVmYXVsdCBzZXQgdXAgaXMgaWRlbnRpY2FsIGZvciA1M2M4MTBhIGFuZCA1M2M4NzUgTlZSQU0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0cmFpbGVyCisKK2ZlIGZlICAgLSA/IGVuZCBtYXJrZXIgPworMDAgMDAKKzAwIDAwCisKK2RlZmF1bHQgc2V0IHVwIGlzIGlkZW50aWNhbCBmb3IgNTNjODEwYSBhbmQgNTNjODc1IE5WUkFNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKworMTcuMyBUZWtyYW0gTlZSQU0gbGF5b3V0CisKK252cmFtIDY0eDE2ICgxMDI0IGJpdCkKKworRHJpdmUgc2V0dGluZ3MKKworRHJpdmUgSUQgMC0xNSAoYWRkciAweDB5eXl5MCA9IGRldmljZSBzZXR1cCwgeXl5eSA9IElEKQorICAgICAgICAgICAgICAoYWRkciAweDB5eXl5MSA9IDB4MDAwMCkKKworICAgIHggeCB4IHggIHggeCB4IHggIHggeCB4IHggIHggeCB4IHgKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICB8IHwgfCB8CisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgfCB8IHwgIC0tLS0tIHBhcml0eSBjaGVjayAgIDAgLSBvZmYKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgMSAtIG9uCisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgfCB8IHwKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICB8IHwgIC0tLS0tLS0gc3luYyBuZWcgICAgICAgMCAtIG9mZgorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8IHwgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gb24KKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICB8IHwKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICB8ICAtLS0tLS0tLS0gZGlzY29ubmVjdCAgICAgMCAtIG9mZgorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8IHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gb24KKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICB8CisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfCAgIC0tLS0tLS0tLS0tIHN0YXJ0IGNtZCAgICAgIDAgLSBvZmYKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtIG9uCisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgfAorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8ICAtLS0tLS0tLS0tLS0tLSB0YWdnZWQgY21kcyAgICAwIC0gb2ZmCisgICAgICAgICAgICAgICB8IHwgfCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSBvbgorICAgICAgICAgICAgICAgfCB8IHwgICAgICB8IAorICAgICAgICAgICAgICAgfCB8IHwgICAgICAgLS0tLS0tLS0tLS0tLS0tLSB3aWRlIG5lZyAgICAgICAwIC0gb2ZmCisgICAgICAgICAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSBvbgorICAgICAgICAgICAgICAgfCB8IHwKKyAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3luYyByYXRlICAgICAgMCAtIDEwLjAgTXRyYW5zL3NlYworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gIDguMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIC0gIDYuNgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzIC0gIDUuNworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0IC0gIDUuMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1IC0gIDQuMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2IC0gIDMuMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3IC0gIDIuMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3IC0gIDIuMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4IC0gMjAuMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5IC0gMTYuNworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIC0gMTMuOQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiIC0gMTEuOQorCitHbG9iYWwgc2V0dGluZ3MKKworSG9zdCBmbGFncyAwIChhZGRyIDB4MTAwMDAwLCAzMikgCisKKyAgICB4IHggeCB4ICB4IHggeCB4ICB4IHggeCB4ICB4IHggeCB4CisgICAgfCB8IHwgfCAgfCB8IHwgfCAgICAgICAgICAgfCB8IHwgfAorICAgIHwgfCB8IHwgIHwgfCB8IHwgICAgICAgICAgICAtLS0tLS0tLS0tLSBob3N0IElEICAgIDB4MDAgLSAweDBmCisgICAgfCB8IHwgfCAgfCB8IHwgfAorICAgIHwgfCB8IHwgIHwgfCB8ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzdXBwb3J0IGZvciAgICAwIC0gb2ZmCisgICAgfCB8IHwgfCAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgID4gMiBkcml2ZXMgICAgIDEgLSBvbgorICAgIHwgfCB8IHwgIHwgfCB8IAorICAgIHwgfCB8IHwgIHwgfCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzdXBwb3J0IGRyaXZlcyAwIC0gb2ZmCisgICAgfCB8IHwgfCAgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gMUdieXRlcyAgICAgIDEgLSBvbgorICAgIHwgfCB8IHwgIHwgfAorICAgIHwgfCB8IHwgIHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBidXMgcmVzZXQgb24gICAwIC0gb2ZmCisgICAgfCB8IHwgfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG93ZXIgb24gICAgIDEgLSBvbgorICAgIHwgfCB8IHwgIHwKKyAgICB8IHwgfCB8ICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gYWN0aXZlIG5lZyAgICAgMCAtIG9mZgorICAgIHwgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gb24KKyAgICB8IHwgfCB8CisgICAgfCB8IHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGltbSBzZWVrICAgICAgIDAgLSBvZmYKKyAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtIG9uCisgICAgfCB8IHwKKyAgICB8IHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc2NhbiBsdW5zICAgICAgMCAtIG9mZgorICAgIHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gb24KKyAgICB8IHwKKyAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcmVtb3ZhYmxlICAgICAgMCAtIGRpc2FibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgQklPUyBkZXYgICAgMSAtIGJvb3QgZGV2aWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgLSBhbGwKKworSG9zdCBmbGFncyAxIChhZGRyIDB4MTAwMDAxLCAzMykKKworICAgIHggeCB4IHggIHggeCB4IHggIHggeCB4IHggIHggeCB4IHgKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgICAgICAgIHwgfCB8IAorICAgICAgICAgICAgICAgfCB8IHwgICAgICAgICAgICAgIC0tLS0tLS0tLSBib290IGRlbGF5ICAgICAwIC0gICAzIHNlYworICAgICAgICAgICAgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0gICA1CisgICAgICAgICAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgLSAgMTAKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAtICAyMAorICAgICAgICAgICAgICAgfCB8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0IC0gIDMwCisgICAgICAgICAgICAgICB8IHwgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUgLSAgNjAKKyAgICAgICAgICAgICAgIHwgfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNiAtIDEyMAorICAgICAgICAgICAgICAgfCB8IHwKKyAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWF4IHRhZyBjbWRzICAgMCAtICAyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSAgNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIC0gIDgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAtIDE2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgLSAzMgorCitIb3N0IGZsYWdzIDIgKGFkZHIgMHgxMDAwMTAsIDM0KQorCisgICAgeCB4IHggeCAgeCB4IHggeCAgeCB4IHggeCAgeCB4IHggeAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0gRjIvRjYgZW5hYmxlICAgMCAtIG9mZiA/Pz8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtIG9uICA/Pz8KKworY2hlY2tzdW0gKGFkZHIgMHgxMTExMTEpCisKK2NoZWNrc3VtID0gMHgxMjM0IC0gKHN1bSBhZGRyIDAtNjMpCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmYXVsdCBudnJhbSBkYXRhOgorCisweDAwMzcgMHgwMDAwIDB4MDAzNyAweDAwMDAgMHgwMDM3IDB4MDAwMCAweDAwMzcgMHgwMDAwCisweDAwMzcgMHgwMDAwIDB4MDAzNyAweDAwMDAgMHgwMDM3IDB4MDAwMCAweDAwMzcgMHgwMDAwCisweDAwMzcgMHgwMDAwIDB4MDAzNyAweDAwMDAgMHgwMDM3IDB4MDAwMCAweDAwMzcgMHgwMDAwCisweDAwMzcgMHgwMDAwIDB4MDAzNyAweDAwMDAgMHgwMDM3IDB4MDAwMCAweDAwMzcgMHgwMDAwIAorCisweDBmMDcgMHgwNDAwIDB4MDAwMSAweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwCisweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwCisweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwCisweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHgwMDAwIDB4MDAwMCAweDAwMDAgMHhmYmJjCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorRW5kIG9mIExpbnV4IFNZTS0yIGRyaXZlciBkb2N1bWVudGF0aW9uIGZpbGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS90bXNjc2ltLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS90bXNjc2ltLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTY1MjI5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL3Rtc2NzaW0udHh0CkBAIC0wLDAgKzEsNDQ5IEBACitUaGUgdG1zY3NpbSBkcml2ZXIKKz09PT09PT09PT09PT09PT09PQorCisxLiBQdXJwb3NlIGFuZCBoaXN0b3J5CisyLiBJbnN0YWxsYXRpb24KKzMuIEZlYXR1cmVzCis0LiBDb25maWd1cmF0aW9uIHZpYSAvcHJvYy9zY3NpL3Rtc2NzaW0vPworNS4gQ29uZmlndXJhdGlvbiB2aWEgYm9vdC9tb2R1bGUgcGFyYW1zCis2LiBQb3RlbnRpYWwgaW1wcm92ZW1lbnRzCis3LiBCdWcgcmVwb3J0cywgZGVidWdnaW5nIGFuZCB1cGRhdGVzCis4LiBBY2tub3dsZWRnZW1lbnRzCis5LiBDb3B5cmlnaHQKKworCisxLiBQdXJwb3NlIGFuZCBoaXN0b3J5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgdG1zY3NpbSBkcml2ZXIgc3VwcG9ydHMgUENJIFNDU0kgSG9zdCBBZGFwdGVycyBiYXNlZCBvbiB0aGUgQU01M0M5NzQKK2NoaXAuIEFNNTNDOTc0IGJhc2VkIFNDU0kgYWRhcHRlcnMgaW5jbHVkZTogCisgVGVrcmFtIERDMzkwLCBEQzM5MFQKKyBEYXdpY29udHJvbCAyOTc0CisgUUxvZ2ljIEZhc3QhIFBDSSBCYXNpYworIHNvbWUgb24tYm9hcmQgYWRhcHRlcnMKKyhUaGlzIGlzIG1vc3QgcHJvYmFibHkgbm90IGEgY29tcGxldGUgbGlzdCkKKworSXQgaGFzIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBDLkwuIEh1YW5nIGZyb20gdGhlIFRla3JhbSBjb3JwLiB0byBzdXBwb3J0IHRoZQorVGVrcmFtIERDMzkwKFQpIGFkYXB0ZXIuIFRoaXMgaXMgd2hlcmUgdGhlIG5hbWUgY29tZXMgZnJvbTogdG0gPSBUZWtyYW0KK3Njc2kgPSBTQ1NJIGRyaXZlciwgbSA9IEFNRCAoPykgYXMgb3Bwb3NlZCB0byB3IGZvciB0aGUgREMzOTBXL1UvRgorKE5DUjUzYzhYNSwgWD0yLzcpIGRyaXZlci4gWWVzLCB0aGVyZSB3YXMgYWxzbyBhIGRyaXZlciBmb3IgdGhlIGxhdHRlciwKK3Rtc2NzaXcsIHdoaWNoIHN1cHBvcnRlZCBEQzM5MFcvVS9GIGFkYXB0ZXJzLiBJdCdzIG5vdCBtYWludGFpbmVkIGFueSBtb3JlLAorYXMgdGhlIG5jcjUzYzh4eCBpcyBwZXJmZWN0bHkgc3VwcG9ydGluZyB0aGVzZSBhZHBhdGVycyBzaW5jZSBzb21lIHRpbWUuCisKK1RoZSBkcml2ZXIgZmlyc3QgYXBwZWFyZWQgaW4gQXByaWwgMTk5NiwgZXhjbHVzaXZlbHkgc3VwcG9ydGVkIHRoZSBEQzM5MCAKK2FuZCBoYXMgYmVlbiBlbmhhbmNlZCBzaW5jZSB0aGVuIGluIHZhcmlvdXMgc3RlcHMuIEluIE1heSAxOTk4IHN1cHBvcnQgZm9yIAorZ2VuZXJhbCBBTTUzQzk3NCBiYXNlZCBhZGFwdGVycyBhbmQgc29tZSBwb3NzaWJpbGl0aWVzIHRvIGNvbmZpZ3VyZSBpdCB3ZXJlCithZGRlZC4gVGhlIG5vbi1EQzM5MCBzdXBwb3J0IHdvcmtzIGJ5IGFzc3VtaW5nIHNvbWUgdmFsdWVzIGZvciB0aGUgZGF0YQorbm9ybWFsbHkgdGFrZW4gZnJvbSB0aGUgREMzOTAgRUVQUk9NLiBTZWUgYmVsb3cgKGNoYXB0ZXIgNSkgZm9yIGRldGFpbHMuCisKK1doZW4gdXNpbmcgdGhlIERDMzkwLCB0aGUgY29uZmlndXJhdGlvbiBpcyBzdGlsbCBiZSBkb25lIHVzaW5nIHRoZSBEQzM5MAorQklPUyBzZXR1cC4gVGhlIERDMzkwIEVFUFJPTSBpcyByZWFkIGFuZCB1c2VkIGJ5IHRoZSBkcml2ZXIsIGFueSBib290IG9yCittb2R1bGUgcGFyYW1ldGVycyAoY2hhcHRlciA1KSBhcmUgaWdub3JlZCEgSG93ZXZlciwgeW91IGNhbiBjaGFuZ2Ugc2V0dGluZ3MKK2R5bmFtaWNhbGx5LCBhcyBkZXNjcmliZWQgaW4gY2hhcHRlciA0LiAKKworRm9yIGEgbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgZHJpdmVyJ3MgaGlzdG9yeSwgc2VlIHRoZSBmaXJzdCBsaW5lcworb2YgdG1zY3NpbS5jLgorVGhlIG51bWJlcmluZyBzY2hlbWUgaXNuJ3QgY29uc2lzdGVudC4gVGhlIGZpcnN0IHZlcnNpb25zIHdlbnQgZnJvbSAxLjAwIHRvCisxLjEyLCB0aGVuIDEuMjBhIHRvIDEuMjB0LiBGaW5hbGx5IEkgZGVjaWRlZCB0byB1c2UgdGhlIG5jcjUzYzh4eCBzY2hlbWUuIFNvCit0aGUgbmV4dCByZXZpc2lvbnMgd2lsbCBiZSAyLjBhIHRvIDIuMFggKHN0YWJsZSksIDIuMWEgdG8gMi4xWCAoZXhwZXJpbWVudGFsKSwKKzIuMmEgdG8gMi4yWCAoc3RhYmxlLCBhZ2FpbikgZXRjLiAoWCA9IGFueXRoaW5nIGJldHdlZW4gYSBhbmQgei4pIElmIEkgc2VuZAorZml4ZXMgdG8gcGVvcGxlIGZvciB0ZXN0aW5nLCBJIGNyZWF0ZSBpbnRlcm1lZGlhdGUgdmVyc2lvbnMgd2l0aCBhIGRpZ2l0IAorYXBwZW5kZWQsIGUuZy4gMi4wYzMuCisKKworMi4gSW5zdGFsbGF0aW9uCistLS0tLS0tLS0tLS0tLS0KK0lmIHlvdSBnb3QgYW55IHJlY2VudCBrZXJuZWwgd2l0aCB0aGlzIGRyaXZlciBhbmQgZG9jdW1lbnQgaW5jbHVkZWQgaW4KK2xpbnV4L2RyaXZlcnMvc2NzaSwgeW91IGJhc2ljYWxseSBoYXZlIHRvIGRvIG5vdGhpbmcgc3BlY2lhbCB0byB1c2UgdGhpcworZHJpdmVyLiBPZiBjb3Vyc2UgeW91IGhhdmUgdG8gY2hvb3NlIHRvIGNvbXBpbGUgU0NTSSBzdXBwb3J0IGFuZCBEQzM5MChUKQorc3VwcG9ydCBpbnRvIHlvdXIga2VybmVsIG9yIGFzIG1vZHVsZSB3aGVuIGNvbmZpZ3VyaW5nIHlvdXIga2VybmVsIGZvcgorY29tcGlsaW5nLgorTkVXOiBZb3UgbWF5IGFzIHdlbGwgY29tcGlsZSB0aGlzIG1vZHVsZSBvdXRzaWRlIHlvdXIga2VybmVsLCB1c2luZyB0aGUKK3N1cHBsaWVkIE1ha2VmaWxlLgorCisgSWYgeW91IGdvdCBhbiBvbGQga2VybmVsIChwcmUgMi4xLjEyNywgcHJlIDIuMC4zN3AxKSB3aXRoIGFuIG9sZCB2ZXJzaW9uIG9mCisgdGhpcyBkcml2ZXI6IEdldCBkYzM5MC0yMTEyNS0yMGIuZGlmZi5neiBvciBkYzM5MC0yMDM2cDIxLTIwYjEuZGlmZi5neiBmcm9tCisgbXkgd2ViIHBhZ2UgYW5kIGFwcGx5IHRoZSBwYXRjaC4gQXBwbHkgZnVydGhlciBwYXRjaGVzIHRvIHVwZ3JhZGUgdG8gdGhlIAorIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIuCisKKyBJZiB5b3Ugd2FudCB0byBkbyBpdCBtYW51YWxseSwgeW91IHNob3VsZCBjb3B5IHRoZSBmaWxlcyAoZGMzOTAuaCwKKyB0bXNjc2ltLmgsIHRtc2NzaW0uYywgc2NzaWlvbS5jIGFuZCBSRUFETUUudG1zY3NpbSkgZnJvbSB0aGlzIGRpcmVjdG9yeSB0bworIGxpbnV4L2RyaXZlcnMvc2NzaS4gWW91IGhhdmUgdG8gcmVjb21waWxlIHlvdXIga2VybmVsL21vZHVsZSBvZiBjb3Vyc2UuCisKKyBZb3Ugc2hvdWxkIGFwcGx5IHRoZSB0aHJlZSBwYXRjaGVzIGluY2x1ZGVkIGluIGRjMzkwLTEyMC1rZXJuZWwuZGlmZgorIChBcHBseWluZyB0aGVtOiBjZCAvdXNyL3NyYzsgcGF0Y2ggLXAwIDx+L2RjMzkwLTEyMC1rZXJuZWwuZGlmZikKKyBUaGUgcGF0Y2hlcyBhcmUgYWdhaW5zdCAyLjEuMTI1LCBzbyB5b3UgbWlnaHQgaGF2ZSB0byBtYW51YWxseSByZXNvbHZlCisgcmVqZWN0aW9ucyB3aGVuIGFwcGx5aW5nIHRvIGFub3RoZXIga2VybmVsIHZlcnNpb24uCisKKyBUaGUgcGF0Y2hlcyB3aWxsIHVwZGF0ZSB0aGUga2VybmVsIHN0YXJ0dXAgY29kZSB0byBhbGxvdyBib290IHBhcmFtZXRlcnMgdG8KKyBiZSBwYXNzZWQgdG8gdGhlIGRyaXZlciwgdXBkYXRlIHRoZSBEb2N1bWVudGF0aW9uIGFuZCBmaW5hbGx5IG9mZmVyIHlvdSB0aGUKKyBwb3NzaWJpbGl0eSB0byBvbWl0IHRoZSBub24tREMzOTAgcGFydHMgb2YgdGhlIGRyaXZlci4KKyAoQnkgc2VsZWN0aW5nICJPbWl0IHN1cHBvcnQgZm9yIG5vbiBEQzM5MCIgeW91IGJhc2ljYWxseSBkaXNhYmxlIHRoZQorIGVtdWxhdGlvbiBvZiBhIERDMzkwIEVFUFJPTSBmb3Igbm9uIERDMzkwIGFkYXB0ZXJzLiBUaGlzIHNhdmVzIGEgZmV3IGJ5dGVzCisgb2YgbWVtb3J5LikKKworSWYgeW91IGdvdCBhIHZlcnkgb2xkIGtlcm5lbCB3aXRob3V0IHRoZSB0bXNjc2ltIGRyaXZlciAocHJlIDIuMC4zMSkKK0kgcmVjb21tZW5kIHVwZ3JhZGluZyB5b3VyIGtlcm5lbC4gSG93ZXZlciwgaWYgeW91IGRvbid0IHdhbnQgdG8sIHBsZWFzZQorY29udGFjdCBtZSB0byBnZXQgdGhlIGFwcHJvcHJpYXRlIHBhdGNoZXMuCisKKworVXBncmFkaW5nIGEgU0NTSSBkcml2ZXIgaXMgYWx3YXlzIGEgZGVsaWNhdGUgdGhpbmcgdG8gZG8uIFRoZSAyLjAgZHJpdmVyIGhhcworcHJvdmVuIHN0YWJsZSBvbiBtYW55IHN5c3RlbXMsIGJ1dCBpdCdzIHN0aWxsIGEgZ29vZCBpZGVhIHRvIHRha2Ugc29tZQorcHJlY2F1dGlvbnMuIEluIGFuIGlkZWFsIHdvcmxkIHlvdSB3b3VsZCBoYXZlIGEgZnVsbCBiYWNrdXAgb2YgeW91ciBkaXNrcy4KK1RoZSB3b3JsZCBpc24ndCBpZGVhbCBhbmQgbW9zdCBwZW9wbGUgZG9uJ3QgaGF2ZSBmdWxsIGJhY2t1cHMgKG1lIG5laXRoZXIpLgorU28gdGFrZSBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIG1lYXN1cmVzOgorKiBtYWtlIHlvdXIga2VybmVsIHJlbW91bnQgdGhlIEZTIHJlYWQtb25seSBvbiBkZXRlY3RpbmcgYW4gZXJyb3I6CisgIHR1bmUyZnMgLWUgcmVtb3VudC1ybyAvZGV2L3NkPz8KKyogaGF2ZSBjb3BpZXMgb2YgeW91ciBTQ1NJIGRpc2sncyBwYXJ0aXRpb24gdGFibGVzIG9uIHNvbWUgc2FmZSBsb2NhdGlvbjoKKyAgZGQgaWY9L2Rldi9zZGEgb2Y9L21udC9mbG9wcHkvc2RhIGJzPTUxMiBjb3VudD0xCisgIG9yIGp1c3QgcHJpbnQgaXQgd2l0aDoKKyAgZmRpc2sgLWwgfCBscHIKKyogbWFrZSBzdXJlIHlvdSBhcmUgYWJsZSB0byBib290IExpbnV4IChlLmcuIGZyb20gZmxvcHB5IGRpc2sgdXNpbmcgSW5pdFJEKQorICBpZiB5b3VyIFNDU0kgZGlzayBnZXRzIGNvcnJ1cHRlZC4gWW91IGNhbiB1c2UgCisgIGZ0cDovL3N0dWRlbnQucGh5c2lrLnVuaS1kb3J0bXVuZC5kZS9wdWIvbGludXgva2VybmVsL2Jvb3RkaXNrLmd6CisKK09uZSBtb3JlIHdhcm5pbmc6IEkgdXNlZCB0byBvdmVyY2xvY2sgbXkgUENJIGJ1cyB0byA0MS42NyBNSHouIE15IFRla3JhbQorREMzOTBGIChTeW01M2M4NzUpIGFjY2VwdGVkIHRoaXMgYXMgd2VsbCBhcyBteSBNaWxsZW5pdW0uIEJ1dCB0aGUgQW01M0M5NzQKK3Byb2R1Y2VkIGVycm9ycyBhbmQgc3RhcnRlZCB0byBjb3JydXB0IG15IGRpc2tzLiBTbyBkb24ndCBkbyB0aGF0ISBBIDM3LjUwCitNSHogUENJIGJ1cyB3b3JrcyBmb3IgbWUsIHRob3VnaCwgYnV0IEkgZG9uJ3QgcmVjb21tZW5kIHVzaW5nIGhpZ2hlciBjbG9ja3MKK3RoYW4gdGhlIDMzLjMzIE1IeiBiZWluZyBpbiB0aGUgUENJIHNwZWMuCisKK0lmIHlvdSB3YW50IHRvIHNoYXJlIHRoZSBJUlEgd2l0aCBhbm90aGVyIGRldmljZSBhbmQgdGhlIGRyaXZlciByZWZ1c2VzIHRvCitkbyBzbywgeW91IG1pZ2h0IHN1Y2NlZWQgd2l0aCBjaGFuZ2luZyB0aGUgREMzOTBfSVJRIHR5cGUgaW4gdG1zY3NpbS5jIHRvIAorU0FfU0hJUlEgfCBTQV9JTlRFUlJVUFQuCisKKworMy5GZWF0dXJlcworLS0tLS0tLS0tLQorLSBTQ1NJCisgKiBUYWdnZWQgY29tbWFuZCBxdWV1ZWluZworICogU3luYyBzcGVlZCB1cCB0byAxMCBNSHoKKyAqIERpc2Nvbm5lY3Rpb24KKyAqIE11bHRpcGxlIExVTnMKKworLSBHZW5lcmFsIC8gTGludXggaW50ZXJmYWNlCisgKiBTdXBwb3J0IGZvciB1cCB0byA0IEFNNTNDOTc0IGFkYXB0ZXJzLgorICogREMzOTAgRUVQUk9NIHVzYWdlIG9yIGJvb3QvbW9kdWxlIHBhcmFtcworICogSW5mb3JtYXRpb24gdmlhIGNhdCAvcHJvYy9zY3NpL3Rtc2NzaW0vPworICogRHluYW1pY2FsbHkgY29uZmlndXJhYmxlIGJ5IHdyaXRpbmcgdG8gL3Byb2Mvc2NzaS90bXNjc2ltLz8KKyAqIER5bmFtaWMgYWxsb2NhdGlvbiBvZiByZXNvdXJjZXMKKyAqIFNNUCBzdXBwb3J0OiBMb2NraW5nIG9uIGlvX3JlcXVlc3QgbG9jayAoTGludXggMi4xLzIuMikgb3IgYWRhcHRlciAKKyAgICBzcGVjaWZpYyBsb2NrcyAoTGludXggMi41PykKKyAqIFVuaWZvcm0gc291cmNlIGNvZGUgZm9yIExpbnV4LTIueC55CisgKiBTdXBwb3J0IGZvciBkeW4uIGFkZGl0aW9uL3JlbW92YWwgb2YgZGV2aWNlcyB2aWEgYWRkL3JlbW92ZS1zaW5nbGUtZGV2aWNlCisgICAoVHJ5OiBlY2hvICJzY3NpIGFkZC1zaW5nbGUtZGV2aWNlIEMgQiBUIFUiID4vcHJvYy9zY3NpL3Njc2kgCisgICAgQyA9IENvbnRyb2xsZXIsIEIgPSBCdXMsIFQgPSBUYXJnZXQgU0NTSSBJRCwgVSA9IFVuaXQgU0NTSSBMVU4uKSAKKyAgICBVc2Ugd2l0aCBjYXJlIQorICogVHJ5IHRvIHVzZSB0aGUgcGFydGl0aW9uIHRhYmxlIGZvciB0aGUgZGV0ZXJtaW5hdGlvbiBvZiB0aGUgbWFwcGluZworCisKKzQuIENvbmZpZ3VyYXRpb24gdmlhIC9wcm9jL3Njc2kvdG1zY3NpbS8/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRmlyc3Qgb2YgYWxsIGxvb2sgYXQgdGhlIG91dHB1dCBvZiAvcHJvYy9zY3NpL3Rtc2NzaW0vPyBieSB0eXBpbmcKKyBjYXQgL3Byb2Mvc2NzaS90bXNjc2ltLz8KK1RoZSAiPyIgc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IHRoZSBTQ1NJIGhvc3QgbnVtYmVyLiAoVGhlIHNoZWxsIG1pZ2h0IGRvIHRoaXMKK2ZvciB5b3UuKQorWW91IHdpbGwgc2VlIHNvbWUgaW5mbyByZWdhcmRpbmcgdGhlIGFkYXB0ZXIgYW5kLCBhdCB0aGUgZW5kLCBhIGxpc3Rpbmcgb2YKK3RoZSBhdHRhY2hlZCBkZXZpY2VzIGFuZCB0aGVpciBzZXR0aW5ncy4KKworSGVyZSdzIGFuIGV4YW1wbGU6CitnYXJsb2ZmQGt1cnQ6L2hvbWUvZ2FybG9mZiA+IGNhdCAvcHJvYy9zY3NpL3Rtc2NzaW0vMAorVGVrcmFtIERDMzkwL0FNNTNDOTc0IFBDSSBTQ1NJIEhvc3QgQWRhcHRlciwgRHJpdmVyIFZlcnNpb24gMi4wZTcgMjAwMC0xMS0yOAorU0NTSSBIb3N0IE5yIDEsIEFNNTNDOTc0IEFkYXB0ZXIgTnIgMAorSU9Qb3J0QmFzZSAweGIwMDAsIElSUSAxMAorTWF4SUQgOCwgTWF4TFVOIDgsIEFkYXB0ZXJJRCA2LCBTZWxUaW1lb3V0IDI1MCBtcywgRGVsYXlSZXNldCAxIHMKK1RhZ01heE51bSAxNiwgU3RhdHVzIDB4MDAsIEFDQkZsYWcgMHgwMCwgR2xpdGNoRWF0ZXIgMjQgbnMKK1N0YXRpc3RpY3M6IENtbmRzIDE0NzAxNjUsIENtbmRzIG5vdCBzZW50IGRpcmVjdGx5IDAsIE91dCBvZiBTUkIgY29uZHMgMAorICAgICAgICAgICAgTG9zdCBhcmJpdHJhdGlvbnMgNTg3LCAgU2VsLiBjb25uZWN0ZWQgMCwgQ29ubmVjdGVkOiBObworTnIgb2YgYXR0YWNoZWQgZGV2aWNlczogNCwgTnIgb2YgRENCczogNAorTWFwIG9mIGF0dGFjaGVkIExVTnM6IDAxIDAwIDAwIDAzIDAxIDAwIDAwIDAwCitJZHggSUQgTFVOIFBydHkgU3luYyBEc0NuIFNuZFMgVGFnUSBOZWdvUGVyaW9kIFN5bmNTcGVlZCBTeW5jT2ZmcyBNYXhDbWQKKzAwICAwMCAgMDAgIFllcyAgWWVzICBZZXMgIFllcyAgWWVzICAgMTAwIG5zICAgIDEwLjAgTSAgICAgIDE1ICAgICAgMTYKKzAxICAwMyAgMDAgIFllcyAgWWVzICBZZXMgIFllcyAgTm8gICAgMTAwIG5zICAgIDEwLjAgTSAgICAgIDE1ICAgICAgMDEKKzAyICAwMyAgMDEgIFllcyAgWWVzICBZZXMgIFllcyAgTm8gICAgMTAwIG5zICAgIDEwLjAgTSAgICAgIDE1ICAgICAgMDEKKzAzICAwNCAgMDAgIFllcyAgWWVzICBZZXMgIFllcyAgTm8gICAgMTAwIG5zICAgIDEwLjAgTSAgICAgIDE1ICAgICAgMDEKKworTm90ZSB0aGF0IHRoZSBzZXR0aW5ncyBNYXhJRCBhbmQgTWF4TFVOIGFyZSBub3QgemVyby0gYnV0IG9uZS1iYXNlZCwgd2hpY2gKK21lYW5zIHRoYXQgYSBzZXR0aW5nIE1heExVTj00LCB3aWxsIHJlc3VsdCBpbiB0aGUgc3VwcG9ydCBvZiBMVU5zIDAuLjMuIFRoaXMKK2lzIHNvbWVob3cgaW5jb252ZW5pZW50LCBidXQgdGhlIHdheSB0aGUgbWlkLWxldmVsIFNDU0kgY29kZSBleHBlY3RzIGl0IHRvIGJlLgorCitBQ0IgYW5kIERDQiBhcmUgYWNyb255bXMgZm9yIEFkYXB0ZXIgQ29udHJvbCBCbG9jayBhbmQgRGV2aWNlIENvbnRyb2wgQmxvY2suCitUaGVzZSBhcmUgZGF0YSBzdHJ1Y3R1cmVzIG9mIHRoZSBkcml2ZXIgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKK2FkYXB0ZXIgYW5kIHRoZSBjb25uZWN0ZWQgU0NTSSBkZXZpY2VzIHJlc3BlY3RpdmVseS4KKworSWR4IGlzIHRoZSBkZXZpY2UgaW5kZXggKGp1c3QgYSBjb25zZWN1dGl2ZSBudW1iZXIgZm9yIHRoZSBkcml2ZXIpLCBJRCBhbmQKK0xVTiBhcmUgdGhlIFNDU0kgSUQgYW5kIExVTiwgUHJ0eSBtZWFucyBQYXJpdHkgY2hlY2tpbmcsIFN5bmMgc3luY2hyb25vdXMKK25lZ290aWF0aW9uLCBEc0NuIERpc2Nvbm5lY3Rpb24sIFNuZFMgU2VuZCBTdGFydCBjb21tYW5kIG9uIHN0YXJ0dXAgKG5vdAordXNlZCBieSB0aGUgZHJpdmVyKSBhbmQgVGFnUSBUYWdnZWQgQ29tbWFuZCBRdWV1ZWluZy4gTmVnb1BlcmlvZCBhbmQKK1N5bmNTcGVlZCBhcmUgc29tZWhvdyByZWR1bmRhbnQsIGJlY2F1c2UgdGhleSBhcmUgcmVjaXByb2NhbCB2YWx1ZXMgCisoMSAvIDExMiBucyA9IDguOSBNSHopLiBBdCBsZWFzdCBpbiB0aGVvcnkuIFRoZSBkcml2ZXIgaXMgYWJsZSB0byBhZGp1c3QgdGhlCitOZWdvUGVyaW9kIG1vcmUgYWNjdXJhdGUgKDRucykgdGhhbiB0aGUgU3luY1NwZWVkICgxIC8gMjVucykuIEkgZG9uJ3Qga25vdworaWYgY2VydGFpbiBkZXZpY2VzIHdpbGwgaGF2ZSBwcm9ibGVtcyB3aXRoIHRoaXMgZGlzY3JlcGFuY3kuIE1heC4gc3BlZWQgaXMKKzEwIE1IeiBjb3JyZXNwLiB0byBhIG1pbi4gTmVnb1BlcmlvZCBvZiAxMDAgbnMuIAorKFRoZSBkcml2ZXIgYWxsb3dzIHNsaWdodGx5IGhpZ2hlciBzcGVlZHMgaWYgdGhlIGRldmljZXMgKFVsdHJhIFNDU0kpIGFjY2VwdAoraXQsIGJ1dCB0aGF0J3Mgb3V0IG9mIGFkYXB0ZXIgc3BlYywgb24geW91ciBvd24gcmlzayBhbmQgdW5saWtlbHkgdG8gaW1wcm92ZQorcGVyZm9ybWFuY2UuIFlvdSdyZSBsaWtlbHkgdG8gY3Jhc2ggeW91ciBkaXNrcy4pIAorU3luY09mZnMgaXMgdGhlIG9mZnNldCB1c2VkIGZvciBzeW5jaHJvbm91cyBuZWdvdGlhdGlvbnM7IG1heC4gaXMgMTUuIAorVGhlIGxhc3QgdmFsdWVzIGFyZSBvbmx5IHNob3duLCBpZiBTeW5jIGlzIGVuYWJsZWQuIChOZWdvUGVyaW9kIGlzIHN0aWxsCitkaXNwbGF5ZWQgaW4gYnJhY2tldHMgdG8gc2hvdyB0aGUgdmFsdWVzIHdoaWNoIHdpbGwgYmUgdXNlZCBhZnRlciBlbmFibGluZworU3luYy4pCitNYXhDbWQgaXN0IHRoZSBudW1iZXIgb2YgY29tbWFuZHMgKD10YWdzKSB3aGljaCBjYW4gYmUgcHJvY2Vzc2VkIGF0IHRoZSBzYW1lCit0aW1lIGJ5IHRoZSBkZXZpY2UuCisKK0lmIHlvdSB3YW50IHRvIGNoYW5nZSBhIHNldHRpbmcsIHlvdSBjYW4gZG8gdGhhdCBieSB3cml0aW5nIHRvCisvcHJvYy9zY3NpL3Rtc2NzaW0vPy4gQmFzaWNhbGx5IHlvdSBoYXZlIHRvIGltaXRhdGUgdGhlIG91dHB1dCBvZiBkcml2ZXIuCisoRG9uJ3QgdXNlIHRoZSBicmFja2V0cyBmb3IgTmVnb1BlcmlvZCBvbiBTeW5jIGRpc2FibGVkIGRldmljZXMuKQorWW91IGRvbid0IGhhdmUgdG8gY2FyZSBhYm91dCBjYXBpdGFsaXNhdGlvbi4gVGhlIGRyaXZlciB3aWxsIGFjY2VwdCBzcGFjZSwKK3RhYiwgY29tbWEsID0gYW5kIDogYXMgc2VwYXJhdG9ycy4KKworVGhlcmUgYXJlIHRocmVlIGtpbmRzIG9mIGNoYW5nZXM6IAorCisoMSkgQ2hhbmdlIGRyaXZlciBzZXR0aW5nczogCisgICAgWW91IHR5cGUgdGhlIG5hbWVzIG9mIHRoZSBwYXJhbWV0ZXJzIGFuZCB0aGUgcGFyYW1zIGZvbGxvd2luZyBpdC4KKyAgICBFeGFtcGxlOgorICAgICBlY2hvICJNYXhMVU49OCBzZWx0aW1lb3V0IDIwMCIgPi9wcm9jL3Njc2kvdG1zY3NpbS8wCisKKyAgICBOb3RlIHRoYXQgeW91IGNhbiBvbmx5IGNoYW5nZSBNYXhJRCwgTWF4TFVOLCBBZGFwdGVySUQsIFNlbFRpbWVPdXQsCisgICAgVGFnTWF4TnVtLCBBQ0JGbGFnLCBHbGl0Y2hFYXRlciBhbmQgRGVsYXlSZXNldC4gRG9uJ3QgY2hhbmdlIEFDQkZsYWcKKyAgICB1bmxlc3MgeW91IHdhbnQgdG8gc2VlIHdoYXQgaGFwcGVucywgaWYgdGhlIGRyaXZlciBoYW5ncy4KKworKDIpIENoYW5nZSBkZXZpY2Ugc2V0dGluZ3M6IFlvdSB3cml0ZSBhIGNvbmZpZyBsaW5lIHRvIHRoZSBkcml2ZXIuIFRoZSBOcgorICAgIG11c3QgbWF0Y2ggdGhlIElEIGFuZCBMVU4gZ2l2ZW4uIElmIHlvdSBnaXZlICItIiBhcyBwYXJhbWV0ZXIsIGl0IGlzCisgICAgaWdub3JlZCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgc2V0dGluZyB3b24ndCBiZSBjaGFuZ2VkLiAKKyAgICBZb3UgY2FuIHVzZSAieSIgb3IgIm4iIGluc3RlYWQgb2YgIlllcyIgYW5kICJObyIgaWYgeW91IHdhbnQgdG8uCisgICAgWW91IGRvbid0IG5lZWQgdG8gc3BlY2lmeSBhIGZ1bGwgbGluZS4gVGhlIGRyaXZlciBhdXRvbWF0aWNhbGx5IHBlcmZvcm1zCisgICAgYW4gSU5RVUlSWSBvbiB0aGUgZGV2aWNlIGlmIG5lY2Vzc2FyeSB0byBjaGVjayBpZiBpdCBpcyBjYXBhYmxlIHRvIG9wZXJhdGUKKyAgICB3aXRoIHRoZSBnaXZlbiBzZXR0aW5ncyAoU3luYywgVGFnUSkuCisgICAgRXhhbXBsZXM6CisgICAgIGVjaG8gIjAgMCAwIHkgeSB5IC0geSAtIDEwICIgPi9wcm9jL3Njc2kvdG1zY3NpbS8wCisgICAgIGVjaG8gIjMgNSAwIHkgbiB5ICIgPi9wcm9jL3Njc2kvdG1zY3NpbS8wCisKKyAgICBUbyBnaXZlIGEgc2hvcnQgZXhwbGFuYXRpb24gb2YgdGhlIGZpcnN0IGV4YW1wbGU6IAorICAgIFRoZSBmaXJzdCB0aHJlZSBudW1iZXJzLCAiMCAwIDAiIChEZXZpY2UgaW5kZXggMCwgU0NTSSBJRCAwLCBTQ1NJIExVTiAwKSwKKyAgICBzZWxlY3QgdGhlIGRldmljZSB0byB3aGljaCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgYXBwbHkuIE5vdGUgdGhhdCBpdAorICAgIHdvdWxkIGJlIHN1ZmZpY2llbnQgdG8gdXNlIHRoZSBpbmRleCBvciBib3RoIFNDU0kgSUQgYW5kIExVTiwgYnV0IEkgY2hvc2UKKyAgICB0byByZXF1aXJlIGFsbCB0aHJlZSB0byBoYXZlIGEgc3ludGF4IHNpbWlsYXIgdG8gdGhlIG91dHB1dC4KKyAgICBUaGUgZm9sbG93aW5nICJ5IHkgeSAtIHkiIGVuYWJsZXMgUGFyaXR5IGNoZWNraW5nLCBlbmFibGVzIFN5bmNocm9ub3VzCisgICAgdHJhbnNmZXJzLCBEaXNjb25uZWN0aW9uLCBsZWF2ZXMgU2VuZCBTdGFydCAobm90IHVzZWQpIHVudG91Y2hlZCBhbmQKKyAgICBlbmFibGVzIFRhZ2dlZCBDb21tYW5kIFF1ZXVlaW5nIGZvciB0aGUgc2VsZWN0ZWQgZGV2aWNlLiBUaGUgIi0iIHNraXBzCisgICAgdGhlIE5lZ290aWF0aW9uIFBlcmlvZCBzZXR0aW5nIGJ1dCB0aGUgIjEwIiBzZXRzIHRoZSBtYXggc3luYy4gc3BlZWQgdG8KKyAgICAxMCBNSHouIEl0J3MgdXNlbGVzcyB0byBzcGVjaWZ5IGJvdGggTmVnb1BlcmlvZCBhbmQgU3luY1NwZWVkIGFzCisgICAgZGlzY3Vzc2VkIGFib3ZlLiBUaGUgdmFsdWVzIHVzZWQgaW4gdGhpcyBleGFtcGxlIHdpbGwgcmVzdWx0IGluIG1heGltdW0KKyAgICBwZXJmb3JtYW5jZS4KKworKDMpIFNwZWNpYWwgY29tbWFuZHM6IFlvdSBjYW4gZm9yY2UgYSBTQ1NJIGJ1cyByZXNldCwgYW4gSU5RVUlSWSBjb21tYW5kLCB0aGUKKyAgICByZW1vdmFsIG9yIHRoZSBhZGRpdGlvbiBvZiBhIGRldmljZSdzIERDQiBhbmQgYSBTQ1NJIHJlZ2lzdGVyIGR1bXAuCisgICAgVGhpcyBpcyBvbmx5IHVzZWQgZm9yIGRlYnVnZ2luZyB3aGVuIHlvdSBtZWV0IHByb2JsZW1zLiBUaGUgcGFyYW1ldGVyIG9mCisgICAgdGhlIElOUVVJUlkgYW5kIFJFTU9WRSBjb21tYW5kcyBpcyB0aGUgZGV2aWNlIGluZGV4IGFzIHNob3duIGJ5IHRoZQorICAgIG91dHB1dCBvZiAvcHJvYy9zY3NpL3Rtc2NzaW0vPyBpbiB0aGUgZGV2aWNlIGxpc3RpbmcgaW4gdGhlIGZpcnN0IGNvbHVtbgorICAgIChJZHgpLiBBREQgdGFrZXMgdGhlIFNDU0kgSUQgYW5kIExVTi4KKyAgICBFeGFtcGxlczoKKyAgICAgZWNobyAicmVzZXQiID4vcHJvYy9zY3NpL3Rtc2NzaW0vMAorICAgICBlY2hvICJpbnF1aXJ5IDEiID4vcHJvYy9zY3NpL3Rtc2NzaW0vMAorICAgICBlY2hvICJyZW1vdmUgMiIgPi9wcm9jL3Njc2kvdG1zY3NpbS8xCisgICAgIGVjaG8gImFkZCAyIDMiID4vcHJvYy9zY3NpL3Rtc2NzaW0vPworICAgICBlY2hvICJkdW1wIiA+L3Byb2Mvc2NzaS90bXNjc2ltLzAKKworICAgIE5vdGUgdGhhdCB5b3Ugd2lsbCBtZWV0IHByb2JsZW1zIHdoZW4geW91IFJFTU9WRSBhIGRldmljZSdzIERDQiB3aXRoIHRoZQorICAgIHJlbW92ZSBjb21tYW5kIGlmIGl0IGNvbnRhaW5zIHBhcnRpdGlvbnMgd2hpY2ggYXJlIG1vdW50ZWQuIE9ubHkgdXNlIGl0CisgICAgYWZ0ZXIgdW5tb3VudGluZyBpdHMgcGFydGl0aW9ucywgdGVsbGluZyB0aGUgU0NTSSBtaWQtbGV2ZWwgY29kZSB0bworICAgIHJlbW92ZSBpdCAoc2NzaSByZW1vdmUtc2luZ2xlLWRldmljZSkgYW5kIHlvdSByZWFsbHkgbmVlZCBhIGZldyBieXRlcyBvZgorICAgIG1lbW9yeS4KKyAgICBUaGUgQUREIGNvbW1hbmQgYWxsb3dzIHlvdSB0byBjb25maWd1cmUgYSBkZXZpY2UgYmVmb3JlIHlvdSB0ZWxsIHRoZQorICAgIG1pZC1sZXZlbCBjb2RlIHRvIHRyeSBkZXRlY3Rpb24uCisKKworSSdkIHN1Z2dlc3QgcmV2aWV3aW5nIHRoZSBvdXRwdXQgb2YgL3Byb2Mvc2NzaS90bXNjc2ltLz8gYWZ0ZXIgY2hhbmdpbmcKK3NldHRpbmdzIHRvIHNlZSBpZiBldmVyeXRoaW5nIGNoYW5nZWQgYXMgcmVxdWVzdGVkLgorCisKKzUuIENvbmZpZ3VyYXRpb24gdmlhIGJvb3QvbW9kdWxlIHBhcmFtZXRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1dpdGggdGhlIERDMzkwLCB0aGUgZHJpdmVyIHJlYWRzIGl0cyBFRVBST00gc2V0dGluZ3MgYW5kIHRyaWVzIHRvIHVzZSB0aGVtLgorQnV0IHlvdSBtYXkgd2FudCB0byBvdmVycmlkZSB0aGUgc2V0dGluZ3MgcHJpb3IgdG8gYmVpbmcgYWJsZSB0byBjaGFuZ2UgdGhlCitkcml2ZXIgY29uZmlndXJhdGlvbiB2aWEgL3Byb2Mvc2NzaS90bXNjc2ltLz8uCitJZiB5b3UgZG8gaGF2ZSBhbm90aGVyIEFNNTNDOTc0IGJhc2VkIGFkYXB0ZXIsIHRoYXQncyBldmVuIHRoZSBvbmx5Citwb3NzaWJpbGl0eSB0byBhZGp1c3Qgc2V0dGluZ3MgYmVmb3JlIHlvdSBhcmUgYWJsZSB0byB3cml0ZSB0byB0aGUKKy9wcm9jL3Njc2kvdG1zY3NpbS8/IHBzZXVkby1maWxlLCBlLmcuIGlmIHlvdSB3YW50IHRvIHVzZSBhbm90aGVyIAorYWRhcHRlciBJRCB0aGFuIDcuICAKKyhCVFcsIHRoZSBsb2cgbWVzc2FnZSAiREMzOTA6IE5vIEVFUFJPTSBmb3VuZCEiIGlzIG5vcm1hbCB3aXRob3V0IGEgREMzOTAuKQorRm9yIHRoaXMgcHVycG9zZSwgeW91IGNhbiBwYXNzIG9wdGlvbnMgdG8gdGhlIGRyaXZlciBiZWZvcmUgaXQgaXMgaW5pdGlhbGlzZWQKK2J5IHVzaW5nIGtlcm5lbCBvciBtb2R1bGUgcGFyYW1ldGVycy4gU2VlIGxpbG8oOCkgb3IgbW9kcHJvYmUoMSkgbWFudWFsCitwYWdlcyBvbiBob3cgdG8gcGFzcyBwYXJhbXMgdG8gdGhlIGtlcm5lbCBvciBhIG1vZHVsZS4KK1tOT1RFOiBGb3JtZXJseSwgaXQgd2FzIG5vdCBwb3NzaWJsZSB0byBvdmVycmlkZSB0aGUgRUVQUk9NIHN1cHBsaWVkCisgc2V0dGluZ3Mgb2YgdGhlIERDMzkwIHdpdGggY21kIGxpbmUgcGFyYW1ldGVycy4gVGhpcyBoYXMgY2hhbmdlZCBzaW5jZQorIDIuMGU3XQorCitUaGUgc3ludGF4IG9mIHRoZSBwYXJhbXMgaXMgbXVjaCBzaG9ydGVyIHRoYW4gdGhlIHN5bnRheCBvZiB0aGUgL3Byb2MvLi4uCitpbnRlcmZhY2UuIFRoaXMgbWFrZXMgaXQgYSBsaXR0bGUgYml0IG1vcmUgZGlmZmljdWx0IHRvIHVzZS4gSG93ZXZlciwgbG9uZworcGFyYW1ldGVyIGxpbmVzIGhhdmUgdGhlIHJpc2sgdG8gYmUgbWlzaW50ZXJwcmV0ZWQgYW5kIHRoZSBsZW5ndGggb2Yga2VybmVsCitwYXJhbWV0ZXJzIGlzIGxpbWl0ZWQuCisKK0FzIHRoZSBzdXBwb3J0IGZvciBub24tREMzOTAgYWRhcHRlcnMgd29ya3MgYnkgc2ltdWxhdGluZyB0aGUgdmFsdWVzIG9mIHRoZQorREMzOTAgRUVQUk9NLCB0aGUgc2V0dGluZ3MgYXJlIGdpdmVuIGluIGEgREMzOTAgQklPUycgd2F5LgorCitIZXJlJ3MgdGhlIHN5bnRheDoKK3Rtc2NzaW09QWRhcHRJRCxTcGRJZHgsRGV2TW9kZSxBZGFwdE1vZGUsVGFnZ2VkQ21uZHMsRGVsYXlSZXNldAorCitFYWNoIG9mIHRoZSBwYXJhbWV0ZXJzIGlzIGEgbnVtYmVyLCBjb250YWluaW5nIHRoZSBkZXNjcmliZWQgaW5mb3JtYXRpb246CisKKyogQWRhcHRJRDogVGhlIFNDU0kgSUQgb2YgdGhlIGhvc3QgYWRhcHRlci4gTXVzdCBiZSBpbiB0aGUgcmFuZ2UgMC4uNworICBEZWZhdWx0IGlzIDcuCisKKyogU3BkSWR4OiBUaGUgaW5kZXggb2YgdGhlIG1heGltdW0gc3BlZWQgYXMgaW4gdGhlIERDMzkwIEJJT1MuIFRoZSB2YWx1ZXMKKyAgMC4uNyBtZWFuIDEwLCA4LjAsIDYuNywgNS43LCA1LjAsIDQuMCwgMy4xIGFuZCAyIE1IeiByZXNwLiBEZWZhdWx0IGlzCisgIDAgKDEwLjAgTUh6KS4KKworKiBEZXZNb2RlIGlzIGEgYml0IG1hcHBlZCB2YWx1ZSBkZXNjcmliaW5nIHRoZSBwZXItZGV2aWNlIGZlYXR1cmVzLiBJdAorICBhcHBsaWVzIHRvIGFsbCBkZXZpY2VzLiAoU3luYywgRGlzYyBhbmQgVGFnUSB3aWxsIG9ubHkgYXBwbHksIGlmIHRoZQorICBkZXZpY2Ugc3VwcG9ydHMgaXQuKSBUaGUgbWVhbmluZyBvZiB0aGUgYml0cyAoKiA9IGRlZmF1bHQpOgorCisgICBCaXQgVmFsKGhleCkgVmFsKGRlYykgIE1lYW5pbmcKKyAgICowCSAweDAxCSAgICAxCSAgUGFyaXR5IGNoZWNrCisgICAqMQkgMHgwMgkgICAgMgkgIFN5bmNocm9ub3VzIE5lZ290aWF0aW9uCisgICAqMgkgMHgwNAkgICAgNAkgIERpc2Nvbm5lY3Rpb24KKyAgICozCSAweDA4CSAgICA4CSAgU2VuZCBTdGFydCBjb21tYW5kIG9uIHN0YXJ0dXAuIChOb3QgdXNlZCkKKyAgICo0CSAweDEwCSAgIDE2CSAgVGFnZ2VkIENvbW1hbmQgUXVldWVpbmcKKworICBBcyB1c3VhbCwgdGhlIGRlc2lyZWQgdmFsdWUgaXMgb2J0YWluZWQgYnkgYWRkaW5nIHRoZSB3YW50ZWQgdmFsdWVzLiBJZgorICB5b3Ugd2FudCB0byBlbmFibGUgYWxsIHZhbHVlcywgZS5nLiwgeW91IHdvdWxkIHVzZSAzMSgweDFmKS4gRGVmYXVsdCBpcyAzMS4KKworKiBBZGFwdE1vZGUgaXMgYSBiaXQgbWFwcGVkIHZhbHVlIGRlc2NyaWJpbmcgdGhlIGVuYWJsZWQgYWRhcHRlciBmZWF0dXJlcy4KKworICAgQml0IFZhbChoZXgpIFZhbChkZWMpICBNZWFuaW5nCisgICAqMAkgMHgwMQkgICAgMQkgIFN1cHBvcnQgbW9yZSB0aGFuIHR3byBkcml2ZXMuIChOb3QgdXNlZCkKKyAgICoxCSAweDAyCSAgICAyCSAgVXNlIERPUyBjb21wYXRpYmxlIG1hcHBpbmcgZm9yIEhEcyBncmVhdGVyIHRoYW4gMUdCLgorICAgKjIJIDB4MDQJICAgIDQJICBSZXNldCBTQ1NJIEJ1cyBvbiBzdGFydHVwLgorICAgKjMJIDB4MDgJICAgIDgJICBBY3RpdmUgTmVnYXRpb246IEltcHJvdmVzIFNDU0kgQnVzIG5vaXNlIGltbXVuaXR5LgorICAgIDQJIDB4MTAJICAgMTYJICBJbW1lZGlhdGUgcmV0dXJuIG9uIEJJT1Mgc2VlayBjb21tYW5kLiAoTm90IHVzZWQpCisgKCopNQkgMHgyMAkgICAzMgkgIENoZWNrIGZvciBMVU5zID49IDEuCisgIAorICBUaGUgZGVmYXVsdCBmb3IgTFVOIENoZWNrIGRlcGVuZHMgb24gQ09ORklHX1NDU0lfTVVMVElfTFVOLgorCisqIFRhZ2dlZENtbmRzIGlzIGEgbnVtYmVyIGluZGljYXRpbmcgdGhlIG1heGltdW0gbnVtYmVyIG9mIFRhZ2dlZCBDb21tYW5kcy4KKyAgSXQgaXMgdGhlIGJpbmFyeSBsb2dhcml0aG0gLSAxIG9mIHRoZSBhY3R1YWwgbnVtYmVyLiBNYXggaXMgNCAoMzIpLgorICAgVmFsdWUgIE51bWJlciBvZiBUYWdnZWQgQ29tbWFuZHMKKyAgICAgMAkJIDIKKyAgICAgMQkJIDQKKyAgICAgMgkJIDgKKyAgICAqMwkJMTYKKyAgICAgNAkJMzIKKworKiBEZWxheVJlc2V0IGlzIHRoZSB0aW1lIGluIHNlY29uZHMgKG1pbnVzIDAuNXMpLCB0aGUgYWRhcHRlciB3YWl0cywgYWZ0ZXIgYQorICBidXMgcmVzZXQuIERlZmF1bHQgaXMgMSAoY29ycmVzcC4gdG8gMS41cykuCisKK0V4YW1wbGU6CisgbW9kcHJvYmUgdG1zY3NpbSB0bXNjc2ltPTYsMiwzMQord291bGQgc2V0IHRoZSBhZGFwdGVyIElEIHRvIDYsIG1heC4gc3BlZWQgdG8gNi43IE1IeiwgZW5hYmxlIGFsbCBkZXZpY2UKK2ZlYXR1cmVzIGFuZCBsZWF2ZSB0aGUgYWRhcHRlciBmZWF0dXJlcywgdGhlIG51bWJlciBvZiBUYWdnZWQgQ29tbWFuZHMKK2FuZCB0aGUgRGVsYXkgYWZ0ZXIgYSByZXNldCB0byB0aGUgZGVmYXVsdHMuCisKK0FzIHlvdSBjYW4gc2VlLCB5b3UgZG9uJ3QgbmVlZCB0byBzcGVjaWZ5IGFsbCBvZiB0aGUgc2l4IHBhcmFtcy4KK0lmIHlvdSB3YW50IHZhbHVlcyB0byBiZSBpZ25vcmVkIChpLmUuIHRoZSBFRXByb20gc2V0dGluZ3Mgb3IgdGhlIGRlZmF1bHRzCit3aWxsIGJlIHVzZWQpLCB5b3UgbWF5IHBhc3MgLTIgKG5vdCAwISkgYXQgdGhlIGNvcnJlc3BvbmRpbmcgcG9zaXRpb24uCisKK1RoZSBkZWZhdWx0cyAoNywwLDMxLDE1LDMsMSkgYXJlIGFnZ3Jlc3NpdmUgdG8gYWxsb3cgZ29vZCBwZXJmb3JtYW5jZS4gWW91CitjYW4gdXNlIHRtc2NzaW09NywwLDMxLDYzLDQsMCBmb3IgbWF4aW11bSBwZXJmb3JtYW5jZSwgaWYgeW91ciBTQ1NJIGNoYWluCithbGxvd3MgaXQuIElmIHlvdSBtZWV0IHByb2JsZW1zLCB5b3UgY2FuIHVzZSB0bXNjc2ltPS0xIHdoaWNoIGlzIGEgc2hvcnRjdXQKK2ZvciB0bXNjc2ltPTcsNCw5LDE1LDIsMTAuCisKKworNi4gUG90ZW50aWFsIGltcHJvdmVtZW50cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTW9zdCBvZiB0aGUgaW50ZW5kZWQgd29yayBvbiB0aGUgZHJpdmVyIGhhcyBiZWVuIGRvbmUuIEhlcmUgYXJlIGEgZmV3IGlkZWFzCit0byBmdXJ0aGVyIGltcHJvdmUgaXRzIHVzYWJpbGl0eToKKworKiBDbGVhbmx5IHNlcGFyYXRlIHBlci1UYXJnZXQgYW5kIHBlci1MVU4gcHJvcGVydGllcyAoRENCKQorKiBNb3JlIGludGVsbGlnZW50IGFib3J0KCkgcm91dGluZQorKiBVc2UgbmV3X2VoIGNvZGUgKExpbnV4LTIuMSspCisqIEhhdmUgdGhlIG1pZC1sZXZlbCAoTUwpIGNvZGUgKGFuZCBub3QgdGhlIGRyaXZlcikgaGFuZGxlIG1vcmUgb2YgdGhlCisgIHZhcmlvdXMgY29uZGl0aW9ucy4KKyogQ29tbWFuZCBxdWV1ZWluZyBpbiB0aGUgZHJpdmVyOiBFbGltaW5hdGUgUXVlcnkgbGlzdCBhbmQgdXNlIE1MIGluc3RlYWQuCisqIE1vcmUgdXNlciBmcmllbmRseSBib290L21vZHVsZSBwYXJhbSBzeW50YXgKKworRnVydGhlciBpbnZlc3RpZ2F0aW9uIG9uIHRoZXNlIHByb2JsZW1zOgorCisqIERyaXZlciBoYW5ncyB3aXRoIHN5bmMgcmVhZGNkZGEgKHhjZHJvYXN0KSAobW9zdCBwcm9iYWJseSBWSUEgUENJIGVycm9yKQorCitLbm93biBwcm9ibGVtczogCitQbGVhc2Ugc2VlIGh0dHA6Ly93d3cuZ2FybG9mZi5kZS9rdXJ0L2xpbnV4L2RjMzkwL3Byb2JsZW1zLmh0bWwKKworKiBDaGFuZ2luZyB0aGUgcGFyYW1ldGVycyBvZiBtdWx0aS1sdW4gYnkgdGhlIHRtc2NzaW0vPyBpbnRlcmZhY2Ugd2lsbAorICBjYXVzZSBwcm9ibGVtcywgY2F1c2UgdGhlc2Ugc2V0dGluZ3MgYXJlIG1vc3RseSBwZXIgVGFyZ2V0IGFuZCBub3QgcGVyIExVTgorICBhbmQgc2hvdWxkIGJlIHVwZGF0ZWQgYWNjb3JkaW5nbHkuIFRvIGJlIGZpeGVkIGZvciAyLjBkMjQuCisqIENEUnMgKGVnIFlhbSBDUlc0NDE2KSBub3QgcmVjb2duaXplZCwgYmVjYXVzZSBzb21lIGJ1Z2d5IGRldmljZXMgZG9uJ3QgCisgIHJlY292ZXIgZnJvbSBhIFNDU0kgcmVzZXQgaW4gdGltZS4gVXNlIGEgaGlnaGVyIGRlbGF5IG9yIGRvbid0IGlzc3VlCisgIGEgU0NTSSBidXMgcmVzZXQgb24gZHJpdmVyIGluaXRpYWxpemF0aW9uLiBTZWUgcHJvYmxlbXMgcGFnZS4KKyAgRm9yIHRoZSBDUlc0NDE2UywgdGhpcyBzZWVtcyB0byBiZSBzb2x2ZWQgd2l0aCBmaXJtd2FyZSAxLjBnIChyZXBvcnRlZCBieSAKKyAgSmVhbi1ZdmVzIEJhcmJpZXIpLgorKiBURUFDIENELTUzMlMgbm90IGJlaW5nIHJlY29nbml6ZWQuIChXb3JrcyB3aXRoIDEuMTEpLgorKiBTY2FubmVycyAoZWcuIEFzdHJhIFVNQVggMTIyMFMpIGRvbid0IHdvcms6IERpc2FibGUgU3luYyBOZWdvdGlhdGlvbi4KKyAgSWYgdGhpcyBkb2VzIG5vdCBoZWxwLCB0cnkgZWNobyAiSU5RVUlSWSB0IiA+L3Byb2Mvc2NzaS90bXNjc2ltLz8gKHQKKyAgcmVwbGFjZWQgYnkgdGhlIGRldiBpbmRleCBvZiB5b3VyIHNjYW5uZXIpLiBZb3UgbWF5IHRyeSB0byByZXNldCB5b3VyIFNDU0kKKyAgYnVzIGFmdGVyd2FyZHMgKGVjaG8gIlJFU0VUIiA+L3Byb2Mvc2NzaS90bXNjc2ltLz8pLgorICBUaGUgcHJvYmxlbSBzZWVtcyB0byBiZSBzb2x2ZWQgYXMgb2YgMi4wZDE4LCB0aGFua3MgdG8gQW5kcmVhcyBSaWNrLgorKiBJZiB0aGVyZSBpcyBhIHZhbGlkIHBhcnRpdGlvbiB0YWJsZSwgdGhlIGRyaXZlciB3aWxsIHVzZSBpdCBmb3IgZGV0ZXJtaW5nCisgIHRoZSBtYXBwaW5nLiBJZiB0aGVyZSdzIG5vbmUsIGEgcmVhc29uYWJsZSBtYXBwaW5nIChTeW1iaW9zLWxpa2UpIHdpbGwgYmUKKyAgYXNzdW1lZC4gT3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMgbWF5IG5vdCBsaWtlIHRoaXMgbWFwcGluZywgdGhvdWdoCisgIGl0J3MgY29uc2lzdGVudCB3aXRoIHRoZSBCSU9TJyBiZWhhdmlvdXIuIE9sZCBEQzM5MCBkcml2ZXJzIGlnbm9yZWQgdGhlCisgIHBhcnRpdGlvbiB0YWJsZSBhbmQgdXNlZCBhIEgvUyA9IDY0LzMyIG9yIDI1NS82MyB0cmFuc2xhdGlvbi4gU28gaWYgeW91CisgIHdhbnQgdG8gYmUgY29tcGF0aWJsZSB0byB0aG9zZSwgdXNlIHRoaXMgb2xkIG1hcHBpbmcgd2hlbiBjcmVhdGluZworICBwYXJ0aXRpb24gdGFibGVzLiBFdmVuIHdvcnNlLCBvbiBib290dXAgdGhlIERDMzkwIG1pZ2h0IGNvbXBsYWluIGlmIG90aGVyCisgIG1hcHBpbmdzIGFyZSBmb3VuZCwgc28gYXV0byByZWJvb3RpbmcgbWF5IGZhaWwuCisqIEluIHNvbWUgc2l0dWF0aW9ucywgdGhlIGRyaXZlciB3aWxsIGdldCBzdHVjayBpbiBhbiBhYm9ydCBsb29wLiBUaGlzIGlzIGEKKyAgYmFkIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIE1pZC1MYXllciBvZiBMaW51eCcgU0NTSSBjb2RlIGFuZCB0aGUgZHJpdmVyLgorICBUcnkgdG8gZGlzYWJsZSBEc0NuLCBpZiB5b3UgbWVldCB0aGlzIHByb2JsZW0uIFBsZWFzZSBjb250YWN0IG1lIGZvcgorICBmdXJ0aGVyIGRlYnVnZ2luZy4KKworCis3LiBCdWcgcmVwb3J0cywgZGVidWdnaW5nIGFuZCB1cGRhdGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitXaGVuZXZlciB5b3UgaGF2ZSBwcm9ibGVtcyB3aXRoIHRoZSBkcml2ZXIsIHlvdSBhcmUgaW52aXRlZCB0byBhc2sgdGhlCithdXRob3IgZm9yIGhlbHAuIEhvd2V2ZXIsIEknZCBzdWdnZXN0IHJlYWRpbmcgdGhlIGRvY3MgYW5kIHRyeWluZyB0byBzb2x2ZQordGhlIHByb2JsZW0geW91cnNlbGYsIGZpcnN0LiAKK0lmIHlvdSBmaW5kIHNvbWV0aGluZywgd2hpY2ggeW91IGJlbGlldmUgdG8gYmUgYSBidWcsIHBsZWFzZSByZXBvcnQgaXQgdG8gbWUuIAorUGxlYXNlIGFwcGVuZCB0aGUgb3V0cHV0IG9mIC9wcm9jL3Njc2kvc2NzaSwgL3Byb2Mvc2NzaS90bXNjc2ltLz8gYW5kCittYXliZSB0aGUgREMzOTAgbG9nIG1lc3NhZ2VzIHRvIHRoZSByZXBvcnQuIAorCitCdWcgcmVwb3J0cyBzaG91bGQgYmUgc2VuZCB0byBtZSAoS3VydCBHYXJsb2ZmIDxkYzM5MEBnYXJsb2ZmLmRlPikgYXMgd2VsbAorYXMgdG8gdGhlIGxpbnV4LXNjc2kgbGlzdCAoPGxpbnV4LXNjc2lAdmdlci5rZXJuZWwub3JnPiksIGFzIHNvbWV0aW1lcyBidWdzCithcmUgY2F1c2VkIGJ5IHRoZSBTQ1NJIG1pZC1sZXZlbCBjb2RlLgorCitJIHdpbGwgYXNrIHlvdSBmb3Igc29tZSBtb3JlIGRldGFpbHMgYW5kIHByb2JhYmx5IEkgd2lsbCBhbHNvIGFzayB5b3UgdG8KK2VuYWJsZSBzb21lIG9mIHRoZSBERUJVRyBvcHRpb25zIGluIHRoZSBkcml2ZXIgKHRtc2NzaW0uYzpEQzM5MF9ERUJVR1hYWAorZGVmaW5lcykuIFRoZSBkcml2ZXIgd2lsbCBwcm9kdWNlIHNvbWUgZGF0YSBmb3IgdGhlIHN5c2xvZyBmYWNpbGl0eSB0aGVuLgorQmV3YXJlOiBJZiB5b3VyIHN5c2xvZyBnZXRzIHdyaXR0ZW4gdG8gYSBTQ1NJIGRpc2sgY29ubmVjdGVkIHRvIHlvdXIKK0FNNTNDOTc0LCB0aGUgbG9nZ2luZyBtaWdodCBwcm9kdWNlIGxvZyBvdXRwdXQgYWdhaW4sIGFuZCB5b3UgbWlnaHQgZW5kCitoYXZpbmcgeW91ciBib3ggc3BlbmRpbmcgbW9zdCBvZiBpdHMgdGltZSBkb2luZyB0aGUgbG9nZ2luZy4KKworVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIgY2FuIGJlIGZvdW5kIGF0OgorIGh0dHA6Ly93d3cuZ2FybG9mZi5kZS9rdXJ0L2xpbnV4L2RjMzkwLworIGZ0cDovL2Z0cC5zdXNlLmNvbS9wdWIvcGVvcGxlL2dhcmxvZmYvbGludXgvZGMzOTAvCisKKworOC4gQWNrbm93bGVkZ2VtZW50cworLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhhbmtzIHRvIExpbnVzIFRvcnZhbGRzLCBBbGFuIENveCwgdGhlIEZTRiBwZW9wbGUsIHRoZSBYRnJlZTg2IHRlYW0gYW5kIAorYWxsIHRoZSBvdGhlcnMgZm9yIHRoZSB3b25kZXJmdWwgT1MgYW5kIHNvZnR3YXJlLgorVGhhbmtzIHRvIEMuTC4gSHVhbmcgYW5kIFBoaWxpcCBHaWFuZyAoVGVrcmFtKSBmb3IgdGhlIGluaXRpYWwgZHJpdmVyCityZWxlYXNlIGFuZCBzdXBwb3J0LgorVGhhbmtzIHRvIERvdWcgTGVkZm9yZCwgR+lyYXJkIFJvdWRpZXIgZm9yIHN1cHBvcnQgd2l0aCBTQ1NJIGNvZGluZy4KK1RoYW5rcyB0byBhIGxvdCBvZiBwZW9wbGUgKGVzcGVjLiBDaGlha2kgSXNoaWthd2EsIEFuZHJlYXMgSGF1bWVyLCBIdWJlcnQgCitUb25uZWF1KSBmb3IgaW50ZW5zaXZlbHkgdGVzdGluZyB0aGUgZHJpdmVyIChhbmQgZXZlbiByaXNraW5nIGRhdGEgbG9zcworZG9pbmcgdGhpcyBkdXJpbmcgZWFybHkgcmV2aXNpb25zKS4KK1JlY2VudGx5LCBTdVNFIEdtYkgsIE51ZXJuYmVyZywgRlJHLCBoYXMgYmVlbiBwYXlpbmcgbWUgZm9yIHRoZSBkcml2ZXIKK2RldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZS4gU3BlY2lhbCB0aGFua3MhCisKKworOS4gQ29weXJpZ2h0CistLS0tLS0tLS0tLS0KKyBUaGlzIGRyaXZlciBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAKKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgSWYgeW91IHdhbnQgdG8gdXNlIGFueSBsYXRlciB2ZXJzaW9uIG9mIHRoZSBHTlUgR1BMLCB5b3Ugd2lsbCBwcm9iYWJseQorIGJlIGFsbG93ZWQgdG8sIGJ1dCB5b3UgaGF2ZSB0byBhc2sgbWUgYW5kIFRla3JhbSA8ZXJpY2hAdGVrcmFtLmNvbS50dz4KKyBiZWZvcmUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1dyaXR0ZW4gYnkgS3VydCBHYXJsb2ZmIDxrdXJ0QGdhcmxvZmYuZGU+IDE5OTgvMDYvMTEKK0xhc3QgdXBkYXRlZCAyMDAwLzExLzI4LCBkcml2ZXIgcmV2aXNpb24gMi4wZTcKKyRJZDogUkVBRE1FLnRtc2NzaW0sdiAyLjI1LjIuNyAyMDAwLzEyLzIwIDAxOjA3OjEyIGdhcmxvZmYgRXhwICQK