ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8wMC1JTkRFWApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzQ5OTNkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzAwLUlOREVYCkBAIC0wLDAgKzEsMTI3IEBACiswMC1JTkRFWAorCS0gdGhpcyBmaWxlCiszYzUwNS50eHQKKwktIGluZm9ybWF0aW9uIG9uIHRoZSAzQ29tIEV0aGVyTGluayBQbHVzICgzYzUwNSkgZHJpdmVyLgorNnBhY2sudHh0CisJLSBpbmZvIG9uIHRoZSA2cGFjayBwcm90b2NvbCwgYW4gYWx0ZXJuYXRpdmUgdG8gS0lTUyBmb3IgQVguMjUKK0NvbmZpZ3VyYWJsZQorCS0gaW5mbyBvbiBzb21lIG9mIHRoZSBjb25maWd1cmFibGUgbmV0d29yayBwYXJhbWV0ZXJzCitETElOSy50eHQKKwktIGluZm8gb24gdGhlIEQtTGluayBERS02MDAvREUtNjIwIHBhcmFsbGVsIHBvcnQgcG9ja2V0IGFkYXB0ZXJzCitQTElQLnR4dAorCS0gUExJUDogVGhlIFBhcmFsbGVsIExpbmUgSW50ZXJuZXQgUHJvdG9jb2wgZGV2aWNlIGRyaXZlcgorUkVBRE1FLnNiMTAwMAorCS0gaW5mbyBvbiBHZW5lcmFsIEluc3RydW1lbnQvTmV4dExldmVsIFNVUkZib2FyZDEwMDAgY2FibGUgbW9kZW0uCithbGlhcy50eHQKKwktIGluZm8gb24gdXNpbmcgYWxpYXMgbmV0d29yayBkZXZpY2VzIAorYXJjbmV0LWhhcmR3YXJlLnR4dAorCS0gdG9ucyBvZiBpbmZvIG9uIEFSQ25ldCwgaHVicywganVtcGVyIHNldHRpbmdzIGZvciBBUkNuZXQgY2FyZHMsIGV0Yy4KK2FyY25ldC50eHQKKwktIGluZm8gb24gdGhlIHVzaW5nIHRoZSBBUkNuZXQgZHJpdmVyIGl0c2VsZi4KK2F0bS50eHQKKwktIGluZm8gb24gd2hlcmUgdG8gZ2V0IEFUTSBwcm9ncmFtcyBhbmQgc3VwcG9ydCBmb3IgTGludXguCitheDI1LnR4dAorCS0gaW5mbyBvbiB1c2luZyBBWC4yNSBhbmQgTkVUL1JPTSBjb2RlIGZvciBMaW51eAorYmF5Y29tLnR4dAorCS0gaW5mbyBvbiB0aGUgZHJpdmVyIGZvciBCYXljb20gc3R5bGUgYW1hdGV1ciByYWRpbyBtb2RlbXMKK2JyaWRnZS50eHQKKwktIHdoZXJlIHRvIGdldCB1c2VyIHNwYWNlIHByb2dyYW1zIGZvciBldGhlcm5ldCBicmlkZ2luZyB3aXRoIExpbnV4LgorY29teC50eHQKKwktIGluZm8gb24gZHJpdmVycyBmb3IgQ09NWCBsaW5lIG9mIHN5bmNocm9ub3VzIHNlcmlhbCBhZGFwdGVycy4KK2NvcHMudHh0CisJLSBpbmZvIG9uIHRoZSBDT1BTIExvY2FsVGFsayBMaW51eCBkcml2ZXIKK2NzODl4MC50eHQKKwktIHRoZSBDcnlzdGFsIExBTiAoQ1M4OTAwLzIwLWJhc2VkKSBFdGhlcm5ldCBJU0EgYWRhcHRlciBkcml2ZXIKK2RlNHg1LnR4dAorCS0gdGhlIERpZ2l0YWwgRXRoZXJXT1JLUyBERTQ/PyBhbmQgREU1Pz8gUENJIEV0aGVybmV0IGRyaXZlcgorZGVjbmV0LnR4dAorCS0gaW5mbyBvbiB1c2luZyB0aGUgREVDbmV0IG5ldHdvcmtpbmcgbGF5ZXIgaW4gTGludXguCitkZXBjYS50eHQKKwktIHRoZSBEaWdpdGFsIERFUENBL0V0aGVyV09SS1MgREUxPz8gYW5kIERFMj8/IExBTkNFIEV0aGVybmV0IGRyaXZlcgorZGdycy50eHQKKwktIHRoZSBEaWdpIEludGVybmF0aW9uYWwgUmlnaHRTd2l0Y2ggU0UtWCBFdGhlcm5ldCBkcml2ZXIKK2RtZmUudHh0CisJLSBpbmZvIG9uIHRoZSBEYXZpY29tIERNOTEwMihBKS9ETTkxMzIvRE05ODAxIGZhc3QgZXRoZXJuZXQgZHJpdmVyLgorZTEwMC50eHQKKwktIGluZm8gb24gSW50ZWwncyBFdGhlckV4cHJlc3MgUFJPLzEwMCBsaW5lIG9mIDEwLzEwMCBib2FyZHMKK2UxMDAwLnR4dAorCS0gaW5mbyBvbiBJbnRlbCdzIEUxMDAwIGxpbmUgb2YgZ2lnYWJpdCBldGhlcm5ldCBib2FyZHMKK2VxbC50eHQKKwktIHNlcmlhbCBJUCBsb2FkIGJhbGFuY2luZworZXRoZXJ0YXAudHh0CisJLSB0aGUgRXRoZXJ0YXAgdXNlciBzcGFjZSBwYWNrZXQgcmVjZXB0aW9uIGFuZCB0cmFuc21pc3Npb24gZHJpdmVyCitld3JrMy50eHQKKwktIHRoZSBEaWdpdGFsIEV0aGVyV09SS1MgMyBERTIwMy80LzUgRXRoZXJuZXQgZHJpdmVyCitmaWx0ZXIudHh0CisJLSBMaW51eCBTb2NrZXQgRmlsdGVyaW5nCitmb3JlMjAwZS50eHQKKwktIEZPUkUgU3lzdGVtcyBQQ0EtMjAwRS9TQkEtMjAwRSBBVE0gTklDIGRyaXZlciBpbmZvLgorZnJhbWVyZWxheS50eHQKKwktIGluZm8gb24gdXNpbmcgRnJhbWUgUmVsYXkvRGF0YSBMaW5rIENvbm5lY3Rpb24gSWRlbnRpZmllciAoRExDSSkuCitpcC1zeXNjdGwudHh0CisJLSAvcHJvYy9zeXMvbmV0L2lwdjQvKiB2YXJpYWJsZXMKK2lwX2R5bmFkZHIudHh0CisJLSBJUCBkeW5hbWljIGFkZHJlc3MgaGFjayBlLmcuIGZvciBhdXRvLWRpYWx1cCBsaW5rcworaXBkZHAudHh0CisJLSBBcHBsZVRhbGstSVAgRGVjYXBzdWxhdGlvbiBhbmQgQXBwbGVUYWxrLUlQIEVuY2Fwc3VsYXRpb24KK2lwaGFzZS50eHQKKwktIEludGVycGhhc2UgUENJIEFUTSAoaSlDaGlwIElBIExpbnV4IGRyaXZlciBpbmZvLgoraXJkYS50eHQKKwktIHdoZXJlIHRvIGdldCBJckRBIChpbmZyYXJlZCkgdXRpbGl0aWVzIGFuZCBpbmZvIGZvciBMaW51eC4KK2xhcGItbW9kdWxlLnR4dAorCS0gcHJvZ3JhbW1pbmcgaW5mb3JtYXRpb24gb2YgdGhlIExBUEIgbW9kdWxlLgorbHRwYy50eHQKKwktIHRoZSBBcHBsZSBvciBGYXJhbGxvbiBMb2NhbFRhbGsgUEMgY2FyZCBkcml2ZXIKK211bHRpY2FzdC50eHQKKwktIEJlaGF2aW91ciBvZiBjYXJkcyB1bmRlciBNdWx0aWNhc3QKK25jc2EtdGVsbmV0CisJLSBub3RlcyBvbiBob3cgTkNTQSB0ZWxuZXQgKERPUykgYnJlYWtzIHdpdGggTVRVIGRpc2NvdmVyeSBlbmFibGVkLgorbmV0LW1vZHVsZXMudHh0CisJLSBpbmZvIGFuZCAiaW5zbW9kIiBwYXJhbWV0ZXJzIGZvciBhbGwgbmV0d29yayBkcml2ZXIgbW9kdWxlcy4KK25ldGRldmljZXMudHh0CisJLSBpbmZvIG9uIG5ldHdvcmsgZGV2aWNlIGRyaXZlciBmdW5jdGlvbnMgZXhwb3J0ZWQgdG8gdGhlIGtlcm5lbC4KK29seW1waWMudHh0CisJLSBJQk0gUENJIFBpdC9QaXQtUGh5L09seW1waWMgVG9rZW4gUmluZyBkcml2ZXIgaW5mby4KK3BvbGljeS1yb3V0aW5nLnR4dAorCS0gSVAgcG9saWN5LWJhc2VkIHJvdXRpbmcKK3B0LnR4dAorCS0gdGhlIEdyYWNpbGlzIFBhY2tldHdpbiBBWC4yNSBkZXZpY2UgZHJpdmVyCityYXlfY3MudHh0CisJLSBSYXlsaW5rIFdpcmVsZXNzIExBTiBjYXJkIGRyaXZlciBpbmZvLgorcm91dGluZy50eHQKKwktIHRoZSBuZXcgcm91dGluZyBtZWNoYW5pc20KK3NoYXBlci50eHQKKwktIGluZm8gb24gdGhlIG1vZHVsZSB0aGF0IGNhbiBzaGFwZS9saW1pdCB0cmFuc21pdHRlZCB0cmFmZmljLgorc2lzOTAwLnR4dAorCS0gU2lTIDkwMC83MDE2IEZhc3QgRXRoZXJuZXQgZGV2aWNlIGRyaXZlciBpbmZvLgorc2s5OGxpbi50eHQKKwktIE1hcnZlbGwgWXVrb24gQ2hpcHNldCAvIFN5c0tvbm5lY3QgU0stOTh4eCBjb21wbGlhbnQgR2lnYWJpdAorCSAgRXRoZXJuZXQgQWRhcHRlciBmYW1pbHkgZHJpdmVyIGluZm8KK3NrZnAudHh0CisJLSBTeXNLb25uZWN0IEZEREkgKFNLLTV4eHgsIENvbXBhcSBOZXRlbGxpZ2VudCkgZHJpdmVyIGluZm8uCitzbWM5LnR4dAorCS0gdGhlIGRyaXZlciBmb3IgU01DJ3MgOTAwMCBzZXJpZXMgb2YgRXRoZXJuZXQgY2FyZHMKK3NtY3RyLnR4dAorCS0gU01DIFRva2VuQ2FyZCBUb2tlblJpbmcgTGludXggZHJpdmVyIGluZm8uCit0Y3AudHh0CisJLSBzaG9ydCBibHVyYiBvbiBob3cgVENQIG91dHB1dCB0YWtlcyBwbGFjZS4KK3RsYW4udHh0CisJLSBUaHVuZGVyTEFOIChDb21wYXEgTmV0ZWxsaWdlbnQgMTAvMTAwLCBPbGljb20gT0MtMnh4eCkgZHJpdmVyIGluZm8uCit0bXMzODB0ci50eHQKKwktIFN5c0tvbm5lY3QgVG9rZW4gUmluZyBJU0EvUENJIGFkYXB0ZXIgZHJpdmVyIGluZm8uCit0dW50YXAudHh0CisJLSBUVU4vVEFQIGRldmljZSBkcml2ZXIsIGFsbG93aW5nIHVzZXIgc3BhY2UgUngvVHggb2YgcGFja2V0cy4KK3ZvcnRleC50eHQKKwktIGluZm8gb24gdXNpbmcgM0NvbSBWb3J0ZXggKDNjNTkwLCAzYzU5MiwgM2M1OTUsIDNjNTk3KSBFdGhlcm5ldCBjYXJkcy4KK3dhbi1yb3V0ZXIudHh0CisJLSBXYW4gcm91dGVyIGRvY3VtZW50YXRpb24KK3dhbnBpcGUudHh0CisJLSBXQU5QSVBFKHRtKSBNdWx0aXByb3RvY29sIFdBTiBEcml2ZXIgZm9yIExpbnV4IFdBTiBSb3V0ZXIKK3dhdmVsYW4udHh0CisJLSBBVCZUIEdJUyAobmVlIE5DUikgV2F2ZUxBTiBjYXJkOiBBbiBFdGhlcm5ldC1saWtlIHJhZGlvIHRyYW5zY2VpdmVyCit4MjUudHh0CisJLSBnZW5lcmFsIGluZm8gb24gWC4yNSBkZXZlbG9wbWVudC4KK3gyNS1pZmFjZS50eHQKKwktIGRlc2NyaXB0aW9uIG9mIHRoZSBYLjI1IFBhY2tldCBMYXllciB0byBMQVBCIGRldmljZSBpbnRlcmZhY2UuCit6ODUzMGRydi50eHQKKwktIGluZm8gYWJvdXQgTGludXggZHJpdmVyIGZvciBaODUzMCBiYXNlZCBIRExDIGNhcmRzIGZvciBBWC4yNQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzNjMzU5LnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8zYzM1OS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFmODA3MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8zYzM1OS50eHQKQEAgLTAsMCArMSw1OCBAQAorCiszQ09NIFBDSSBUT0tFTiBMSU5LIFZFTE9DSVRZIFhMIFRPS0VOIFJJTkcgQ0FSRFMgUkVBRE1FCisKK1JlbGVhc2UgMC45LjAgLSBSZWxlYXNlICAgCisJSnVsIDE3dGggMjAwMCBNaWtlIFBoaWxsaXBzIAorCisJMS4yLjAgLSBGaW5hbAorCUZlYiAxN3RoIDIwMDIgTWlrZSBQaGlsbGlwcyAKKwlVcGRhdGVkIGZvciBzdWJtaXNzaW9uIHRvIHRoZSAyLjQueCBrZXJuZWwuCisKK1RoYW5rczoKKwlUZXJyeSBNdXJwaHkgZnJvbSAzQ29tIGZvciB0ZWNoIGRvY3MgYW5kIHN1cHBvcnQsCisJQWRhbSBELiBMaWdhcyBmb3IgdGVzdGluZyB0aGUgZHJpdmVyLgorIAorTm90ZToKKwlUaGlzIGRyaXZlciB3aWxsIE5PVCB3b3JrIHdpdGggdGhlIDNDMzM5IFRva2VuIFJpbmcgY2FyZHMsIHlvdSBuZWVkCit0byB1c2UgdGhlIHRtczM4MCBkcml2ZXIgaW5zdGVhZC4KKworT3B0aW9uczoKKworVGhlIGRyaXZlciBhY2NlcHRzIHRocmVlIG9wdGlvbnM6IHJpbmdzcGVlZCwgcGt0X2J1Zl9zeiBhbmQgbWVzc2FnZV9sZXZlbC4KKworVGhlc2Ugb3B0aW9ucyBjYW4gYmUgc3BlY2lmaWVkIGRpZmZlcmVudGx5IGZvciBlYWNoIGNhcmQgZm91bmQuIAorCityaW5nc3BlZWQ6ICBIYXMgb25lIG9mIHRocmVlIHNldHRpbmdzIDAgKGRlZmF1bHQpLCA0IG9yIDE2LiAgMCB3aWxsIAorbWFrZSB0aGUgY2FyZCBhdXRvc2Vuc2UgdGhlIHJpbmdzcGVlZCBhbmQgam9pbiBhdCB0aGUgYXBwcm9wcmlhdGUgc3BlZWQsIAordGhpcyB3aWxsIGJlIHRoZSBkZWZhdWx0IG9wdGlvbiBmb3IgbW9zdCBwZW9wbGUuICA0IG9yIDE2IGFsbG93IHlvdSB0byAKK2V4cGxpY2l0bHkgZm9yY2UgdGhlIGNhcmQgdG8gb3BlcmF0ZSBhdCBhIGNlcnRhaW4gc3BlZWQuICBUaGUgY2FyZCB3aWxsIGZhaWwgCitpZiB5b3UgdHJ5IHRvIGluc2VydCBpdCBhdCB0aGUgd3Jvbmcgc3BlZWQuIChBbHRob3VnaCBzb21lIGh1YnMgd2lsbCBhbGxvdyAKK3RoaXMgc28gYmUgKnZlcnkqIGNhcmVmdWwpLiAgVGhlIG1haW4gcHVycG9zZSBmb3IgZXhwbGljaXRseSBzZXR0aW5nIHRoZSByaW5nCitzcGVlZCBpcyBmb3Igd2hlbiB0aGUgY2FyZCBpcyBmaXJzdCBvbiB0aGUgcmluZy4gIEluIGF1dG9zZW5zZSBtb2RlLCBpZiB0aGUgY2FyZAorY2Fubm90IGRldGVjdCBhbnkgYWN0aXZlIG1vbml0b3JzIG9uIHRoZSByaW5nIGl0IHdpbGwgb3BlbiBhdCB0aGUgc2FtZSBzcGVlZCBhcworaXRzIGxhc3Qgb3BlbmluZy4gVGhpcyBjYW4gYmUgaGF6YXJkb3VzIGlmIHRoaXMgc3BlZWQgZG9lcyBub3QgbWF0Y2ggdGhlIHNwZWVkCit5b3Ugd2FudCB0aGUgcmluZyB0byBvcGVyYXRlIGF0LiAgCisKK3BrdF9idWZfc3o6ICBUaGlzIGlzIHRoaXMgaW5pdGlhbCByZWNlaXZlIGJ1ZmZlciBhbGxvY2F0aW9uIHNpemUuICBUaGlzIHdpbGwKK2RlZmF1bHQgdG8gNDA5NiBpZiBubyB2YWx1ZSBpcyBlbnRlcmVkLiBZb3UgbWF5IGluY3JlYXNlIHBlcmZvcm1hbmNlIG9mIHRoZSAKK2RyaXZlciBieSBzZXR0aW5nIHRoaXMgdG8gYSB2YWx1ZSBsYXJnZXIgdGhhbiB0aGUgbmV0d29yayBwYWNrZXQgc2l6ZSwgYWx0aG91Z2gKK3RoZSBkcml2ZXIgbm93IHJlLXNpemVzIGJ1ZmZlcnMgYmFzZWQgb24gTVRVIHNldHRpbmdzIGFzIHdlbGwuIAorCittZXNzYWdlX2xldmVsOiBDb250cm9scyBsZXZlbCBvZiBtZXNzYWdlcyBjcmVhdGVkIGJ5IHRoZSBkcml2ZXIuIERlZmF1bHRzIHRvIDA6Cit3aGljaCBvbmx5IGRpc3BsYXlzIHN0YXJ0LXVwIGFuZCBjcml0aWNhbCBtZXNzYWdlcy4gIFByZXNlbnRseSBhbnkgbm9uLXplcm8gCit2YWx1ZSB3aWxsIGRpc3BsYXkgYWxsIHNvZnQgbWVzc2FnZXMgYXMgd2VsbC4gIE5CIFRoaXMgZG9lcyBub3QgdHVybiAKK2RlYnVnZ2luZyBtZXNzYWdlcyBvbiwgdGhhdCBtdXN0IGJlIGRvbmUgYnkgbW9kaWZpZWQgdGhlIHNvdXJjZSBjb2RlLgorCitWYXJpYWJsZSBNVFUgc2l6ZToKKworVGhlIGRyaXZlciBjYW4gaGFuZGxlIGEgTVRVIHNpemUgdXB0byBlaXRoZXIgNDUwMCBvciAxODAwMCBkZXBlbmRpbmcgdXBvbiAKK3Jpbmcgc3BlZWQuICBUaGUgZHJpdmVyIGFsc28gY2hhbmdlcyB0aGUgc2l6ZSBvZiB0aGUgcmVjZWl2ZSBidWZmZXJzIGFzIHBhcnQKK29mIHRoZSBtdHUgcmUtc2l6aW5nLCBzbyBpZiB5b3Ugc2V0IG10dSA9IDE4MDAwLCB5b3Ugd2lsbCBuZWVkIHRvIGJlIGFibGUKK3RvIGFsbG9jYXRlIDE2ICogKHNrX2J1ZmYgd2l0aCAxODAwMCBidWZmZXIgc2l6ZSkgY2FsbCBpdCAxODUwMCBieXRlcyBwZXIgcmluZyAKK3Bvc2l0aW9uID0gMjk2LDAwMCBieXRlcyBvZiBtZW1vcnkgc3BhY2UsIHBsdXMgb2YgY291cnNlIGFueXRoaW5nIAorbmVjZXNzYXJ5IGZvciB0aGUgdHggc2tfYnVmZidzLiAgUmVtZW1iZXIgdGhpcyBpcyBwZXIgY2FyZCwgc28gaWYgeW91IGFyZQorYnVpbGRpbmcgcm91dGVycywgZ2F0ZXdheSdzIGV0YywgeW91IGNvdWxkIHN0YXJ0IHRvIHVzZSBhIGxvdCBvZiBtZW1vcnkKK3JlYWwgZmFzdC4KKworMi8xNy8wMiBNaWtlIFBoaWxsaXBzCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8zYzUwNS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvM2M1MDUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZDViNzIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvM2M1MDUudHh0CkBAIC0wLDAgKzEsNDYgQEAKK1RoZSAzQ29tIEV0aGVybGluayBQbHVzICgzYzUwNSkgZHJpdmVyLgorCitUaGlzIGRyaXZlciBub3cgdXNlcyBETUEuICBUaGVyZSBpcyBjdXJyZW50bHkgbm8gc3VwcG9ydCBmb3IgUElPIG9wZXJhdGlvbi4KK1RoZSBkZWZhdWx0IERNQSBjaGFubmVsIGlzIDY7IHRoaXMgaXMgX25vdF8gYXV0b3Byb2JlZCwgc28geW91IG11c3QKK21ha2Ugc3VyZSB5b3UgY29uZmlndXJlIGl0IGNvcnJlY3RseS4gIElmIGxvYWRpbmcgdGhlIGRyaXZlciBhcyBhCittb2R1bGUsIHlvdSBjYW4gZG8gdGhpcyB3aXRoICJtb2Rwcm9iZSAzYzUwNSBkbWE9biIuICBJZiB0aGUgZHJpdmVyIGlzCitsaW5rZWQgc3RhdGljYWxseSBpbnRvIHRoZSBrZXJuZWwsIHlvdSBtdXN0IGVpdGhlciB1c2UgYW4gImV0aGVyPSIKK3N0YXRlbWVudCBvbiB0aGUgY29tbWFuZCBsaW5lLCBvciBjaGFuZ2UgdGhlIGRlZmluaXRpb24gb2YgRUxQX0RNQSBpbiAzYzUwNS5oLgorCitUaGUgZHJpdmVyIHdpbGwgd2FybiB5b3UgaWYgaXQgaGFzIHRvIGZhbGwgYmFjayBvbiB0aGUgY29tcGlsZWQgaW4KK2RlZmF1bHQgRE1BIGNoYW5uZWwuIAorCitJZiBubyBiYXNlIGFkZHJlc3MgaXMgZ2l2ZW4gYXQgYm9vdCB0aW1lLCB0aGUgZHJpdmVyIHdpbGwgYXV0b3Byb2JlCitwb3J0cyAweDMwMCwgMHgyODAgYW5kIDB4MzEwIChpbiB0aGF0IG9yZGVyKS4gIElmIG5vIElSUSBpcyBnaXZlbiwgdGhlIGRyaXZlcgord2lsbCB0cnkgdG8gcHJvYmUgZm9yIGl0LgorCitUaGUgZHJpdmVyIGNhbiBiZSB1c2VkIGFzIGEgbG9hZGFibGUgbW9kdWxlLiAgU2VlIG5ldC1tb2R1bGVzLnR4dCBmb3IgZGV0YWlscworb2YgdGhlIHBhcmFtZXRlcnMgaXQgY2FuIHRha2UuICAKKworVGhlb3JldGljYWxseSwgb25lIGluc3RhbmNlIG9mIHRoZSBkcml2ZXIgY2FuIG5vdyBydW4gbXVsdGlwbGUgY2FyZHMsCitpbiB0aGUgc3RhbmRhcmQgd2F5ICh3aGVuIGxvYWRpbmcgYSBtb2R1bGUsIHNheSAibW9kcHJvYmUgM2M1MDUKK2lvPTB4MzAwLDB4MzQwIGlycT0xMCwxMSBkbWE9Niw3IiBvciB3aGF0ZXZlcikuICBJIGhhdmUgbm90IHRlc3RlZAordGhpcywgdGhvdWdoLgorCitUaGUgZHJpdmVyIG1heSBub3cgc3VwcG9ydCByZXZpc2lvbiAyIGhhcmR3YXJlOyB0aGUgZGVwZW5kZW5jeSBvbgorYmVpbmcgYWJsZSB0byByZWFkIHRoZSBob3N0IGNvbnRyb2wgcmVnaXN0ZXIgaGFzIGJlZW4gcmVtb3ZlZC4gIFRoaXMKK2lzIGFsc28gdW50ZXN0ZWQsIHNpbmNlIEkgZG9uJ3QgaGF2ZSBhIHN1aXRhYmxlIGNhcmQuCisKK0tub3duIHByb2JsZW1zOgorIEkgc3RpbGwgc2VlICJETUEgdXBsb2FkIHRpbWVkIG91dCIgbWVzc2FnZXMgZnJvbSB0aW1lIHRvIHRpbWUuICBUaGVzZQorc2VlbSB0byBiZSBmYWlybHkgbm9uLWZhdGFsIHRob3VnaC4KKyBUaGUgY2FyZCBpcyBvbGQgYW5kIHNsb3cuCisKK1RvIGRvOgorIEltcHJvdmUgcHJvYmUvc2V0dXAgY29kZQorIFRlc3QgbXVsdGljYXN0IGFuZCBwcm9taXNjdW91cyBvcGVyYXRpb24KKworQXV0aG9yczoKKyBUaGUgZHJpdmVyIGlzIG1haW5seSB3cml0dGVuIGJ5IENyYWlnIFNvdXRoZXJlbiwgZW1haWwKKyA8Y3JhaWdzQGluZWx1a2kuYXBhbmEub3JnLmF1Pi4KKyBQYXJ0cyBvZiB0aGUgZHJpdmVyIChhZGFwdGluZyB0aGUgZHJpdmVyIHRvIDEuMS40KyBrZXJuZWxzLAorIElSUS9hZGRyZXNzIGRldGVjdGlvbiwgc29tZSBjaGFuZ2VzKSBhbmQgdGhpcyBSRUFETUUgYnkKKyBKdWhhIExhaWhvIDxqbGFpaG9AaWNoYW9zLm51bGxuZXQuZmk+LgorIERNQSBtb2RlLCBtb3JlIGZpeGVzLCBldGMsIGJ5IFBoaWxpcCBCbHVuZGVsbCA8cGpiMjdAY2FtLmFjLnVrPgorIE11bHRpY2FyZCBzdXBwb3J0LCBTb2Z0d2FyZSBjb25maWd1cmFibGUgRE1BLCBldGMuLCBieQorIENocmlzdG9waGVyIENvbGxpbnMgPGNjb2xsaW5zQHBjdWcub3JnLmF1PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzNjNTA5LnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8zYzUwOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY3YTk5ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8zYzUwOS50eHQKQEAgLTAsMCArMSwyMTAgQEAKK0xpbnV4IGFuZCB0aGUgM0NvbSBFdGhlckxpbmsgSUlJIFNlcmllcyBFdGhlcmNhcmRzIChkcml2ZXIgdjEuMThjIGFuZCBoaWdoZXIpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgaW5zdHJ1Y3Rpb25zIGFuZCBjYXZlYXRzIGZvciB2MS4xOGMgYW5kIGhpZ2hlciB2ZXJzaW9ucworb2YgdGhlIDNjNTA5IGRyaXZlci4gWW91IHNob3VsZCBub3QgdXNlIHRoZSBkcml2ZXIgd2l0aG91dCByZWFkaW5nIHRoaXMgZmlsZS4KKworcmVsZWFzZSAxLjAKKzI4IEZlYnJ1YXJ5IDIwMDIKK0N1cnJlbnQgbWFpbnRhaW5lciAoY29ycmVjdGlvbnMgdG8pOgorICBEYXZpZCBSdWdnaWVybyA8amRyQGZhcmZhbGxlLmNvbT4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoMCkgSW50cm9kdWN0aW9uCisKK1RoZSBmb2xsb3dpbmcgYXJlIG5vdGVzIGFuZCBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGUgM0NvbSBFdGhlckxpbmsgSUlJIHNlcmllcworZXRoZXJjYXJkcyBpbiBMaW51eC4gVGhlc2UgY2FyZHMgYXJlIGNvbW1vbmx5IGtub3duIGJ5IHRoZSBtb3N0IHdpZGVseS11c2VkCitjYXJkJ3MgM0NvbSBtb2RlbCBudW1iZXIsIDNjNTA5LiBUaGV5IGFyZSBhbGwgMTBtYi9zIElTQS1idXMgY2FyZHMgYW5kIHNob3VsZG4ndAorYmUgKGJ1dCBzb21ldGltZXMgYXJlKSBjb25mdXNlZCB3aXRoIHRoZSBzaW1pbGFybHktbnVtYmVyZWQgUENJLWJ1cyAiM2M5MDUiCisoYWthICJWb3J0ZXgiIG9yICJCb29tZXJhbmciKSBzZXJpZXMuICBLZXJuZWwgc3VwcG9ydCBmb3IgdGhlIDNjNTA5IGZhbWlseSBpcworcHJvdmlkZWQgYnkgdGhlIG1vZHVsZSAzYzUwOS5jLCB3aGljaCBoYXMgY29kZSB0byBzdXBwb3J0IGFsbCBvZiB0aGUgZm9sbG93aW5nCittb2RlbHM6CisKKyAgM2M1MDkgKG9yaWdpbmFsIElTQSBjYXJkKQorICAzYzUwOUIgKGxhdGVyIHJldmlzaW9uIG9mIHRoZSBJU0EgY2FyZDsgc3VwcG9ydHMgZnVsbC1kdXBsZXgpCisgIDNjNTg5IChQQ01DSUEpCisgIDNjNTg5QiAobGF0ZXIgcmV2aXNpb24gb2YgdGhlIDNjNTg5OyBzdXBwb3J0cyBmdWxsLWR1cGxleCkKKyAgM2M1MjkgKE1DQSkKKyAgM2M1NzkgKEVJU0EpCisKK0xhcmdlIHBvcnRpb25zIG9mIHRoaXMgZG9jdW1lbnRhdGlvbiB3ZXJlIGhlYXZpbHkgYm9ycm93ZWQgZnJvbSB0aGUgZ3VpZGUKK3dyaXR0ZW4gdGhlIG9yaWdpbmFsIGF1dGhvciBvZiB0aGUgM2M1MDkgZHJpdmVyLCBEb25hbGQgQmVja2VyLiBUaGUgbWFzdGVyCitjb3B5IG9mIHRoYXQgZG9jdW1lbnQsIHdoaWNoIGNvbnRhaW5zIG5vdGVzIG9uIG9sZGVyIHZlcnNpb25zIG9mIHRoZSBkcml2ZXIsCitjdXJyZW50bHkgcmVzaWRlcyBvbiBTY3lsZCB3ZWIgc2VydmVyOiBodHRwOi8vd3d3LnNjeWxkLmNvbS9uZXR3b3JrLzNjNTA5Lmh0bWwuCisKKworKDEpIFNwZWNpYWwgRHJpdmVyIEZlYXR1cmVzCisKK092ZXJyaWRpbmcgY2FyZCBzZXR0aW5ncworCitUaGUgZHJpdmVyIGFsbG93cyBib290LSBvciBsb2FkLXRpbWUgb3ZlcnJpZGluZyBvZiB0aGUgY2FyZCdzIGRldGVjdGVkIElPQUREUiwKK0lSUSwgYW5kIHRyYW5zY2VpdmVyIHNldHRpbmdzLCBhbHRob3VnaCB0aGlzIGNhcGFiaWxpdHkgc2hvdWxkbid0IGdlbmVyYWxseSBiZQorbmVlZGVkIGV4Y2VwdCB0byBlbmFibGUgZnVsbC1kdXBsZXggbW9kZSAoc2VlIGJlbG93KS4gQW4gZXhhbXBsZSBvZiB0aGUgc3ludGF4Citmb3IgTElMTyBwYXJhbWV0ZXJzIGZvciBkb2luZyB0aGlzOgorCisgICAgZXRoZXI9MTAsMHgzMTAsMywweDNjNTA5LGV0aDAgCisKK1RoaXMgY29uZmlndXJlcyB0aGUgZmlyc3QgZm91bmQgM2M1MDkgY2FyZCBmb3IgSVJRIDEwLCBiYXNlIEkvTyAweDMxMCwgYW5kCit0cmFuc2NlaXZlciB0eXBlIDMgKDEwYmFzZTIpLiBUaGUgZmxhZyAiMHgzYzUwOSIgbXVzdCBiZSBzZXQgdG8gYXZvaWQgY29uZmxpY3RzCit3aXRoIG90aGVyIGNhcmQgdHlwZXMgd2hlbiBvdmVycmlkaW5nIHRoZSBJL08gYWRkcmVzcy4gV2hlbiB0aGUgZHJpdmVyIGlzCitsb2FkZWQgYXMgYSBtb2R1bGUsIG9ubHkgdGhlIElSUSBhbmQgdHJhbnNjZWl2ZXIgc2V0dGluZyBtYXkgYmUgb3ZlcnJpZGRlbi4KK0ZvciBleGFtcGxlLCBzZXR0aW5nIHR3byBjYXJkcyB0byAxMGJhc2UyL0lSUTEwIGFuZCBBVUkvSVJRMTEgaXMgZG9uZSBieSB1c2luZwordGhlIHhjdnIgYW5kIGlycSBtb2R1bGUgb3B0aW9uczoKKworICAgb3B0aW9ucyAzYzUwOSB4Y3ZyPTMsMSBpcnE9MTAsMTEKKworCisoMikgRnVsbC1kdXBsZXggbW9kZQorCitUaGUgdjEuMThjIGRyaXZlciBhZGRlZCBzdXBwb3J0IGZvciB0aGUgM2M1MDlCJ3MgZnVsbC1kdXBsZXggY2FwYWJpbGl0aWVzLgorSW4gb3JkZXIgdG8gZW5hYmxlIGFuZCBzdWNjZXNzZnVsbHkgdXNlIGZ1bGwtZHVwbGV4IG1vZGUsIHRocmVlIGNvbmRpdGlvbnMKK211c3QgYmUgbWV0OiAKKworKGEpIFlvdSBtdXN0IGhhdmUgYSBFdGhlcmxpbmsgSUlJIGNhcmQgbW9kZWwgd2hvc2UgaGFyZHdhcmUgc3VwcG9ydHMgZnVsbC0KK2R1cGxleCBvcGVyYXRpb25zLiBDdXJyZW50bHksIHRoZSBvbmx5IG1lbWJlcnMgb2YgdGhlIDNjNTA5IGZhbWlseSB0aGF0IGFyZQorcG9zaXRpdmVseSBrbm93biB0byBzdXBwb3J0IGZ1bGwtZHVwbGV4IGFyZSB0aGUgM2M1MDlCIChJU0EgYnVzKSBhbmQgM2M1ODlCCisoUENNQ0lBKSBjYXJkcy4gQ2FyZHMgd2l0aG91dCB0aGUgIkIiIG1vZGVsIGRlc2lnbmF0aW9uIGRvICpub3QqIHN1cHBvcnQKK2Z1bGwtZHVwbGV4IG1vZGU7IHRoZXNlIGluY2x1ZGUgdGhlIG9yaWdpbmFsIDNjNTA5IChubyAiQiIpLCB0aGUgb3JpZ2luYWwKKzNjNTg5LCB0aGUgM2M1MjkgKE1DQSBidXMpLCBhbmQgdGhlIDNjNTc5IChFSVNBIGJ1cykuCisKKyhiKSBZb3UgbXVzdCBiZSB1c2luZyB5b3VyIGNhcmQncyAxMGJhc2VUIHRyYW5zY2VpdmVyIChpLmUuLCB0aGUgUkotNDUKK2Nvbm5lY3RvciksIG5vdCBpdHMgQVVJICh0aGljay1uZXQpIG9yIDEwYmFzZTIgKHRoaW4tbmV0L2NvYXgpIGludGVyZmFjZXMuCitBVUkgYW5kIDEwYmFzZTIgbmV0d29yayBjYWJsaW5nIGlzIHBoeXNpY2FsbHkgaW5jYXBhYmxlIG9mIGZ1bGwtZHVwbGV4CitvcGVyYXRpb24uCisKKyhjKSBNb3N0IGltcG9ydGFudGx5LCB5b3VyIDNjNTA5QiBtdXN0IGJlIGNvbm5lY3RlZCB0byBhIGxpbmsgcGFydG5lciB0aGF0IGlzCitpdHNlbGYgZnVsbC1kdXBsZXggY2FwYWJsZS4gVGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IG9uZSBvZiB0d28gdGhpbmdzOiBhIGZ1bGwtCitkdXBsZXgtY2FwYWJsZSAgRXRoZXJuZXQgc3dpdGNoICgqbm90KiBhIGh1YiksIG9yIGEgZnVsbC1kdXBsZXgtY2FwYWJsZSBOSUMgb24KK2Fub3RoZXIgc3lzdGVtIHRoYXQncyBjb25uZWN0ZWQgZGlyZWN0bHkgdG8gdGhlIDNjNTA5QiB2aWEgYSBjcm9zc292ZXIgY2FibGUuCisgCisvLy8vL0V4dHJlbWVseSBpbXBvcnRhbnQgY2F1dGlvbiBjb25jZXJuaW5nIGZ1bGwtZHVwbGV4IG1vZGUvLy8vLworVW5kZXJzdGFuZCB0aGF0IHRoZSAzYzUwOUIncyBoYXJkd2FyZSdzIGZ1bGwtZHVwbGV4IHN1cHBvcnQgaXMgbXVjaCBtb3JlCitsaW1pdGVkIHRoYW4gdGhhdCBwcm92aWRlIGJ5IG1vcmUgbW9kZXJuIG5ldHdvcmsgaW50ZXJmYWNlIGNhcmRzLiBBbHRob3VnaAorYXQgdGhlIHBoeXNpY2FsIGxheWVyIG9mIHRoZSBuZXR3b3JrIGl0IGZ1bGx5IHN1cHBvcnRzIGZ1bGwtZHVwbGV4IG9wZXJhdGlvbiwKK3RoZSBjYXJkIHdhcyBkZXNpZ25lZCBiZWZvcmUgdGhlIGN1cnJlbnQgRXRoZXJuZXQgYXV0by1uZWdvdGlhdGlvbiAoTi13YXkpCitzcGVjIHdhcyB3cml0dGVuLiBUaGlzIG1lYW5zIHRoYXQgdGhlIDNjNTA5QiBmYW1pbHkgKioqY2Fubm90IGFuZCB3aWxsIG5vdAorYXV0by1uZWdvdGlhdGUgYSBmdWxsLWR1cGxleCBjb25uZWN0aW9uIHdpdGggaXRzIGxpbmsgcGFydG5lciB1bmRlciBhbnkKK2NpcmN1bXN0YW5jZXMsIG5vIG1hdHRlciBob3cgaXQgaXMgaW5pdGlhbGl6ZWQqKiouIElmIHRoZSBmdWxsLWR1cGxleCBtb2RlCitvZiB0aGUgM2M1MDlCIGlzIGVuYWJsZWQsIGl0cyBsaW5rIHBhcnRuZXIgd2lsbCB2ZXJ5IGxpa2VseSBuZWVkIHRvIGJlCitpbmRlcGVuZGVudGx5IF9mb3JjZWRfIGludG8gZnVsbC1kdXBsZXggbW9kZSBhcyB3ZWxsOyBvdGhlcndpc2UgdmFyaW91cyBuYXN0eQorZmFpbHVyZXMgd2lsbCBvY2N1ciAtIGF0IHRoZSB2ZXJ5IGxlYXN0LCB5b3UnbGwgc2VlIG1hc3NpdmUgbnVtYmVycyBvZiBwYWNrZXQKK2NvbGxpc2lvbnMuIFRoaXMgaXMgb25lIG9mIHZlcnkgcmFyZSBjaXJjdW1zdGFuY2VzIHdoZXJlIGRpc2FibGluZyBhdXRvLQorbmVnb3RpYXRpb24gYW5kIGZvcmNpbmcgdGhlIGR1cGxleCBtb2RlIG9mIGEgbmV0d29yayBpbnRlcmZhY2UgY2FyZCBvciBzd2l0Y2gKK3dvdWxkIGV2ZXIgYmUgbmVjZXNzYXJ5IG9yIGRlc2lyYWJsZS4KKworCisoMykgQXZhaWxhYmxlIFRyYW5zY2VpdmVyIFR5cGVzCisKK0ZvciB2ZXJzaW9ucyBvZiB0aGUgZHJpdmVyIHYxLjE4YyBhbmQgYWJvdmUsIHRoZSBhdmFpbGFibGUgdHJhbnNjZWl2ZXIgdHlwZXMgYXJlOgorIAorMCAgdHJhbnNjZWl2ZXIgdHlwZSBmcm9tIEVFUFJPTSBjb25maWcgKG5vcm1hbGx5IDEwYmFzZVQpOyBmb3JjZSBoYWxmLWR1cGxleAorMSAgQVVJICh0aGljay1uZXQgLyBEQjE1IGNvbm5lY3RvcikKKzIgICh1bmRlZmluZWQpCiszICAxMGJhc2UyICh0aGluLW5ldCA9PSBjb2F4IC8gQk5DIGNvbm5lY3RvcikKKzQgIDEwYmFzZVQgKFJKLTQ1IGNvbm5lY3Rvcik7IGZvcmNlIGhhbGYtZHVwbGV4IG1vZGUKKzggIHRyYW5zY2VpdmVyIHR5cGUgYW5kIGR1cGxleCBtb2RlIHRha2VuIGZyb20gY2FyZCdzIEVFUFJPTSBjb25maWcgc2V0dGluZ3MKKzEyIDEwYmFzZVQgKFJKLTQ1IGNvbm5lY3Rvcik7IGZvcmNlIGZ1bGwtZHVwbGV4IG1vZGUKKworUHJpb3IgdG8gZHJpdmVyIHZlcnNpb24gMS4xOGMsIG9ubHkgdHJhbnNjZWl2ZXIgY29kZXMgMC00IHdlcmUgc3VwcG9ydGVkLiBOb3RlCit0aGF0IHRoZSBuZXcgdHJhbnNjZWl2ZXIgY29kZXMgOCBhbmQgMTIgYXJlIHRoZSAqb25seSogb25lcyB0aGF0IHdpbGwgZW5hYmxlCitmdWxsLWR1cGxleCBtb2RlLCBubyBtYXR0ZXIgd2hhdCB0aGUgY2FyZCdzIGRldGVjdGVkIEVFUFJPTSBzZXR0aW5ncyBtaWdodCBiZS4KK1RoaXMgaW5zdXJlZCB0aGF0IG1lcmVseSB1cGdyYWRpbmcgdGhlIGRyaXZlciBmcm9tIGFuIGVhcmxpZXIgdmVyc2lvbiB3b3VsZAorbmV2ZXIgYXV0b21hdGljYWxseSBlbmFibGUgZnVsbC1kdXBsZXggbW9kZSBpbiBhbiBleGlzdGluZyBpbnN0YWxsYXRpb247CitpdCBtdXN0IGFsd2F5cyBiZSBleHBsaWNpdGx5IGVuYWJsZWQgdmlhIG9uZSBvZiB0aGVzZSBjb2RlIGluIG9yZGVyIHRvIGJlCithY3RpdmF0ZWQuCisgIAorCisoNGEpIEludGVycHJldGF0aW9uIG9mIGVycm9yIG1lc3NhZ2VzIGFuZCBjb21tb24gcHJvYmxlbXMKKworRXJyb3IgTWVzc2FnZXMKKworZXRoMDogSW5maW5pdGUgbG9vcCBpbiBpbnRlcnJ1cHQsIHN0YXR1cyAyMDExLiAKK1RoZXNlIGFyZSAibW9zdGx5IGhhcm1sZXNzIiBtZXNzYWdlIGluZGljYXRpbmcgdGhhdCB0aGUgZHJpdmVyIGhhZCB0b28gbXVjaAord29yayBkdXJpbmcgdGhhdCBpbnRlcnJ1cHQgY3ljbGUuIFdpdGggYSBzdGF0dXMgb2YgMHgyMDExIHlvdSBhcmUgcmVjZWl2aW5nCitwYWNrZXRzIGZhc3RlciB0aGFuIHRoZXkgY2FuIGJlIHJlbW92ZWQgZnJvbSB0aGUgY2FyZC4gVGhpcyBzaG91bGQgYmUgcmFyZQorb3IgaW1wb3NzaWJsZSBpbiBub3JtYWwgb3BlcmF0aW9uLiBQb3NzaWJsZSBjYXVzZXMgb2YgdGhpcyBlcnJvciByZXBvcnQgYXJlOgorIAorICAgLSBhICJncmVlbiIgbW9kZSBlbmFibGVkIHRoYXQgc2xvd3MgdGhlIHByb2Nlc3NvciBkb3duIHdoZW4gdGhlcmUgaXMgbm8KKyAgICAga2V5Ym9hcmQgYWN0aXZpdGl5LiAKKworICAgLSBzb21lIG90aGVyIGRldmljZSBvciBkZXZpY2UgZHJpdmVyIGhvZ2dpbmcgdGhlIGJ1cyBvciBkaXNhYmxpbmcgaW50ZXJydXB0cy4KKyAgICAgQ2hlY2sgL3Byb2MvaW50ZXJydXB0cyBmb3IgZXhjZXNzaXZlIGludGVycnVwdCBjb3VudHMuIFRoZSB0aW1lciB0aWNrCisgICAgIGludGVycnVwdCBzaG91bGQgYWx3YXlzIGJlIGluY3JlbWVudGluZyBmYXN0ZXIgdGhhbiB0aGUgb3RoZXJzLiAKKworTm8gcmVjZWl2ZWQgcGFja2V0cyAKK0lmIGEgM2M1MDksIDNjNTYyIG9yIDNjNTg5IGNhbiBzdWNjZXNzZnVsbHkgdHJhbnNtaXQgcGFja2V0cywgYnV0IG5ldmVyCityZWNlaXZlcyBwYWNrZXRzIChhcyByZXBvcnRlZCBieSAvcHJvYy9uZXQvZGV2IG9yICdpZmNvbmZpZycpIHlvdSBsaWtlbHkKK2hhdmUgYW4gaW50ZXJydXB0IGxpbmUgcHJvYmxlbS4gQ2hlY2sgL3Byb2MvaW50ZXJydXB0cyB0byB2ZXJpZnkgdGhhdCB0aGUKK2NhcmQgaXMgYWN0dWFsbHkgZ2VuZXJhdGluZyBpbnRlcnJ1cHRzLiBJZiB0aGUgaW50ZXJydXB0IGNvdW50IGlzIG5vdAoraW5jcmVhc2luZyB5b3UgbGlrZWx5IGhhdmUgYSBwaHlzaWNhbCBjb25mbGljdCB3aXRoIHR3byBkZXZpY2VzIHRyeWluZyB0bwordXNlIHRoZSBzYW1lIElTQSBJUlEgbGluZS4gVGhlIGNvbW1vbiBjb25mbGljdCBpcyB3aXRoIGEgc291bmQgY2FyZCBvbiBJUlExMAorb3IgSVJRNSwgYW5kIHRoZSBlYXNpZXN0IHNvbHV0aW9uIGlzIHRvIG1vdmUgdGhlIDNjNTA5IHRvIGEgZGlmZmVyZW50CitpbnRlcnJ1cHQgbGluZS4gSWYgdGhlIGRldmljZSBpcyByZWNlaXZpbmcgcGFja2V0cyBidXQgJ3BpbmcnIGRvZXNuJ3Qgd29yaywKK3lvdSBoYXZlIGEgcm91dGluZyBwcm9ibGVtLgorCitUeCBDYXJyaWVyIEVycm9ycyBSZXBvcnRlZCBpbiAvcHJvYy9uZXQvZGV2IAorSWYgYW4gRXRoZXJMaW5rIElJSSBhcHBlYXJzIHRvIHRyYW5zbWl0IHBhY2tldHMsIGJ1dCB0aGUgIlR4IGNhcnJpZXIgZXJyb3JzIgorZmllbGQgaW4gL3Byb2MvbmV0L2RldiBpbmNyZW1lbnRzIGFzIHF1aWNrbHkgYXMgdGhlIFR4IHBhY2tldCBjb3VudCwgeW91CitsaWtlbHkgaGF2ZSBhbiB1bnRlcm1pbmF0ZWQgbmV0d29yayBvciB0aGUgaW5jb3JyZWN0IG1lZGlhIHRyYW5zY2VpdmVyIHNlbGVjdGVkLiAKKworM2M1MDlCIGNhcmQgaXMgbm90IGRldGVjdGVkIG9uIG1hY2hpbmVzIHdpdGggYW4gSVNBIFBuUCBCSU9TLiAKK1doaWxlIHRoZSB1cGRhdGVkIGRyaXZlciB3b3JrcyB3aXRoIG1vc3QgUG5QIEJJT1MgcHJvZ3JhbXMsIGl0IGRvZXMgbm90IHdvcmsKK3dpdGggYWxsLiBUaGlzIGNhbiBiZSBmaXhlZCBieSBkaXNhYmxpbmcgUG5QIHN1cHBvcnQgdXNpbmcgdGhlIDNDb20tc3VwcGxpZWQKK3NldHVwIHByb2dyYW0uIAorCiszYzUwOSBjYXJkIGlzIG5vdCBkZXRlY3RlZCBvbiBvdmVyY2xvY2tlZCBtYWNoaW5lcyAKK0luY3JlYXNlIHRoZSBkZWxheSB0aW1lIGluIGlkX3JlYWRfZWVwcm9tKCkgZnJvbSB0aGUgY3VycmVudCB2YWx1ZSwgNTAwLAordG8gYW4gYWJzdXJkbHkgaGlnaCB2YWx1ZSwgc3VjaCBhcyA1MDAwLiAKKworCisoNGIpIERlY29kaW5nIFN0YXR1cyBhbmQgRXJyb3IgTWVzc2FnZXMKKworVGhlIGJpdHMgaW4gdGhlIG1haW4gc3RhdHVzIHJlZ2lzdGVyIGFyZTogCisKK3ZhbHVlIAlkZXNjcmlwdGlvbgorMHgwMSAJSW50ZXJydXB0IGxhdGNoCisweDAyIAlUeCBvdmVycnVuLCBvciBSeCB1bmRlcnJ1bgorMHgwNCAJVHggY29tcGxldGUKKzB4MDggCVR4IEZJRk8gcm9vbSBhdmFpbGFibGUKKzB4MTAgCUEgY29tcGxldGUgUnggcGFja2V0IGhhcyBhcnJpdmVkCisweDIwIAlBIFJ4IHBhY2tldCBoYXMgc3RhcnRlZCB0byBhcnJpdmUKKzB4NDAgCVRoZSBkcml2ZXIgaGFzIHJlcXVlc3RlZCBhbiBpbnRlcnJ1cHQKKzB4ODAgCVN0YXRpc3RpY3MgY291bnRlciBuZWFybHkgZnVsbAorCitUaGUgYml0cyBpbiB0aGUgdHJhbnNtaXQgKFR4KSBzdGF0dXMgd29yZCBhcmU6IAorCit2YWx1ZSAJZGVzY3JpcHRpb24KKzB4MDIgCU91dC1vZi13aW5kb3cgY29sbGlzaW9uLgorMHgwNCAJU3RhdHVzIHN0YWNrIG92ZXJmbG93IChub3JtYWxseSBpbXBvc3NpYmxlKS4KKzB4MDggCTE2IGNvbGxpc2lvbnMuCisweDEwIAlUeCB1bmRlcnJ1biAobm90IGVub3VnaCBQQ0kgYnVzIGJhbmR3aWR0aCkuCisweDIwIAlUeCBqYWJiZXIuCisweDQwIAlUeCBpbnRlcnJ1cHQgcmVxdWVzdGVkLgorMHg4MCAJU3RhdHVzIGlzIHZhbGlkICh0aGlzIHNob3VsZCBhbHdheXMgYmUgc2V0KS4KKworCitXaGVuIGEgdHJhbnNtaXQgZXJyb3Igb2NjdXJzIHRoZSBkcml2ZXIgcHJvZHVjZXMgYSBzdGF0dXMgbWVzc2FnZSBzdWNoIGFzIAorCisgICBldGgwOiBUcmFuc21pdCBlcnJvciwgVHggc3RhdHVzIHJlZ2lzdGVyIDgyCisKK1RoZSB0d28gdmFsdWVzIHR5cGljYWxseSBzZWVuIGhlcmUgYXJlOgorCisweDgyIAorT3V0IG9mIHdpbmRvdyBjb2xsaXNpb24uIFRoaXMgdHlwaWNhbGx5IG9jY3VycyB3aGVuIHNvbWUgb3RoZXIgRXRoZXJuZXQKK2hvc3QgaXMgaW5jb3JyZWN0bHkgc2V0IHRvIGZ1bGwgZHVwbGV4IG9uIGEgaGFsZiBkdXBsZXggbmV0d29yay4gCisKKzB4ODggCisxNiBjb2xsaXNpb25zLiBUaGlzIHR5cGljYWxseSBvY2N1cnMgd2hlbiB0aGUgbmV0d29yayBpcyBleGNlcHRpb25hbGx5IGJ1c3kKK29yIHdoZW4gYW5vdGhlciBob3N0IGRvZXNuJ3QgY29ycmVjdGx5IGJhY2sgb2ZmIGFmdGVyIGEgY29sbGlzaW9uLiBJZiB0aGlzCitlcnJvciBpcyBtaXhlZCB3aXRoIDB4ODIgZXJyb3JzIGl0IGlzIHRoZSByZXN1bHQgb2YgYSBob3N0IGluY29ycmVjdGx5IHNldAordG8gZnVsbCBkdXBsZXggKHNlZSBhYm92ZSkuCisKK0JvdGggb2YgdGhlc2UgZXJyb3JzIGFyZSB0aGUgcmVzdWx0IG9mIG5ldHdvcmsgcHJvYmxlbXMgdGhhdCBzaG91bGQgYmUKK2NvcnJlY3RlZC4gVGhleSBkbyBub3QgcmVwcmVzZW50IGRyaXZlciBtYWxmdW5jdGlvbi4KKworCisoNSkgUmV2aXNpb24gaGlzdG9yeSAodGhpcyBmaWxlKQorCisyOEZlYjAyIHYxLjAgIERSICAgTmV3OyBtYWpvciBwb3J0aW9ucyBiYXNlZCBvbiBCZWNrZXIgb3JpZ2luYWwgM2M1MDkgZG9jcworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvNnBhY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzZwYWNrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGVkMmI3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzZwYWNrLnR4dApAQCAtMCwwICsxLDE3NSBAQAorVGhpcyBpcyB0aGUgNnBhY2stbWluaS1IT1dUTywgd3JpdHRlbiBieQorCitBbmRyZWFzIEv2bnNnZW4gREczS1EKK0ludGVybmV0OiBhamtAaWVoay5yd3RoLWFhY2hlbi5kZQorQU1QUi1uZXQ6IGRnM2txQGRiMHByYS5hbXByLm9yZworQVguMjU6ICAgIGRnM2txQGRiMGFjaC4jbnJ3LmRldS5ldQorCitMYXN0IHVwZGF0ZTogQXByaWwgNywgMTk5OAorCisxLiBXaGF0IGlzIDZwYWNrLCBhbmQgd2hhdCBhcmUgdGhlIGFkdmFudGFnZXMgdG8gS0lTUz8KKworNnBhY2sgaXMgYSB0cmFuc21pc3Npb24gcHJvdG9jb2wgZm9yIGRhdGEgZXhjaGFuZ2UgYmV0d2VlbiB0aGUgUEMgYW5kCit0aGUgVE5DIG92ZXIgYSBzZXJpYWwgbGluZS4gSXQgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdG8gS0lTUy4KKworNnBhY2sgaGFzIHR3byBtYWpvciBhZHZhbnRhZ2VzOgorLSBUaGUgUEMgaXMgZ2l2ZW4gZnVsbCBjb250cm9sIG92ZXIgdGhlIHJhZGlvCisgIGNoYW5uZWwuIFNwZWNpYWwgY29udHJvbCBkYXRhIGlzIGV4Y2hhbmdlZCBiZXR3ZWVuIHRoZSBQQyBhbmQgdGhlIFROQyBzbworICB0aGF0IHRoZSBQQyBrbm93cyBhdCBhbnkgdGltZSBpZiB0aGUgVE5DIGlzIHJlY2VpdmluZyBkYXRhLCBpZiBhIFROQworICBidWZmZXIgdW5kZXJydW4gb3Igb3ZlcnJ1biBoYXMgb2NjdXJyZWQsIGlmIHRoZSBQVFQgaXMKKyAgc2V0IGFuZCBzbyBvbi4gVGhpcyBjb250cm9sIGRhdGEgaXMgcHJvY2Vzc2VkIGF0IGEgaGlnaGVyIHByaW9yaXR5IHRoYW4KKyAgbm9ybWFsIGRhdGEsIHNvIGEgZGF0YSBzdHJlYW0gY2FuIGJlIGludGVycnVwdGVkIGF0IGFueSB0aW1lIHRvIGlzc3VlIGFuCisgIGltcG9ydGFudCBldmVudC4gVGhpcyBoZWxwcyB0byBpbXByb3ZlIHRoZSBjaGFubmVsIGFjY2VzcyBhbmQgdGltaW5nIAorICBhbGdvcml0aG1zIGFzIGV2ZXJ5dGhpbmcgaXMgY29tcHV0ZWQgaW4gdGhlIFBDLiBJdCB3b3VsZCBldmVuIGJlIHBvc3NpYmxlIAorICB0byBleHBlcmltZW50IHdpdGggc29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50IGZyb20gdGhlIGtub3duIENTTUEgYW5kIAorICBEQU1BIGNoYW5uZWwgYWNjZXNzIG1ldGhvZHMuCisgIFRoaXMga2luZCBvZiByZWFsLXRpbWUgY29udHJvbCBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCB0byBzdXBwbHkgc2V2ZXJhbAorICBUTkNzIHRoYXQgYXJlIGNvbm5lY3RlZCBiZXR3ZWVuIGVhY2ggb3RoZXIgYW5kIHRoZSBQQyBieSBhIGRhaXN5IGNoYWluCisgIChob3dldmVyLCB0aGlzIGZlYXR1cmUgaXMgbm90IHN1cHBvcnRlZCB5ZXQgYnkgdGhlIExpbnV4IDZwYWNrIGRyaXZlcikuCisKKy0gRWFjaCBwYWNrZXQgdHJhbnNmZXJyZWQgb3ZlciB0aGUgc2VyaWFsIGxpbmUgaXMgc3VwcGxpZWQgd2l0aCBhIGNoZWNrc3VtLAorICBzbyBpdCBpcyBlYXN5IHRvIGRldGVjdCBlcnJvcnMgZHVlIHRvIHByb2JsZW1zIG9uIHRoZSBzZXJpYWwgbGluZS4KKyAgUmVjZWl2ZWQgcGFja2V0cyB0aGF0IGFyZSBjb3JydXB0IGFyZSBub3QgcGFzc2VkIG9uIHRvIHRoZSBBWC4yNSBsYXllci4KKyAgRGFtYWdlZCBwYWNrZXRzIHRoYXQgdGhlIFROQyBoYXMgcmVjZWl2ZWQgZnJvbSB0aGUgUEMgYXJlIG5vdCB0cmFuc21pdHRlZC4KKworTW9yZSBkZXRhaWxzIGFib3V0IDZwYWNrIGFyZSBkZXNjcmliZWQgaW4gdGhlIGZpbGUgNnBhY2sucHMgdGhhdCBpcyBsb2NhdGVkCitpbiB0aGUgZG9jIGRpcmVjdG9yeSBvZiB0aGUgQVguMjUgdXRpbGl0aWVzIHBhY2thZ2UuCisKKzIuIFdobyBoYXMgZGV2ZWxvcGVkIHRoZSA2cGFjayBwcm90b2NvbD8KKworVGhlIDZwYWNrIHByb3RvY29sIGhhcyBiZWVuIGRldmVsb3BlZCBieSBFa2tpIFBsaWNodCBERjRPUiwgSGVubmluZyBSZWNoCitERjlJQyBhbmQgR3VudGVyIEpvc3QgREs3V0ouIEEgZHJpdmVyIGZvciA2cGFjaywgd3JpdHRlbiBieSBHdW50ZXIgSm9zdCBhbmQKK01hdHRoaWFzIFdlbHdhcnNreSBERzJGRUYsIGNvbWVzIGFsb25nIHdpdGggdGhlIFBDIHZlcnNpb24gb2YgRmxleE5ldC4KK1RoZXkgaGF2ZSBhbHNvIHdyaXR0ZW4gYSBmaXJtd2FyZSBmb3IgVE5DcyB0byBwZXJmb3JtIHRoZSA2cGFjaworcHJvdG9jb2wgKHNlZSBzZWN0aW9uIDQgYmVsb3cpLgorCiszLiBXaGVyZSBjYW4gSSBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIDZwYWNrIGZvciBMaW51WD8KKworQXQgdGhlIG1vbWVudCwgdGhlIDZwYWNrIHN0dWZmIGNhbiBvYnRhaW5lZCB2aWEgYW5vbnltb3VzIGZ0cCBmcm9tCitkYjBibS5hdXRvbWF0aW9uLmZoLWFhY2hlbi5kZS4gSW4gdGhlIGRpcmVjdG9yeSAvaW5jb21pbmcvZGcza3EsCit0aGVyZSBpcyBhIGZpbGUgbmFtZWQgNnBhY2sudGd6LgorCis0LiBQcmVwYXJpbmcgdGhlIFROQyBmb3IgNnBhY2sgb3BlcmF0aW9uCisKK1RvIGJlIGFibGUgdG8gdXNlIDZwYWNrLCBhIHNwZWNpYWwgZmlybXdhcmUgZm9yIHRoZSBUTkMgaXMgbmVlZGVkLiBUaGUgRVBST00KK29mIGEgbmV3bHkgYm91Z2h0IFROQyBkb2VzIG5vdCBjb250YWluIDZwYWNrLCBzbyB5b3Ugd2lsbCBoYXZlIHRvCitwcm9ncmFtIGFuIEVQUk9NIHlvdXJzZWxmLiBUaGUgaW1hZ2UgZmlsZSBmb3IgNnBhY2sgRVBST01zIHNob3VsZCBiZQorYXZhaWxhYmxlIG9uIGFueSBwYWNrZXQgcmFkaW8gYm94IHdoZXJlIFBDL0ZsZXhOZXQgY2FuIGJlIGZvdW5kLiBUaGUgbmFtZSBvZgordGhlIGZpbGUgaXMgNnBhY2suYmluLiBUaGlzIGZpbGUgaXMgY29weXJpZ2h0ZWQgYW5kIG1haW50YWluZWQgYnkgdGhlIEZsZXhOZXQKK3RlYW0uIEl0IGNhbiBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgbGljZW5zZSB0aGF0IGNvbWVzIGFsb25nCit3aXRoIFBDL0ZsZXhOZXQuIFBsZWFzZSBkbyBub3QgYXNrIG1lIGFib3V0IHRoZSBpbnRlcm5hbHMgb2YgdGhpcyBmaWxlIGFzIEkKK2Rvbid0IGtub3cgYW55dGhpbmcgYWJvdXQgaXQuIEkgdXNlZCBhIHRleHR1YWwgZGVzY3JpcHRpb24gb2YgdGhlIDZwYWNrCitwcm90b2NvbCB0byBwcm9ncmFtIHRoZSBMaW51eCBkcml2ZXIuCisKK1ROQ3MgY29udGFpbiBhIDY0a0J5dGUgRVBST00sIHRoZSBsb3dlciBoYWxmIG9mIHdoaWNoIGlzIHVzZWQgZm9yCit0aGUgZmlybXdhcmUvS0lTUy4gVGhlIHVwcGVyIGhhbGYgaXMgZWl0aGVyIGVtcHR5IG9yIGlzIHNvbWV0aW1lcworcHJvZ3JhbW1lZCB3aXRoIHNvZnR3YXJlIGNhbGxlZCBUQVBSLiBJbiB0aGUgbGF0dGVyIGNhc2UsIHRoZSBUTkMKK2lzIHN1cHBsaWVkIHdpdGggYSBESVAgc3dpdGNoIHNvIHlvdSBjYW4gZWFzaWx5IGNoYW5nZSBiZXR3ZWVuIHRoZQordHdvIHN5c3RlbXMuIFdoZW4gcHJvZ3JhbW1pbmcgYSBuZXcgRVBST00sIG9uZSBvZiB0aGUgc3lzdGVtcyBpcyByZXBsYWNlZAorYnkgNnBhY2suIEl0IGlzIHVzZWZ1bCB0byByZXBsYWNlIFRBUFIsIGFzIHRoaXMgc29mdHdhcmUgaXMgcmFyZWx5IHVzZWQKK25vd2FkYXlzLiBJZiB5b3VyIFROQyBpcyBub3QgZXF1aXBwZWQgd2l0aCB0aGUgc3dpdGNoIG1lbnRpb25lZCBhYm92ZSwgeW91CitjYW4gYnVpbGQgaW4gb25lIHlvdXJzZWxmIHRoYXQgc3dpdGNoZXMgb3ZlciB0aGUgaGlnaGVzdCBhZGRyZXNzIHBpbgorb2YgdGhlIEVQUk9NIGJldHdlZW4gSElHSCBhbmQgTE9XIGxldmVsLiBBZnRlciBoYXZpbmcgaW5zZXJ0ZWQgdGhlIG5ldyBFUFJPTQorYW5kIHN3aXRjaGVkIHRvIDZwYWNrLCBhcHBseSBwb3dlciB0byB0aGUgVE5DIGZvciBhIGZpcnN0IHRlc3QuIFRoZSBjb25uZWN0CithbmQgdGhlIHN0YXR1cyBMRUQgYXJlIGxpdCBmb3IgYWJvdXQgYSBzZWNvbmQgaWYgdGhlIGZpcm13YXJlIGluaXRpYWxpc2VzCit0aGUgVE5DIGNvcnJlY3RseS4KKworNS4gQnVpbGRpbmcgYW5kIGluc3RhbGxpbmcgdGhlIDZwYWNrIGRyaXZlcgorCitUaGUgZHJpdmVyIGhhcyBiZWVuIHRlc3RlZCB3aXRoIGtlcm5lbCB2ZXJzaW9uIDIuMS45MC4gVXNlIHdpdGggb2xkZXIKK2tlcm5lbHMgbWF5IGxlYWQgdG8gYSBjb21waWxhdGlvbiBlcnJvciBiZWNhdXNlIHRoZSBpbnRlcmZhY2UgdG8gYSBrZXJuZWwKK2Z1bmN0aW9uIGhhcyBiZWVuIGNoYW5nZWQgaW4gdGhlIDIuMS44eCBrZXJuZWxzLgorCitIb3cgdG8gdHVybiBvbiA2cGFjayBzdXBwb3J0OgorCistIEluIHRoZSBsaW51eCBrZXJuZWwgY29uZmlndXJhdGlvbiBwcm9ncmFtLCBzZWxlY3QgdGhlIGNvZGUgbWF0dXJpdHkgbGV2ZWwKKyAgb3B0aW9ucyBtZW51IGFuZCB0dXJuIG9uIHRoZSBwcm9tcHRpbmcgZm9yIGRldmVsb3BtZW50IGRyaXZlcnMuCisKKy0gU2VsZWN0IHRoZSBhbWF0ZXVyIHJhZGlvIHN1cHBvcnQgbWVudSBhbmQgdHVybiBvbiB0aGUgc2VyaWFsIHBvcnQgNnBhY2sKKyAgZHJpdmVyLgorCistIENvbXBpbGUgYW5kIGluc3RhbGwgdGhlIGtlcm5lbCBhbmQgdGhlIG1vZHVsZXMuCisKK1RvIHVzZSB0aGUgZHJpdmVyLCB0aGUga2lzc2F0dGFjaCBwcm9ncmFtIGRlbGl2ZXJlZCB3aXRoIHRoZSBBWC4yNSB1dGlsaXRpZXMKK2hhcyB0byBiZSBtb2RpZmllZC4KKworLSBEbyBhIGNkIHRvIHRoZSBkaXJlY3RvcnkgdGhhdCBob2xkcyB0aGUga2lzc2F0dGFjaCBzb3VyY2VzLiBFZGl0IHRoZQorICBraXNzYXR0YWNoLmMgZmlsZS4gQXQgdGhlIHRvcCwgaW5zZXJ0IHRoZSBmb2xsb3dpbmcgbGluZXM6CisKKyAgI2lmbmRlZiBOXzZQQUNLCisgICNkZWZpbmUgTl82UEFDSyAoTl9BWDI1KzEpCisgICNlbmRpZgorCisgIFRoZW4gZmluZCB0aGUgbGluZQorICAgCisgIGludCBkaXNjID0gTl9BWDI1OworCisgIGFuZCByZXBsYWNlIE5fQVgyNSBieSBOXzZQQUNLLgorCistIFJlY29tcGlsZSBraXNzYXR0YWNoLiBSZW5hbWUgaXQgdG8gc3BhdHRhY2ggdG8gYXZvaWQgY29uZnVzaW9ucy4KKworSW5zdGFsbGluZyB0aGUgZHJpdmVyOgorCistIERvIGFuIGluc21vZCA2cGFjay4gTG9vayBhdCB5b3VyIC92YXIvbG9nL21lc3NhZ2VzIGZpbGUgdG8gY2hlY2sgaWYgdGhlIAorICBtb2R1bGUgaGFzIHByaW50ZWQgaXRzIGluaXRpYWxpemF0aW9uIG1lc3NhZ2UuCisKKy0gRG8gYSBzcGF0dGFjaCBhcyB5b3Ugd291bGQgbGF1bmNoIGtpc3NhdHRhY2ggd2hlbiBzdGFydGluZyBhIEtJU1MgcG9ydC4KKyAgQ2hlY2sgaWYgdGhlIGtlcm5lbCBwcmludHMgdGhlIG1lc3NhZ2UgJzZwYWNrOiBUTkMgZm91bmQnLiAKKworLSBGcm9tIGhlcmUsIGV2ZXJ5dGhpbmcgc2hvdWxkIHdvcmsgYXMgaWYgeW91IHdlcmUgc2V0dGluZyB1cCBhIEtJU1MgcG9ydC4KKyAgVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB0aGF0IHRoZSBuZXR3b3JrIGRldmljZSB0aGF0IHJlcHJlc2VudHMKKyAgdGhlIDZwYWNrIHBvcnQgaXMgY2FsbGVkIHNwIGluc3RlYWQgb2Ygc2wgb3IgYXguIFNvLCBzcDAgd291bGQgYmUgdGhlCisgIGZpcnN0IDZwYWNrIHBvcnQuCisKK0FsdGhvdWdoIHRoZSBkcml2ZXIgaGFzIGJlZW4gdGVzdGVkIG9uIHZhcmlvdXMgcGxhdGZvcm1zLCBJIHN0aWxsIGRlY2xhcmUgaXQKK0FMUEhBLiBCRSBDQVJFRlVMISBTeW5jIHlvdXIgZGlza3MgYmVmb3JlIGluc21vZGluZyB0aGUgNnBhY2sgbW9kdWxlCithbmQgc3BhdHRhY2hpbmcuIFdhdGNoIG91dCBpZiB5b3VyIGNvbXB1dGVyIGJlaGF2ZXMgc3RyYW5nZWx5LiBSZWFkIHNlY3Rpb24KKzYgb2YgdGhpcyBmaWxlIGFib3V0IGtub3duIHByb2JsZW1zLgorCitOb3RlIHRoYXQgdGhlIGNvbm5lY3QgYW5kIHN0YXR1cyBMRURzIG9mIHRoZSBUTkMgYXJlIGNvbnRyb2xsZWQgaW4gYQorZGlmZmVyZW50IHdheSB0aGFuIHRoZXkgYXJlIHdoZW4gdGhlIFROQyBpcyB1c2VkIHdpdGggUEMvRmxleE5ldC4gV2hlbiB1c2luZworRmxleE5ldCwgdGhlIGNvbm5lY3QgTEVEIGlzIG9uIGlmIHRoZXJlIGlzIGEgY29ubmVjdGlvbjsgdGhlIHN0YXR1cyBMRUQgaXMKK29uIGlmIHRoZXJlIGlzIGRhdGEgaW4gdGhlIGJ1ZmZlciBvZiB0aGUgUEMncyBBWC4yNSBlbmdpbmUgdGhhdCBoYXMgdG8gYmUKK3RyYW5zbWl0dGVkLiBVbmRlciBMaW51eCwgdGhlIDZwYWNrIGxheWVyIGlzIGJleW9uZCB0aGUgQVguMjUgbGF5ZXIsCitzbyB0aGUgNnBhY2sgZHJpdmVyIGRvZXNuJ3Qga25vdyBhbnl0aGluZyBhYm91dCBjb25uZWN0cyBvciBkYXRhIHRoYXQKK2hhcyBub3QgeWV0IGJlZW4gdHJhbnNtaXR0ZWQuIFRoZXJlZm9yZSB0aGUgTEVEcyBhcmUgY29udHJvbGxlZAorYXMgdGhleSBhcmUgaW4gS0lTUyBtb2RlOiBUaGUgY29ubmVjdCBMRUQgaXMgdHVybmVkIG9uIGlmIGRhdGEgaXMgdHJhbnNmZXJyZWQKK2Zyb20gdGhlIFBDIHRvIHRoZSBUTkMgb3ZlciB0aGUgc2VyaWFsIGxpbmUsIHRoZSBzdGF0dXMgTEVEIGlmIGRhdGEgaXMKK3NlbnQgdG8gdGhlIFBDLgorCis2LiBLbm93biBwcm9ibGVtcworCitXaGVuIHRlc3RpbmcgdGhlIGRyaXZlciB3aXRoIDIuMC4zeCBrZXJuZWxzIGFuZAorb3BlcmF0aW5nIHdpdGggZGF0YSByYXRlcyBvbiB0aGUgcmFkaW8gY2hhbm5lbCBvZiA5NjAwIEJhdWQgb3IgaGlnaGVyLAordGhlIGRyaXZlciBtYXksIG9uIGNlcnRhaW4gc3lzdGVtcywgc29tZXRpbWVzIHByaW50IHRoZSBtZXNzYWdlICc2cGFjazoKK2JhZCBjaGVja3N1bScsIHdoaWNoIGlzIGR1ZSB0byBkYXRhIGxvc3MgaWYgdGhlIG90aGVyIHN0YXRpb24gc2VuZHMgdHdvCitvciBtb3JlIHN1YnNlcXVlbnQgcGFja2V0cy4gSSBoYXZlIGJlZW4gdG9sZCB0aGF0IHRoaXMgaXMgZHVlIHRvIGEgcHJvYmxlbQord2l0aCB0aGUgc2VyaWFsIGRyaXZlciBvZiAyLjAuM3gga2VybmVscy4gSSBkb24ndCBrbm93IHlldCBpZiB0aGUgcHJvYmxlbQorc3RpbGwgZXhpc3RzIHdpdGggMi4xLngga2VybmVscywgYXMgSSBoYXZlIGhlYXJkIHRoYXQgdGhlIHNlcmlhbCBkcml2ZXIKK2NvZGUgaGFzIGJlZW4gY2hhbmdlZCB3aXRoIDIuMS54LgorCitXaGVuIHNodXR0aW5nIGRvd24gdGhlIHNwIGludGVyZmFjZSB3aXRoIGlmY29uZmlnLCB0aGUga2VybmVsIGNyYXNoZXMgaWYKK3RoZXJlIGlzIHN0aWxsIGFuIEFYLjI1IGNvbm5lY3Rpb24gbGVmdCBvdmVyIHdoaWNoIGFuIElQIGNvbm5lY3Rpb24gd2FzCitydW5uaW5nLCBldmVuIGlmIHRoYXQgSVAgY29ubmVjdGlvbiBpcyBhbHJlYWR5IGNsb3NlZC4gVGhlIHByb2JsZW0gZG9lcyBub3QKK29jY3VyIHdoZW4gdGhlcmUgaXMgYSBiYXJlIEFYLjI1IGNvbm5lY3Rpb24gc3RpbGwgcnVubmluZy4gSSBkb24ndCBrbm93IGlmCit0aGlzIGlzIGEgcHJvYmxlbSBvZiB0aGUgNnBhY2sgZHJpdmVyIG9yIHNvbWV0aGluZyBlbHNlIGluIHRoZSBrZXJuZWwuCisKK1RoZSBkcml2ZXIgaGFzIGJlZW4gdGVzdGVkIGFzIGEgbW9kdWxlLCBub3QgeWV0IGFzIGEga2VybmVsLWJ1aWx0aW4gZHJpdmVyLgorCitUaGUgNnBhY2sgcHJvdG9jb2wgc3VwcG9ydHMgZGFpc3ktY2hhaW5pbmcgb2YgVE5DcyBpbiBhIHRva2VuIHJpbmcsIHdoaWNoIGlzCitjb25uZWN0ZWQgdG8gb25lIHNlcmlhbCBwb3J0IG9mIHRoZSBQQy4gVGhpcyBmZWF0dXJlIGlzIG5vdCBpbXBsZW1lbnRlZAorYW5kIGF0IGxlYXN0IGF0IHRoZSBtb21lbnQgSSB3b24ndCBiZSBhYmxlIHRvIGRvIGl0IGJlY2F1c2UgSSBkbyBub3QgaGF2ZQordGhlIG9wcG9ydHVuaXR5IHRvIGJ1aWxkIGEgVE5DIGRhaXN5LWNoYWluIGFuZCB0ZXN0IGl0LgorCitTb21lIG9mIHRoZSBjb21tZW50cyBpbiB0aGUgc291cmNlIGNvZGUgYXJlIGluYWNjdXJhdGUuIFRoZXkgYXJlIGxlZnQgZnJvbQordGhlIFNMSVAvS0lTUyBkcml2ZXIsIGZyb20gd2hpY2ggdGhlIDZwYWNrIGRyaXZlciBoYXMgYmVlbiBkZXJpdmVkLgorSSBoYXZlbid0IG1vZGlmaWVkIG9yIHJlbW92ZWQgdGhlbSB5ZXQgLS0gc29ycnkhIFRoZSBjb2RlIGl0c2VsZiBuZWVkcworc29tZSBjbGVhbmluZyBhbmQgb3B0aW1pemluZy4gVGhpcyB3aWxsIGJlIGRvbmUgaW4gYSBsYXRlciByZWxlYXNlLgorCitJZiB5b3UgZW5jb3VudGVyIGEgYnVnIG9yIGlmIHlvdSBoYXZlIGEgcXVlc3Rpb24gb3Igc3VnZ2VzdGlvbiBjb25jZXJuaW5nIHRoZQorZHJpdmVyLCBmZWVsIGZyZWUgdG8gbWFpbCBtZSwgdXNpbmcgdGhlIGFkZHJlc3NlcyBnaXZlbiBhdCB0aGUgYmVnaW5uaW5nIG9mCit0aGlzIGZpbGUuCisKK0hhdmUgZnVuIQorCitBbmRyZWFzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvQ29uZmlndXJhYmxlIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL0NvbmZpZ3VyYWJsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWMwZGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL0NvbmZpZ3VyYWJsZQpAQCAtMCwwICsxLDM0IEBACisKK1RoZXJlIGFyZSBhIGZldyBuZXR3b3JrIHBhcmFtZXRlcnMgdGhhdCBjYW4gYmUgdHVuZWQgdG8gYmV0dGVyIG1hdGNoCit0aGUga2VybmVsIHRvIHlvdXIgc3lzdGVtIGhhcmR3YXJlIGFuZCBpbnRlbmRlZCB1c2FnZS4gVGhlIGRlZmF1bHRzCithcmUgdXN1YWxseSBhIGdvb2QgY2hvaWNlIGZvciA5OSUgb2YgdGhlIHBlb3BsZSA5OSUgb2YgdGhlIHRpbWUsIGJ1dAoreW91IHNob3VsZCBiZSBhd2FyZSB0aGV5IGRvIGV4aXN0IGFuZCBjYW4gYmUgY2hhbmdlZC4KKworVGhlIGN1cnJlbnQgbGlzdCBvZiBwYXJhbWV0ZXJzIGNhbiBiZSBmb3VuZCBpbiB0aGUgZmlsZXM6CisKKwlsaW51eC9uZXQvVFVOQUJMRQorCURvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CisKK1NvbWUgb2YgdGhlc2UgYXJlIGFjY2Vzc2libGUgdmlhIHRoZSBzeXNjdGwgaW50ZXJmYWNlLCBhbmQgbWFueSBtb3JlIGFyZQorc2NoZWR1bGVkIHRvIGJlIGFkZGVkIGluIHRoaXMgd2F5LiBGb3IgZXhhbXBsZSwgc29tZSBwYXJhbWV0ZXJzIHJlbGF0ZWQgCit0byBBZGRyZXNzIFJlc29sdXRpb24gUHJvdG9jb2wgKEFSUCkgYXJlIHZlcnkgZWFzaWx5IHZpZXdlZCBhbmQgYWx0ZXJlZC4KKworCSMgY2F0IC9wcm9jL3N5cy9uZXQvaXB2NC9hcnBfdGltZW91dAorCTYwMDAKKwkjIGVjaG8gNzAwMCA+IC9wcm9jL3N5cy9uZXQvaXB2NC9hcnBfdGltZW91dAorCSMgY2F0IC9wcm9jL3N5cy9uZXQvaXB2NC9hcnBfdGltZW91dAorCTcwMDAKKworT3RoZXJzIGFyZSBhbHJlYWR5IGFjY2Vzc2libGUgdmlhIHRoZSByZWxhdGVkIHVzZXIgc3BhY2UgcHJvZ3JhbXMuCitGb3IgZXhhbXBsZSwgTUFYX1dJTkRPVyBoYXMgYSBkZWZhdWx0IG9mIDMyIGsgd2hpY2ggaXMgYSBnb29kIGNob2ljZSBmb3IKK21vZGVybiBoYXJkd2FyZSwgYnV0IGlmIHlvdSBoYXZlIGEgc2xvdyAoOCBiaXQpIEV0aGVybmV0IGNhcmQgYW5kL29yIGEgc2xvdworbWFjaGluZSwgdGhlbiB0aGlzIHdpbGwgYmUgZmFyIHRvbyBiaWcgZm9yIHRoZSBjYXJkIHRvIGtlZXAgdXAgd2l0aCBmYXN0IAorbWFjaGluZXMgdHJhbnNtaXR0aW5nIG9uIHRoZSBzYW1lIG5ldCwgcmVzdWx0aW5nIGluIG92ZXJydW5zIGFuZCByZWNlaXZlIGVycm9ycy4KK0EgdmFsdWUgb2YgYWJvdXQgNCBrIHdvdWxkIGJlIG1vcmUgYXBwcm9wcmlhdGUsIHdoaWNoIGNhbiBiZSBzZXQgdmlhOgorCisJIyByb3V0ZSBhZGQgLW5ldCAxOTIuMTY4LjMuMCB3aW5kb3cgNDA5NgorCitUaGUgcmVtYWluZGVyIG9mIHRoZXNlIGNhbiBvbmx5IGJlIHByZXNlbnRseSBjaGFuZ2VkIGJ5IGFsdGVyaW5nIGEgI2RlZmluZQoraW4gdGhlIHJlbGF0ZWQgaGVhZGVyIGZpbGUuIFRoaXMgbWVhbnMgYW4gZWRpdCBhbmQgcmVjb21waWxlIGN5Y2xlLgorCisJCQkJCQlQYXVsIEdvcnRtYWtlciAwNi85NgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL0RMSU5LLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ETElOSy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgzZDI0NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ETElOSy50eHQKQEAgLTAsMCArMSwyMDQgQEAKK1JlbGVhc2VkIDE5OTQtMDYtMTMKKworCisJQ09OVEVOVFM6CisKKwkxLiBJbnRyb2R1Y3Rpb24uCisJMi4gTGljZW5zZS4KKwkzLiBGaWxlcyBpbiB0aGlzIHJlbGVhc2UuCisJNC4gSW5zdGFsbGF0aW9uLgorCTUuIFByb2JsZW1zIGFuZCB0dW5pbmcuCisJNi4gVXNpbmcgdGhlIGRyaXZlcnMgd2l0aCBlYXJsaWVyIHJlbGVhc2VzLgorCTcuIEFja25vd2xlZGdtZW50cy4KKworCisJMS4gSU5UUk9EVUNUSU9OLgorCisJVGhpcyBpcyBhIHNldCBvZiBFdGhlcm5ldCBkcml2ZXJzIGZvciB0aGUgRC1MaW5rIERFLTYwMC9ERS02MjAKKwlwb2NrZXQgYWRhcHRlcnMsIGZvciB0aGUgcGFyYWxsZWwgcG9ydCBvbiBhIExpbnV4IGJhc2VkIG1hY2hpbmUuCisJU29tZSBhZGFwdGVyICJjbG9uZXMiIHdpbGwgYWxzbyB3b3JrLiAgWGlyY29tIGlzIF9ub3RfIGEgY2xvbmUuLi4KKwlUaGVzZSBkcml2ZXJzIF9jYW5fIGJlIHVzZWQgYXMgbG9hZGFibGUgbW9kdWxlcywKKwlhbmQgd2VyZSBkZXZlbG9wZWQgZm9yIHVzZSBvbiBMaW51eCAxLjEuMTMgYW5kIGFib3ZlLgorCUZvciB1c2Ugb24gTGludXggMS4wLlgsIG9yIGVhcmxpZXIgcmVsZWFzZXMsIHNlZSBiZWxvdy4KKworCUkgaGF2ZSB1c2VkIHRoZXNlIGRyaXZlcnMgZm9yIE5GUywgZnRwLCB0ZWxuZXQgYW5kIFgtY2xpZW50cyBvbgorCXJlbW90ZSBtYWNoaW5lcy4gVHJhbnNtaXNzaW9ucyB3aXRoIGZ0cCBzZWVtcyB0byB3b3JrIGFzCisJZ29vZCBhcyBjYW4gYmUgZXhwZWN0ZWQgKGkuZS4gPiA4MGsgYnl0ZXMvc2VjKSBmcm9tIGEKKwlwYXJhbGxlbCBwb3J0Li4uOi0pICBSZWNlaXZlIHNwZWVkcyB3aWxsIGJlIGFib3V0IDYwLTgwJSBvZiB0aGlzLgorCURlcGVuZGluZyBvbiB5b3VyIG1hY2hpbmUsIHNvbWV3aGF0IGhpZ2hlciBzcGVlZHMgY2FuIGJlIGFjaGlldmVkLgorCisJQWxsIGNvbW1lbnRzL2ZpeGVzIHRvIEJqb3JuIEVrd2FsbCAoYmowcm5AYmxveC5zZSkuCisKKworCTIuIExJQ0VOU0UuCisKKwlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQKKwlhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisJTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisJdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisJVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQorCXVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKKwl3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisJUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQorCWRldGFpbHMuCisKKwlZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKwlMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisJU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BCisJMDIxMzksIFVTQS4KKworCisJMy4gRklMRVMgSU4gVEhJUyBSRUxFQVNFLgorCisJUkVBRE1FLkRMSU5LICBUaGlzIGZpbGUuCisJZGU2MDAuYyAgICAgICBUaGUgU291cmNlIChtYXkgaXQgYmUgd2l0aCBZb3UgOi0pIGZvciB0aGUgREUtNjAwCisJZGU2MjAuYyAgICAgICBkaXR0byBmb3IgdGhlIERFLTYyMAorCWRlNjIwLmggICAgICAgTWFjcm9zIGZvciBkZTYyMC5jCisKKwlJZiB5b3UgYXJlIHVwZ3JhZGluZyBmcm9tIHRoZSBkLWxpbmsgdGFyIHJlbGVhc2UsIHRoZXJlIHdpbGwKKwlhbHNvIGJlIGEgImRsaW5rLXBhdGNoZXMiIGZpbGUgdGhhdCB3aWxsIHBhdGNoIExpbnV4IDEuMS4xODoKKwkJbGludXgvZHJpdmVycy9uZXQvTWFrZWZpbGUKKwkJbGludXgvZHJpdmVycy9uZXQvQ09ORklHCisJCWxpbnV4L2RyaXZlcnMvbmV0L01PRFVMRVMKKwkJbGludXgvZHJpdmVycy9uZXQvU3BhY2UuYworCQlsaW51eC9jb25maWcuaW4KKwlBcHBseSB0aGUgcGF0Y2ggYnk6CisJImNkIC91c3Ivc3JjOyBwYXRjaCAtcDAgPCBsaW51eC9kcml2ZXJzL25ldC9kbGluay1wYXRjaGVzIgorCVRoZSBvbGQgc291cmNlLCAibGludXgvZHJpdmVycy9uZXQvZF9saW5rLmMiLCBjYW4gYmUgcmVtb3ZlZC4KKworCisJNC4gSU5TVEFMTEFUSU9OLgorCisJbyBHZXQgdGhlIGxhdGVzdCBuZXQgYmluYXJpZXMsIGFjY29yZGluZyB0byBjdXJyZW50IG5ldC53aXNkb20uCisKKwlvIFJlYWQgdGhlIE5FVC0yIGFuZCBFdGhlcm5ldCBIT1dUT3MgYW5kIG1vZGlmeSB5b3VyIHNldHVwLgorCisJbyBJZiB5b3VyIHBhcmFsbGVsIHBvcnQgaGFzIGEgc3RyYW5nZSBhZGRyZXNzIG9yIGlycSwKKwkgIG1vZGlmeSAibGludXgvZHJpdmVycy9uZXQvQ09ORklHIiBhY2NvcmRpbmdseSwgb3IgYWRqdXN0CisJICB0aGUgcGFyYW1ldGVycyBpbiB0aGUgInR1bmluZyIgc2VjdGlvbiBpbiB0aGUgc291cmNlcy4KKworCUlmIHlvdSBhcmUgZ29pbmcgdG8gdXNlIHRoZSBkcml2ZXJzIGFzIGxvYWRhYmxlIG1vZHVsZXMsIGRvIF9ub3RfCisJZW5hYmxlIHRoZW0gd2hpbGUgZG9pbmcgIm1ha2UgY29uZmlnIiwgYnV0IGluc3RlYWQgbWFrZSBzdXJlIHRoYXQKKwl0aGUgZHJpdmVycyBhcmUgaW5jbHVkZWQgaW4gImxpbnV4L2RyaXZlcnMvbmV0L01PRFVMRVMiLgorCisJSWYgeW91IGFyZSBfbm90XyBnb2luZyB0byB1c2UgdGhlIGRyaXZlcihzKSBhcyBsb2FkYWJsZSBtb2R1bGVzLAorCWJ1dCBpbnN0ZWFkIGhhdmUgdGhlbSBpbmNsdWRlZCBpbiB0aGUga2VybmVsLCByZW1lbWJlciB0byBlbmFibGUKKwl0aGUgZHJpdmVycyB3aGlsZSBkb2luZyAibWFrZSBjb25maWciLgorCisJbyBUbyBpbmNsdWRlIG5ldHdvcmtpbmcgYW5kIERFNjAwL0RFNjIwIHN1cHBvcnQgaW4geW91ciBrZXJuZWw6CisJICAjIGNkIC9saW51eAorCSAgKGFzIG1vZHVsZXM6KQorCSAgIyAgbWFrZSBjb25maWcgKGFuc3dlciB5ZXMgb24gQ09ORklHX05FVCBhbmQgQ09ORklHX0lORVQpCisJICAoZWxzZSBpbmNsdWRlZCBpbiB0aGUga2VybmVsOikKKwkgICMgIG1ha2UgY29uZmlnIChhbnN3ZXIgeWVzIG9uIENPTkZJRyBfTkVULCBfSU5FVCBhbmQgX0RFNjAwIG9yIF9ERTYyMCkKKwkgICMgbWFrZSBjbGVhbgorCSAgIyBtYWtlIHpJbWFnZSAob3Igd2hhdGV2ZXIgbWFnaWMgeW91IHVzdWFsbHkgZG8pCisKKwlvIEkgdXNlIGxpbG8gdG8gYm9vdCBtdWx0aXBsZSBrZXJuZWxzLCBzbyB0aGF0IEkgYXQgbGVhc3QKKwkgIGNhbiBoYXZlIG9uZSB3b3JraW5nIGtlcm5lbCA6LSkuIElmIHlvdSBkbyB0b28sIGFwcGVuZAorCSAgdGhlc2UgbGluZXMgdG8gL2V0Yy9saWxvL2NvbmZpZzoKKworCQlpbWFnZSA9IC9saW51eC96SW1hZ2UKKwkJbGFiZWwgPSBuZXdsaW51eAorCQlyb290ID0gL2Rldi9oZGEyIChvciB3aGF0ZXZlciBZT1UgaGF2ZS4uLikKKworCSAgIyAvZXRjL2xpbG8vaW5zdGFsbAorCisJbyBEbyAic3luYyIgYW5kIHJlYm9vdCB0aGUgbmV3IGtlcm5lbCB3aXRoIGEgRC1MaW5rCisJICBERS02MDAvREUtNjIwIHBvY2tldCBhZGFwdGVyIGNvbm5lY3RlZC4KKworCW8gVGhlIGFkYXB0ZXIgY2FuIGJlIGNvbmZpZ3VyZWQgd2l0aCBpZmNvbmZpZyBldGg/CisJICB3aGVyZSB0aGUgYWN0dWFsIG51bWJlciBpcyBkZWNpZGVkIGJ5IHRoZSBrZXJuZWwKKwkgIHdoZW4gdGhlIGRyaXZlcnMgYXJlIGluaXRpYWxpemVkLgorCisKKwk1LiAiUFJPQkxFTVMiIEFORCBUVU5JTkcsCisKKwlvIElmIHlvdSBzZWUgZXJyb3IgbWVzc2FnZXMgZnJvbSB0aGUgZHJpdmVyLCBhbmQgaWYgdGhlIHRyYWZmaWMKKwkgIHN0b3BzIG9uIHRoZSBhZGFwdGVyLCB0cnkgdG8gZG8gImlmY29uZmlnIiBhbmQgInJvdXRlIiBvbmNlCisJICBtb3JlLCBqdXN0IGFzIGluICJyYy5pbmV0MSIuICBUaGlzIHNob3VsZCB0YWtlIGNhcmUgb2YgbW9zdAorCSAgcHJvYmxlbXMsIGluY2x1ZGluZyBlZmZlY3RzIGZyb20gcG93ZXIgbG9zcywgb3IgYWRhcHRlcnMgdGhhdAorCSAgYXJlbid0IGNvbm5lY3RlZCB0byB0aGUgcHJpbnRlciBwb3J0IGluIHNvbWUgd2F5IG9yIGFub3RoZXIuCisJICBZb3UgY2FuIHNvbWV3aGF0IGNoYW5nZSB0aGUgYmVoYXZpb3VyIGJ5IGVuYWJsaW5nL2Rpc2FibGluZworCSAgdGhlIG1hY3JvICBTSFVURE9XTl9XSEVOX0xPU1QgIGluIHRoZSAidHVuaW5nIiBzZWN0aW9uLgorCSAgRm9yIHRoZSBERS02MDAgdGhlcmUgaXMgYW5vdGhlciBtYWNybywgQ0hFQ0tfTE9TVF9ERTYwMCwKKwkgIHRoYXQgeW91IG1pZ2h0IHdhbnQgdG8gcmVhZCBhYm91dCBpbiB0aGUgInR1bmluZyIgc2VjdGlvbi4KKworCW8gU29tZSBtYWNoaW5lcyBoYXZlIHRyb3VibGUgaGFuZGxpbmcgdGhlIHBhcmFsbGVsIHBvcnQgYW5kCisJICB0aGUgYWRhcHRlciBhdCBoaWdoIHNwZWVkLiBJZiB5b3UgZXhwZXJpZW5jZSBwcm9ibGVtczoKKworCSAgREUtNjAwOgorCSAgLSBUaGUgYWRhcHRlciBpcyBub3QgcmVjb2duaXplZCBhdCBib290LCBpLmUuIGFuIEV0aGVybmV0CisJICAgIGFkZHJlc3Mgb2YgMDA6ODA6Yzg6Li4uIGlzIG5vdCBzaG93biwgdHJ5IHRvIGFkZCBhbm90aGVyCisJICAgICAgIjsgU0xPV19ET1dOX0lPIgorCSAgICBhdCBERTYwMF9TTE9XX0RPV04gaW4gdGhlICJ0dW5pbmciIHNlY3Rpb24uIEFzIGEgbGFzdCByZXNvcnQsCisJICAgIHVuY29tbWVudDogIiNkZWZpbmUgUkVBTExZX1NMT1dfSU8iIChzZWUgPGFzbS9pby5oPiBmb3IgaGludHMpLgorCisJICAtIFlvdSBleHBlcmllbmNlICJ0aW1lb3V0IiBtZXNzYWdlczogZmlyc3QgdHJ5IHRvIGFkZCBhbm90aGVyCisJICAgICAgIjsgU0xPV19ET1dOX0lPIgorCSAgICBhdCBERTYwMF9TTE9XX0RPV04gaW4gdGhlICJ0dW5pbmciIHNlY3Rpb24sIF90aGVuXyB0cnkgdG8KKwkgICAgaW5jcmVhc2UgdGhlIHZhbHVlIChvcmlnaW5hbCB2YWx1ZTogNSkgYXQKKwkgICAgImlmICh0aWNrc3NvZmFyIDwgNSkiIG5lYXIgbGluZSA0MjIuCisKKwkgIERFLTYyMDoKKwkgIC0gWW91ciBwYXJhbGxlbCBwb3J0IG1pZ2h0IGJlICJzbHVnZ2lzaCIuICBUbyBjYXRlciBmb3IKKwkgICAgdGhpcywgdGhlcmUgYXJlIHRoZSBtYWNyb3MgTE9XU1BFRUQgYW5kIFJFQURfREVMQVkvV1JJVEVfREVMQVkKKwkgICAgaW4gdGhlICJ0dW5pbmciIHNlY3Rpb24uIFlvdXIgZmlyc3Qgc3RlcCBzaG91bGQgYmUgdG8gZW5hYmxlCisJICAgIExPV1NQRUVELCBhbmQgYWZ0ZXIgdGhhdCB5b3UgY2FuICJ0dW5lIiB0aGUgWFhYX0RFTEFZIHZhbHVlcy4KKworCW8gSWYgdGhlIGFkYXB0ZXIgX2lzXyByZWNvZ25pemVkIGF0IGJvb3QgYnV0IHlvdSBnZXQgbWVzc2FnZXMKKwkgIGFib3V0ICJOZXR3b3JrIFVucmVhY2hhYmxlIiwgdGhlbiB0aGUgcHJvYmxlbSBpcyBwcm9iYWJseQorCSAgX25vdF8gd2l0aCB0aGUgZHJpdmVyLiAgQ2hlY2sgeW91ciBuZXQgY29uZmlndXJhdGlvbiBpbnN0ZWFkCisJICAoaWZjb25maWcgYW5kIHJvdXRlKSBpbiAicmMuaW5ldDEiLgorCisJbyBUaGVyZSBpcyBzb21lIHJ1ZGltZW50YXJ5IHN1cHBvcnQgZm9yIGRlYnVnZ2luZywgbG9vayBhdAorCSAgdGhlIHNvdXJjZS4gVXNlICItRERFNjAwX0RFQlVHPTMiIG9yICItRERFNjIwX0RFQlVHPTMiCisJICB3aGVuIGNvbXBpbGluZywgb3IgaW5jbHVkZSBpdCBpbiAibGludXgvZHJpdmVycy9uZXQvQ09ORklHIi4KKwkgIElGIFlPVSBIQVZFIFBST0JMRU1TIFlPVSBDQU4nVCBTT0xWRTogUExFQVNFIENPTVBJTEUgVEhFIERSSVZFUgorCSAgV0lUSCBERUJVR0dJTkcgRU5BQkxFRCwgQU5EIFNFTkQgTUUgVEhFIFJFU1VMVElORyBPVVRQVVQhCisKKworCTYuIFVTSU5HIFRIRSBEUklWRVJTIFdJVEggRUFSTElFUiBSRUxFQVNFUy4KKworCVRoZSBsYXRlciAxLjEuWCByZWxlYXNlcyBvZiB0aGUgTGludXgga2VybmVsIGluY2x1ZGUgc29tZQorCWNoYW5nZXMgaW4gdGhlIG5ldHdvcmtpbmcgbGF5ZXIgKGEuay5hLiBORVQzKS4gVGhpcyBhZmZlY3RzCisJdGhlc2UgZHJpdmVycyBpbiBhIGZldyBwbGFjZXMuICBUaGUgaGludHMgdGhhdCBmb2xsb3cgYXJlCisJX25vdF8gdGVzdGVkIGJ5IG1lLCBzaW5jZSBJIGRvbid0IGhhdmUgdGhlIGRpc2sgc3BhY2UgdG8ga2VlcAorCWFsbCByZWxlYXNlcyBvbi1saW5lLgorCUtub3duIG5lZWRlZCBjaGFuZ2VzIHRvIGRhdGU6CisJLSByZWxlYXNlIHBhdGNoZmlsZTogc29tZSBwYXRjaGVzIHdpbGwgZmFpbCwgYnV0IHRoZXkgc2hvdWxkCisJICBiZSBlYXN5IHRvIGFwcGx5ICJieSBoYW5kIiwgc2luY2UgdGhleSBhcmUgdHJpdmlhbC4KKwkgIChTcGFjZS5jOiBkX2xpbmtfaW5pdCgpIGlzIG5vdyBjYWxsZWQgZGU2MDBfcHJvYmUoKSkKKwktIGRlNjAwLmM6IGNoYW5nZSAgIm1hcmtfYmgoTkVUX0JIKSIgdG8gICJtYXJrX2JoKElORVRfQkgpIi4KKwktIGRlNjIwLmM6IChtYXliZSkgY2hhbmdlIHRoZSBjb2RlIGFyb3VuZCAibmV0aWZfcngoc2tiKTsiIHRvIGJlCisJCSAgIHNpbWlsYXIgdG8gdGhlIGNvZGUgYXJvdW5kICJkZXZfcmludCguLi4pIiBpbiBkZTYwMC5jCisKKworCTcuIEFDS05PV0xFREdNRU5UUy4KKworCVRoZXNlIGRyaXZlcnMgd291bGRuJ3QgaGF2ZSBiZWVuIGRvbmUgd2l0aG91dCB0aGUgYmFzZQorCShhbmQgc3VwcG9ydCkgZnJvbSBSb3NzIEJpcm8gPGJpcjdAbGVsYW5kLnN0YW5mb3JkLmVkdT4sCisJYW5kIEQtTGluayBTeXN0ZW1zIEluYy4gIFRoZSBkcml2ZXIgcmVsaWVzIHVwb24gR1BMLWVkCisJc291cmNlIGZyb20gRC1MaW5rIFN5c3RlbXMgSW5jLiBhbmQgZnJvbSBSdXNzZWwgTmVsc29uIGF0CisJQ3J5bndyIFNvZnR3YXJlIDxuZWxzb25AY3J5bndyLmNvbT4uCisKKwlBZGRpdGlvbmFsIGlucHV0IGFsc28gZnJvbToKKwlEb25hbGQgQmVja2VyIDxiZWNrZXJAc3VwZXIub3JnPiwgQWxhbiBDb3ggPEEuQ294QHN3YW5zZWEuYWMudWs+CisJYW5kIEZyZWQgTi4gdmFuIEtlbXBlbiA8d2FsdGplQHVXYWx0Lk5MLk11Z25ldC5PUkc+CisKKwlERS02MDAgYWxwaGEgcmVsZWFzZSBwcmltYXJ5IHZpY3RpbV5IXkheSF5IXkheSHRlc3RlcjoKKwktIEVyaWsgUHJvcGVyIDxlcmlrcEBjcy5rdW4ubmw+LgorCUdvb2QgaW5wdXQgYWxzbyBmcm9tIHNldmVyYWwgdXNlcnMsIG1vc3Qgbm90YWJseQorCS0gTWFyayBCdXJ0b24gPG1hcmtiQG9yZGVybi5kZW1vbi5jby51az4uCisKKwlERS02MjAgYWxwaGEgcmVsZWFzZSB2aWN0aW1zXkheSF5IXkheSF5IXkh0ZXN0ZXJzOgorCS0gSi4gSm9zaHVhIEtvcHBlciA8a29wcGVyQHJ0c2cubW90LmNvbT4KKwktIE9sYXYgS3ZpdHRlbSA8T2xhdi5Ldml0dGVtQHVuaW5ldHQubm8+CisJLSBHZXJtYW5vIENhcm9ubmkgPGNhcm9ubmlAbmVzc2llLmNzLmlkLmV0aHouY2g+CisJLSBKZXJlbXkgRml0emhhcmRpbmdlIDxqZXJlbXlAc3VpdGUuc3cub3ouYXU+CisKKworCUhhcHB5IGhhY2tpbmchCisKKwlCam9ybiBFa3dhbGwgPT0gYmowcm5AYmxveC5zZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL05BUElfSE9XVE8udHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL05BUElfSE9XVE8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0Mzc2ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvTkFQSV9IT1dUTy50eHQKQEAgLTAsMCArMSw3NjYgQEAKK0hJU1RPUlk6CitGZWJydWFyeSAxNi8yMDAyIC0tIHJldmlzaW9uIDAuMi4xOgorQ09SIHR5cG8gY29ycmVjdGVkCitGZWJydWFyeSAxMC8yMDAyIC0tIHJldmlzaW9uIDAuMjoKK3NvbWUgc3BlbGwgY2hlY2tpbmcgOy0+CitKYW51YXJ5IDEyLzIwMDIgLS0gcmV2aXNpb24gMC4xCitUaGlzIGlzIHN0aWxsIHdvcmsgaW4gcHJvZ3Jlc3Mgc28gbWF5IGNoYW5nZS4KK1RvIGtlZXAgdXAgdG8gZGF0ZSBwbGVhc2Ugd2F0Y2ggdGhpcyBzcGFjZS4KKworSW50cm9kdWN0aW9uIHRvIE5BUEkKKz09PT09PT09PT09PT09PT09PT09CisKK05BUEkgaXMgYSBwcm92ZW4gKHd3dy5jeWJlcnVzLmNhL35oYWRpL3VzZW5peC1wYXBlci50Z3opIHRlY2huaXF1ZQordG8gaW1wcm92ZSBuZXR3b3JrIHBlcmZvcm1hbmNlIG9uIExpbnV4LiBGb3IgbW9yZSBkZXRhaWxzIHBsZWFzZQorcmVhZCB0aGF0IHBhcGVyLgorTkFQSSBwcm92aWRlcyBhICJpbmhlcmVudCBtaXRpZ2F0aW9uIiB3aGljaCBpcyBib3VuZCBieSBzeXN0ZW0gY2FwYWNpdHkKK2FzIGNhbiBiZSBzZWVuIGZyb20gdGhlIGZvbGxvd2luZyBkYXRhIGNvbGxlY3RlZCBieSBSb2JlcnQgb24gR2lnYWJpdCAKK2V0aGVybmV0IChlMTAwMCk6CisKKyBQc2l6ZSAgICBJcHBzICAgICAgIFRwdXQgICAgIFJ4aW50ICAgICBUeGludCAgICBEb25lICAgICBOZG9uZQorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgNjAgICAgODkwMDAwICAgICA0MDkzNjIgICAgICAgIDE3ICAgICAyNzYyMiAgICAgICAgNyAgICAgNjgyMworICAxMjggICAgNzU4MTUwICAgICA0NjQzNjQgICAgICAgIDIxICAgICAgOTMwMSAgICAgICAxMCAgICAgNzczOAorICAyNTYgICAgNDQ1NjMyICAgICA3NzQ2NDYgICAgICAgIDQyICAgICAxNTUwNyAgICAgICAyMSAgICAxMjkwNgorICA1MTIgICAgMjMyNjY2ICAgICA5OTQ0NDUgICAgMjQxMjkyICAgICAxOTE0NyAgIDI0MTE5MiAgICAgMTA2MgorIDEwMjQgICAgMTE5MDYxICAgIDEwMDAwMDMgICAgODcyNTE5ICAgICAxOTI1OCAgIDg3MjUxMSAgICAgICAgMAorIDE0NDAgICAgIDg1MTkzICAgIDEwMDAwMDMgICAgOTQ2NTc2ICAgICAxOTUwNSAgIDk0NjU2OSAgICAgICAgMAorIAorCitMZWdlbmQ6CisiSXBwcyIgc3RhbmRzIGZvciBpbnB1dCBwYWNrZXRzIHBlciBzZWNvbmQuIAorIlRwdXQiID09IHBhY2tldHMgb3V0IG9mIHRvdGFsIDFNIHRoYXQgbWFkZSBpdCBvdXQuCisidHhpbnQiID09IHRyYW5zbWl0IGNvbXBsZXRpb24gaW50ZXJydXB0cyBzZWVuCisiRG9uZSIgPT0gVGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IHRoZSBwb2xsKCkgbWFuYWdlZCB0byBwdWxsIGFsbAorcGFja2V0cyBvdXQgb2YgdGhlIHJ4IHJpbmcuIE5vdGUgZnJvbSB0aGlzIHRoYXQgdGhlIGxvd2VyIHRoZQorbG9hZCB0aGUgbW9yZSB3ZSBjb3VsZCBjbGVhbiB1cCB0aGUgcnhyaW5nCisiTmRvbmUiID09IGlzIHRoZSBjb252ZXJzZSBvZiAiRG9uZSIuIE5vdGUgYWdhaW4sIHRoYXQgdGhlIGhpZ2hlcgordGhlIGxvYWQgdGhlIG1vcmUgdGltZXMgd2UgY291bGRudCBjbGVhbiB1cCB0aGUgcnhyaW5nLgorCitPYnNlcnZlIHRoYXQ6Cit3aGVuIHRoZSBOSUMgcmVjZWl2ZXMgODkwS3BhY2tldHMvc2VjIG9ubHkgMTcgcnggaW50ZXJydXB0cyBhcmUgZ2VuZXJhdGVkLiAKK1RoZSBzeXN0ZW0gY2FudCBoYW5kbGUgdGhlIHByb2Nlc3NpbmcgYXQgMSBpbnRlcnJ1cHQvcGFja2V0IGF0IHRoYXQgbG9hZCBsZXZlbC4gCitBdCBsb3dlciByYXRlcyBvbiB0aGUgb3RoZXIgaGFuZCwgcnggaW50ZXJydXB0cyBnbyB1cCBhbmQgdGhlcmVmb3JlIHRoZQoraW50ZXJydXB0L3BhY2tldCByYXRpbyBnb2VzIHVwIChhcyBvYnNlcnZhYmxlIGZyb20gdGhhdCB0YWJsZSkuIFNvIHRoZXJlIGlzCitwb3NzaWJpbGl0eSB0aGF0IHVuZGVyIGxvdyBlbm91Z2ggaW5wdXQsIHlvdSBnZXQgb25lIHBvbGwgY2FsbCBmb3IgZWFjaAoraW5wdXQgcGFja2V0IGNhdXNlZCBieSBhIHNpbmdsZSBpbnRlcnJ1cHQgZWFjaCB0aW1lLiBBbmQgaWYgdGhlIHN5c3RlbSAKK2NhbnQgaGFuZGxlIGludGVycnVwdCBwZXIgcGFja2V0IHJhdGlvIG9mIDEsIHRoZW4gaXQgd2lsbCBqdXN0IGhhdmUgdG8gCitjaHVnIGFsb25nIC4uLi4KKworCiswKSBQcmVyZXF1aXNpdGVzOgorPT09PT09PT09PT09PT09PT09CitBIGRyaXZlciBNQVkgY29udGludWUgdXNpbmcgdGhlIG9sZCAyLjQgdGVjaG5pcXVlIGZvciBpbnRlcmZhY2luZwordG8gdGhlIG5ldHdvcmsgc3RhY2sgYW5kIG5vdCBiZW5lZml0IGZyb20gdGhlIE5BUEkgY2hhbmdlcy4KK05BUEkgYWRkaXRpb25zIHRvIHRoZSBrZXJuZWwgZG8gbm90IGJyZWFrIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCitOQVBJLCBob3dldmVyLCByZXF1aXJlcyB0aGUgZm9sbG93aW5nIGZlYXR1cmVzIHRvIGJlIGF2YWlsYWJsZToKKworQSkgRE1BIHJpbmcgb3IgZW5vdWdoIFJBTSB0byBzdG9yZSBwYWNrZXRzIGluIHNvZnR3YXJlIGRldmljZXMuCisKK0IpIEFiaWxpdHkgdG8gdHVybiBvZmYgaW50ZXJydXB0cyBvciBtYXliZSBldmVudHMgdGhhdCBzZW5kIHBhY2tldHMgdXAgCit0aGUgc3RhY2suCisKK05BUEkgcHJvY2Vzc2VzIHBhY2tldCBldmVudHMgaW4gd2hhdCBpcyBrbm93biBhcyBkZXYtPnBvbGwoKSBtZXRob2QuCitUeXBpY2FsbHksIG9ubHkgcGFja2V0IHJlY2VpdmUgZXZlbnRzIGFyZSBwcm9jZXNzZWQgaW4gZGV2LT5wb2xsKCkuIAorVGhlIHJlc3Qgb2YgdGhlIGV2ZW50cyBNQVkgYmUgcHJvY2Vzc2VkIGJ5IHRoZSByZWd1bGFyIGludGVycnVwdCBoYW5kbGVyIAordG8gcmVkdWNlIHByb2Nlc3NpbmcgbGF0ZW5jeSAoanVzdGlmaWVkIGFsc28gYmVjYXVzZSB0aGVyZSBhcmUgbm90IHRoYXQgCittYW55IG9mIHRoZW0pLgorTm90ZSwgaG93ZXZlciwgTkFQSSBkb2VzIG5vdCBlbmZvcmNlIHRoYXQgZGV2LT5wb2xsKCkgb25seSBwcm9jZXNzZXMgCityZWNlaXZlIGV2ZW50cy4gCitUZXN0cyB3aXRoIHRoZSB0dWxpcCBkcml2ZXIgaW5kaWNhdGVkIHNsaWdodGx5IGluY3JlYXNlZCBsYXRlbmN5IGlmCithbGwgb2YgdGhlIGludGVycnVwdCBoYW5kbGVyIGlzIG1vdmVkIHRvIGRldi0+cG9sbCgpLiBBbHNvIE1JSSBoYW5kbGluZworZ2V0cyBhIGxpdHRsZSB0cmlja2llci4KK1RoZSBleGFtcGxlIHVzZWQgaW4gdGhpcyBkb2N1bWVudCBpcyB0byBtb3ZlIHRoZSByZWNlaXZlIHByb2Nlc3Npbmcgb25seQordG8gZGV2LT5wb2xsKCk7IHRoaXMgaXMgc2hvd24gd2l0aCB0aGUgcGF0Y2ggZm9yIHRoZSB0dWxpcCBkcml2ZXIuCitGb3IgYW4gZXhhbXBsZSBvZiBjb2RlIHRoYXQgbW92ZXMgYWxsIHRoZSBpbnRlcnJ1cHQgZHJpdmVyIHRvIAorZGV2LT5wb2xsKCkgbG9vayBhdCB0aGUgcG9ydGVkIGUxMDAwIGNvZGUuCisKK1RoZXJlIGFyZSBjYXZlYXRzIHRoYXQgbWlnaHQgZm9yY2UgeW91IHRvIGdvIHdpdGggbW92aW5nIGV2ZXJ5dGhpbmcgdG8gCitkZXYtPnBvbGwoKS4gRGlmZmVyZW50IE5JQ3Mgd29yayBkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24gdGhlaXIgc3RhdHVzL2V2ZW50IAorYWNrbm93bGVkZ2VtZW50IHNldHVwLiAKK1RoZXJlIGFyZSB0d28gdHlwZXMgb2YgZXZlbnQgcmVnaXN0ZXIgQUNLIG1lY2hhbmlzbXMuCisJSSkgIHdoYXQgaXMga25vd24gYXMgQ2xlYXItb24tcmVhZCAoQ09SKS4KKwl3aGVuIHlvdSByZWFkIHRoZSBzdGF0dXMvZXZlbnQgcmVnaXN0ZXIsIGl0IGNsZWFycyBldmVyeXRoaW5nIQorCVRoZSBuYXRzZW1pIGFuZCBzdW5ibWFjIE5JQ3MgYXJlIGtub3duIHRvIGRvIHRoaXMuCisJSW4gdGhpcyBjYXNlIHlvdXIgb25seSBjaG9pY2UgaXMgdG8gbW92ZSBhbGwgdG8gZGV2LT5wb2xsKCkKKworCUlJKSBDbGVhci1vbi13cml0ZSAoQ09XKQorCSBpKSB5b3UgY2xlYXIgdGhlIHN0YXR1cyBieSB3cml0aW5nIGEgMSBpbiB0aGUgYml0LWxvY2F0aW9uIHlvdSB3YW50LgorCQlUaGVzZSBhcmUgdGhlIG1ham9yaXR5IG9mIHRoZSBOSUNzIGFuZCB3b3JrIHRoZSBiZXN0IHdpdGggTkFQSS4KKwkJUHV0IG9ubHkgcmVjZWl2ZSBldmVudHMgaW4gZGV2LT5wb2xsKCk7IGxlYXZlIHRoZSByZXN0IGluCisJCXRoZSBvbGQgaW50ZXJydXB0IGhhbmRsZXIuCisJIGlpKSB3aGF0ZXZlciB5b3Ugd3JpdGUgaW4gdGhlIHN0YXR1cyByZWdpc3RlciBjbGVhcnMgZXZlcnkgdGhpbmcgOy0+CisJCUNhbnQgc2VlbSB0byBmaW5kIGFueSBzdXBwb3J0ZWQgYnkgTGludXggd2hpY2ggZG8gdGhpcy4gSWYKKwkJc29tZW9uZSBrbm93cyBzdWNoIGEgY2hpcCBlbWFpbCB1cyBwbGVhc2UuCisJCU1vdmUgYWxsIHRvIGRldi0+cG9sbCgpCisKK0MpIEFiaWxpdHkgdG8gZGV0ZWN0IG5ldyB3b3JrIGNvcnJlY3RseS4KK05BUEkgd29ya3MgYnkgc2h1dHRpbmcgZG93biBldmVudCBpbnRlcnJ1cHRzIHdoZW4gdGhlcmVzIHdvcmsgYW5kCit0dXJuaW5nIHRoZW0gb24gd2hlbiB0aGVyZXMgbm9uZS4gCitOZXcgcGFja2V0cyBtaWdodCBzaG93IHVwIGluIHRoZSBzbWFsbCB3aW5kb3cgd2hpbGUgaW50ZXJydXB0cyB3ZXJlIGJlaW5nIAorcmUtZW5hYmxlZCAocmVmZXIgdG8gYXBwZW5kaXggMikuICBBIHBhY2tldCBtaWdodCBzbmVhayBpbiBkdXJpbmcgdGhlIHBlcmlvZCAKK3dlIGFyZSBlbmFibGluZyBpbnRlcnJ1cHRzLiBXZSBvbmx5IGdldCB0byBrbm93IGFib3V0IHN1Y2ggYSBwYWNrZXQgd2hlbiB0aGUgCituZXh0IG5ldyBwYWNrZXQgYXJyaXZlcyBhbmQgZ2VuZXJhdGVzIGFuIGludGVycnVwdC4gCitFc3NlbnRpYWxseSwgdGhlcmUgaXMgYSBzbWFsbCB3aW5kb3cgb2Ygb3Bwb3J0dW5pdHkgZm9yIGEgcmFjZSBjb25kaXRpb24KK3doaWNoIGZvciBjbGFyaXR5IHdlJ2xsIHJlZmVyIHRvIGFzIHRoZSAicm90dGluZyBwYWNrZXQiLgorCitUaGlzIGlzIGEgdmVyeSBpbXBvcnRhbnQgdG9waWMgYW5kIGFwcGVuZGl4IDIgaXMgZGVkaWNhdGVkIGZvciBtb3JlIAorZGlzY3Vzc2lvbi4KKworTG9ja2luZyBydWxlcyBhbmQgZW52aXJvbm1lbnRhbCBndWFyYW50ZWVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLUd1YXJhbnRlZTogT25seSBvbmUgQ1BVIGF0IGFueSB0aW1lIGNhbiBjYWxsIGRldi0+cG9sbCgpOyB0aGlzIGlzIGJlY2F1c2UKK29ubHkgb25lIENQVSBjYW4gcGljayB0aGUgaW5pdGlhbCBpbnRlcnJ1cHQgYW5kIGhlbmNlIHRoZSBpbml0aWFsCituZXRpZl9yeF9zY2hlZHVsZShkZXYpOworLSBUaGUgY29yZSBsYXllciBpbnZva2VzIGRldmljZXMgdG8gc2VuZCBwYWNrZXRzIGluIGEgcm91bmQgcm9iaW4gZm9ybWF0LgorVGhpcyBpbXBsaWVzIHJlY2VpdmUgaXMgdG90YWx5IGxvY2tsZXNzIGJlY2F1c2Ugb2YgdGhlIGd1YXJhbnRlZSBvbmx5IHRoYXQgCitvbmUgQ1BVIGlzIGV4ZWN1dGluZyBpdC4KKy0gIGNvbnRlbnRpb24gY2FuIG9ubHkgYmUgdGhlIHJlc3VsdCBvZiBzb21lIG90aGVyIENQVSBhY2Nlc3NpbmcgdGhlIHJ4CityaW5nLiBUaGlzIGhhcHBlbnMgb25seSBpbiBjbG9zZSgpIGFuZCBzdXNwZW5kKCkgKHdoZW4gdGhlc2UgbWV0aG9kcwordHJ5IHRvIGNsZWFuIHRoZSByeCByaW5nKTsgCisqKioqZ3VhcmFudGVlOiBkcml2ZXIgYXV0aG9ycyBuZWVkIG5vdCB3b3JyeSBhYm91dCB0aGlzOyBzeW5jaHJvbml6YXRpb24gCitpcyB0YWtlbiBjYXJlIGZvciB0aGVtIGJ5IHRoZSB0b3AgbmV0IGxheWVyLgorLWxvY2FsIGludGVycnVwdHMgYXJlIGVuYWJsZWQgKGlmIHlvdSBkb250IG1vdmUgYWxsIHRvIGRldi0+cG9sbCgpKS4gRm9yIAorZXhhbXBsZSBsaW5rL01JSSBhbmQgdHhjb21wbGV0ZSBjb250aW51ZSBmdW5jdGlvbmluZyBqdXN0IHNhbWUgb2xkIHdheS4gCitUaGlzIGltcHJvdmVzIHRoZSBsYXRlbmN5IG9mIHByb2Nlc3NpbmcgdGhlc2UgZXZlbnRzLiBJdCBpcyBhbHNvIGFzc3VtZWQgdGhhdCAKK3RoZSByZWNlaXZlIGludGVycnVwdCBpcyB0aGUgbGFyZ2VzdCBjYXVzZSBvZiBub2lzZS4gTm90ZSB0aGlzIG1pZ2h0IG5vdCAKK2Fsd2F5cyBiZSB0cnVlLiAKK1thY2NvcmRpbmcgdG8gTWFuZnJlZCBTcHJhdWwsIHRoZSB3aW5ib25kIGluc2lzdHMgb24gc2VuZGluZyBvbmUgCit0eG1pdGNvbXBsZXRlIGludGVycnVwdCBmb3IgZWFjaCBwYWNrZXQgKGFsdGhvdWdoIHRoaXMgY2FuIGJlIG1pdGlnYXRlZCldLgorRm9yIHRoZXNlIGJyb2tlbiBkcml2ZXJzLCBtb3ZlIGFsbCB0byBkZXYtPnBvbGwoKS4KKworRm9yIHRoZSByZXN0IG9mIHRoaXMgdGV4dCwgd2UnbGwgYXNzdW1lIHRoYXQgZGV2LT5wb2xsKCkgb25seQorcHJvY2Vzc2VzIHJlY2VpdmUgZXZlbnRzLgorCituZXcgbWV0aG9kcyBpbnRyb2R1Y2UgYnkgTkFQSQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworYSkgbmV0aWZfcnhfc2NoZWR1bGUoZGV2KQorQ2FsbGVkIGJ5IGFuIElSUSBoYW5kbGVyIHRvIHNjaGVkdWxlIGEgcG9sbCBmb3IgZGV2aWNlCisKK2IpIG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoZGV2KQorcHV0cyB0aGUgZGV2aWNlIGluIGEgc3RhdGUgd2hpY2ggYWxsb3dzIGZvciBpdCB0byBiZSBhZGRlZCB0byB0aGUKK0NQVSBwb2xsaW5nIGxpc3QgaWYgaXQgaXMgdXAgYW5kIHJ1bm5pbmcuIFlvdSBjYW4gbG9vayBhdCB0aGlzIGFzCit0aGUgZmlyc3QgaGFsZiBvZiAgbmV0aWZfcnhfc2NoZWR1bGUoZGV2KSBhYm92ZTsgdGhlIHNlY29uZCBoYWxmCitiZWluZyBjKSBiZWxvdy4KKworYykgX19uZXRpZl9yeF9zY2hlZHVsZShkZXYpCitBZGQgZGV2aWNlIHRvIHRoZSBwb2xsIGxpc3QgZm9yIHRoaXMgQ1BVOyBhc3N1bWluZyB0aGF0IF9wcmVwIGFib3ZlCitoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBhbmQgcmV0dXJuZWQgMS4KKworZCkgbmV0aWZfcnhfcmVzY2hlZHVsZShkZXYsIHVuZG8pCitDYWxsZWQgdG8gcmVzY2hlZHVsZSBwb2xsaW5nIGZvciBkZXZpY2Ugc3BlY2lmaWNhbGx5IGZvciBzb21lCitkZWZpY2llbnQgaGFyZHdhcmUuIFJlYWQgQXBwZW5kaXggMiBmb3IgbW9yZSBkZXRhaWxzLgorCitlKSBuZXRpZl9yeF9jb21wbGV0ZShkZXYpCisKK1JlbW92ZSBpbnRlcmZhY2UgZnJvbSB0aGUgQ1BVIHBvbGwgbGlzdDogaXQgbXVzdCBiZSBpbiB0aGUgcG9sbCBsaXN0CitvbiBjdXJyZW50IGNwdS4gVGhpcyBwcmltaXRpdmUgaXMgY2FsbGVkIGJ5IGRldi0+cG9sbCgpLCB3aGVuCitpdCBjb21wbGV0ZXMgaXRzIHdvcmsuIFRoZSBkZXZpY2UgY2Fubm90IGJlIG91dCBvZiBwb2xsIGxpc3QgYXQgdGhpcworY2FsbCwgaWYgaXQgaXMgdGhlbiBjbGVhcmx5IGl0IGlzIGEgQlVHKCkuIFlvdSdsbCBrbm93IDstPgorCitBbGwgdGhlc2UgYWJvdmUgbmV0aG9kcyBhcmUgdXNlZCBiZWxvdy4gU28ga2VlcCByZWFkaW5nIGZvciBjbGFyaXR5LgorCitEZXZpY2UgZHJpdmVyIGNoYW5nZXMgdG8gYmUgbWFkZSB3aGVuIHBvcnRpbmcgTkFQSQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQmVsb3cgd2UgZGVzY3JpYmUgd2hhdCBraW5kIG9mIGNoYW5nZXMgYXJlIHJlcXVpcmVkIGZvciBOQVBJIHRvIHdvcmsuCisKKzEpIGludHJvZHVjdGlvbiBvZiBkZXYtPnBvbGwoKSBtZXRob2QgCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgaXMgdGhlIG1ldGhvZCB0aGF0IGlzIGludm9rZWQgYnkgdGhlIG5ldHdvcmsgY29yZSB3aGVuIGl0IHJlcXVlc3RzCitmb3IgbmV3IHBhY2tldHMgZnJvbSB0aGUgZHJpdmVyLiBBIGRyaXZlciBpcyBhbGxvd2VkIHRvIHNlbmQgdXB0bworZGV2LT5xdW90YSBwYWNrZXRzIGJ5IHRoZSBjdXJyZW50IENQVSBiZWZvcmUgeWllbGRpbmcgdG8gdGhlIG5ldHdvcmsKK3N1YnN5c3RlbSAoc28gb3RoZXIgZGV2aWNlcyBjYW4gYWxzbyBnZXQgb3Bwb3J0dW5pdHkgdG8gc2VuZCB0byB0aGUgc3RhY2spLgorCitkZXYtPnBvbGwoKSBwcm90b3R5cGUgbG9va3MgYXMgZm9sbG93czoKK2ludCBteV9wb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCAqYnVkZ2V0KQorCitidWRnZXQgaXMgdGhlIHJlbWFpbmluZyBudW1iZXIgb2YgcGFja2V0cyB0aGUgbmV0d29yayBzdWJzeXN0ZW0gb24gdGhlCitjdXJyZW50IENQVSBjYW4gc2VuZCB1cCB0aGUgc3RhY2sgYmVmb3JlIHlpZWxkaW5nIHRvIG90aGVyIHN5c3RlbSB0YXNrcy4KKypFYWNoIGRyaXZlciBpcyByZXNwb25zaWJsZSBmb3IgZGVjcmVtZW50aW5nIGJ1ZGdldCBieSB0aGUgdG90YWwgbnVtYmVyIG9mCitwYWNrZXRzIHNlbnQuCisJVG90YWwgbnVtYmVyIG9mIHBhY2tldHMgY2Fubm90IGV4Y2VlZCBkZXYtPnF1b3RhLgorCitkZXYtPnBvbGwoKSBtZXRob2QgaXMgaW52b2tlZCBieSB0aGUgdG9wIGxheWVyLCB0aGUgZHJpdmVyIGp1c3Qgc2VuZHMgaWYgaXQgCitjYW4gdG8gdGhlIHN0YWNrIHRoZSBwYWNrZXQgcXVhbnRpdHkgcmVxdWVzdGVkLgorCittb3JlIG9uIGRldi0+cG9sbCgpIGJlbG93IGFmdGVyIHRoZSBpbnRlcnJ1cHQgY2hhbmdlcyBhcmUgZXhwbGFpbmVkLgorCisyKSByZWdpc3RlcmluZyBkZXYtPnBvbGwoKSBtZXRob2QKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2Rldi0+cG9sbCBzaG91bGQgYmUgc2V0IGluIHRoZSBkZXYtPnByb2JlKCkgbWV0aG9kLiAKK2UuZzoKK2Rldi0+b3BlbiA9IG15X29wZW47CisuCisuCisvKiB0d28gbmV3IGFkZGl0aW9ucyAqLworLyogZmlyc3QgcmVnaXN0ZXIgbXkgcG9sbCBtZXRob2QgKi8KK2Rldi0+cG9sbCA9IG15X3BvbGw7CisvKiBuZXh0IHJlZ2lzdGVyIG15IHdlaWdodC9xdWFudGE7IGNhbiBiZSBvdmVycmlkZGVuIGluIC9wcm9jICovCitkZXYtPndlaWdodCA9IDE2OworLgorLgorZGV2LT5zdG9wID0gbXlfY2xvc2U7CisKKworCiszKSBzY2hlZHVsaW5nIGRldi0+cG9sbCgpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhpcyBpbnZvbHZlcyBtb2RpZnlpbmcgdGhlIGludGVycnVwdCBoYW5kbGVyIGFuZCB0aGUgY29kZQorcGF0aCB3aGljaCB0YWtlcyB0aGUgcGFja2V0IG9mZiB0aGUgTklDIGFuZCBzZW5kcyB0aGVtIHRvIHRoZSAKK3N0YWNrLgorCitpdCdzIGltcG9ydGFudCBhdCB0aGlzIHBvaW50IHRvIGludHJvZHVjZSB0aGUgY2xhc3NpY2FsIEQgQmVja2VyIAoraW50ZXJydXB0IHByb2Nlc3NvcjoKKworLS0tLS0tLS0tLS0tLS0tLS0tCitzdGF0aWMgaXJxcmV0dXJuX3QKK25ldGRldmljZV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkZXZfaW5zdGFuY2U7CisJc3RydWN0IG15X3ByaXZhdGUgKnRwID0gKHN0cnVjdCBteV9wcml2YXRlICopZGV2LT5wcml2OworCisJaW50IHdvcmtfY291bnQgPSBteV93b3JrX2NvdW50OworICAgICAgICBzdGF0dXMgPSByZWFkX2ludGVycnVwdF9zdGF0dXNfcmVnKCk7CisgICAgICAgIGlmIChzdGF0dXMgPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gSVJRX05PTkU7IC8qIFNoYXJlZCBJUlE6IG5vdCB1cyAqLworICAgICAgICBpZiAoc3RhdHVzID09IDB4ZmZmZikKKyAgICAgICAgICAgICAgICByZXR1cm4gSVJRX0hBTkRMRUQ7ICAgICAgLyogSG90IHVucGx1ZyAqLworICAgICAgICBpZiAoc3RhdHVzICYgZXJyb3IpCisJCWRvX3NvbWVfZXJyb3JfaGFuZGxpbmcoKQorICAgICAgICAKKwlkbyB7CisJCWFja25vd2xlZGdlX2ludHNfQVNBUCgpOworCisJCWlmIChzdGF0dXMgJiBsaW5rX2ludGVycnVwdCkgeworCQkJc3Bpbl9sb2NrKCZ0cC0+bGlua19sb2NrKTsKKwkJCWRvX3NvbWVfbGlua19zdGF0X3N0dWZmKCk7CisJCQlzcGluX2xvY2soJnRwLT5saW5rX2xvY2spOworCQl9CisJCQorCQlpZiAoc3RhdHVzICYgcnhfaW50ZXJydXB0KSB7CisJCQlyZWNlaXZlX3BhY2tldHMoZGV2KTsKKwkJfQorCisJCWlmIChzdGF0dXMgJiByeF9ub2J1ZnMpIHsKKwkJCW1ha2VfcnhfYnVmZnNfYXZhaWwoKTsKKwkJfQorCQkJCisJCWlmIChzdGF0dXMgJiB0eF9yZWxhdGVkKSB7CisJCQlzcGluX2xvY2soJnRwLT5sb2NrKTsKKwkJCXR4X3JpbmdfZnJlZShkZXYpOworCQkJaWYgKHR4X2RpZWQpCisJCQkJcmVzdGFydF90eCgpOworCQkJc3Bpbl91bmxvY2soJnRwLT5sb2NrKTsKKwkJfQorCisJCXN0YXR1cyA9IHJlYWRfaW50ZXJydXB0X3N0YXR1c19yZWcoKTsKKworCX0gd2hpbGUgKCEoc3RhdHVzICYgZXJyb3IpIHx8IG1vcmVfd29ya190b19iZV9kb25lKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2Ugbm93IGNoYW5nZSB0aGlzIHRvIHdoYXQgaXMgc2hvd24gYmVsb3cgdG8gTkFQSS1lbmFibGUgaXQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N0YXRpYyBpcnFyZXR1cm5fdAorbmV0ZGV2aWNlX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkZXZfaW5zdGFuY2U7CisJc3RydWN0IG15X3ByaXZhdGUgKnRwID0gKHN0cnVjdCBteV9wcml2YXRlICopZGV2LT5wcml2OworCisgICAgICAgIHN0YXR1cyA9IHJlYWRfaW50ZXJydXB0X3N0YXR1c19yZWcoKTsKKyAgICAgICAgaWYgKHN0YXR1cyA9PSAwKQorICAgICAgICAgICAgICAgIHJldHVybiBJUlFfTk9ORTsgICAgICAgICAvKiBTaGFyZWQgSVJROiBub3QgdXMgKi8KKyAgICAgICAgaWYgKHN0YXR1cyA9PSAweGZmZmYpCisgICAgICAgICAgICAgICAgcmV0dXJuIElSUV9IQU5ETEVEOyAgICAgICAgIC8qIEhvdCB1bnBsdWcgKi8KKyAgICAgICAgaWYgKHN0YXR1cyAmIGVycm9yKQorCQlkb19zb21lX2Vycm9yX2hhbmRsaW5nKCk7CisgICAgICAgIAorCWRvIHsKKy8qKioqKioqKioqKioqKioqKioqKioqKiogc3RhcnQgbm90ZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQkKKwkJYWNrbm93bGVkZ2VfaW50c19BU0FQKCk7ICAvLyBkb250IGFjayByeCBhbmQgcnhub2J1ZmYgaGVyZQorLyoqKioqKioqKioqKioqKioqKioqKioqKiBlbmQgbm90ZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQkKKworCQlpZiAoc3RhdHVzICYgbGlua19pbnRlcnJ1cHQpIHsKKwkJCXNwaW5fbG9jaygmdHAtPmxpbmtfbG9jayk7CisJCQlkb19zb21lX2xpbmtfc3RhdF9zdHVmZigpOworCQkJc3Bpbl91bmxvY2soJnRwLT5saW5rX2xvY2spOworCQl9CisvKioqKioqKioqKioqKioqKioqKioqKioqIHN0YXJ0IG5vdGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkJCisJCWlmIChzdGF0dXMgJiByeF9pbnRlcnJ1cHQgfHwgKHN0YXR1cyAmIHJ4X25vYnVmZnMpKSB7CisJCQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcChkZXYpKSB7CisKKwkJCQkvKiBkaXNhYmxlIGludGVycnVwdHMgY2F1c2VkIAorCQkJICAgICAgICAgKglieSBhcnJpdmluZyBwYWNrZXRzICovCisJCQkJZGlzYWJsZV9yeF9hbmRfcnhub2J1ZmZfaW50cygpOworCQkJCS8qIHRlbGwgc3lzdGVtIHdlIGhhdmUgd29yayB0byBiZSBkb25lLiAqLworCQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoZGV2KTsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRrKCJkcml2ZXIgYnVnISBpbnRlcnJ1cHQgd2hpbGUgaW4gcG9sbFxuIik7CisJCQkJLyogRklYIGJ5IGRpc2FibGluZyBpbnRlcnJ1cHRzICAqLworCQkJCWRpc2FibGVfcnhfYW5kX3J4bm9idWZmX2ludHMoKTsKKwkJCX0KKwkJfQorLyoqKioqKioqKioqKioqKioqKioqKioqKiBlbmQgbm90ZSBub3RlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCQorCQkJCisJCWlmIChzdGF0dXMgJiB0eF9yZWxhdGVkKSB7CisJCQlzcGluX2xvY2soJnRwLT5sb2NrKTsKKwkJCXR4X3JpbmdfZnJlZShkZXYpOworCisJCQlpZiAodHhfZGllZCkKKwkJCQlyZXN0YXJ0X3R4KCk7CisJCQlzcGluX3VubG9jaygmdHAtPmxvY2spOworCQl9CisKKwkJc3RhdHVzID0gcmVhZF9pbnRlcnJ1cHRfc3RhdHVzX3JlZygpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqIHN0YXJ0IG5vdGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkJCisJfSB3aGlsZSAoIShzdGF0dXMgJiBlcnJvcikgfHwgbW9yZV93b3JrX3RvX2JlX2RvbmUoc3RhdHVzKSk7CisvKioqKioqKioqKioqKioqKioqKioqKioqIGVuZCBub3RlIG5vdGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkJCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitXZSBub3RlIHNldmVyYWwgdGhpbmdzIGZyb20gYWJvdmU6CisKK0kpIEFueSBpbnRlcnJ1cHQgc291cmNlIHdoaWNoIGlzIGNhdXNlZCBieSBhcnJpdmluZyBwYWNrZXRzIGlzIG5vdwordHVybmVkIG9mZiB3aGVuIGl0IG9jY3Vycy4gRGVwZW5kaW5nIG9uIHRoZSBoYXJkd2FyZSwgdGhlcmUgY291bGQgYmUKK3NldmVyYWwgcmVhc29ucyB0aGF0IGFycml2aW5nIHBhY2tldHMgd291bGQgY2F1c2UgaW50ZXJydXB0czsgdGhlc2UgYXJlIHRoZQoraW50ZXJydXB0IHNvdXJjZXMgd2Ugd2lzaCB0byBhdm9pZC4gVGhlIHR3byBjb21tb24gb25lcyBhcmUgYSkgYSBwYWNrZXQgCithcnJpdmluZyAocnhpbnQpIGIpIGEgcGFja2V0IGFycml2aW5nIGFuZCBmaW5kaW5nIG5vIERNQSBidWZmZXJzIGF2YWlsYWJsZQorKHJ4bm9idWZmKSAuCitUaGlzIG1lYW5zIGFsc28gYWNrbm93bGVkZ2VfaW50c19BU0FQKCkgd2lsbCBub3QgY2xlYXIgdGhlIHN0YXR1cworcmVnaXN0ZXIgZm9yIHRob3NlIHR3byBpdGVtcyBhYm92ZTsgY2xlYXJpbmcgaXMgZG9uZSBpbiB0aGUgcGxhY2Ugd2hlcmUgCitwcm9wZXIgd29yayBpcyBkb25lIHdpdGhpbiBOQVBJOyBhdCB0aGUgcG9sbCgpIGFuZCByZWZpbGxfcnhfcmluZygpIAorZGlzY3Vzc2VkIGZ1cnRoZXIgYmVsb3cuCituZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCkgcmV0dXJucyAxIGlmIGRldmljZSBpcyBpbiBydW5uaW5nIHN0YXRlIGFuZAorZ2V0cyBzdWNjZXNzZnVsbHkgYWRkZWQgdG8gdGhlIGNvcmUgcG9sbCBsaXN0LiBJZiB3ZSBnZXQgYSB6ZXJvIHZhbHVlCit3ZSBjYW4gX2FsbW9zdF8gYXNzdW1lIGFyZSBhbHJlYWR5IGFkZGVkIHRvIHRoZSBsaXN0IChpbnN0ZWFkIG9mIG5vdCBydW5uaW5nLiAKK0xvZ2ljIGJhc2VkIG9uIHRoZSBmYWN0IHRoYXQgeW91IHNob3VsZG4ndCBnZXQgaW50ZXJydXB0IGlmIG5vdCBydW5uaW5nKQorV2UgcmVjdGlmeSB0aGlzIGJ5IGRpc2FibGluZyByeCBhbmQgcnhub2J1ZiBpbnRlcnJ1cHRzLgorCitJSSkgdGhhdCByZWNlaXZlX3BhY2tldHMoZGV2KSBhbmQgbWFrZV9yeF9idWZmc19hdmFpbCgpIG1heSBoYXZlIGRpc2FwcGVhcmVkLgorVGhlc2UgZnVuY3Rpb25hbGl0aWVzIGFyZSBzdGlsbCBhcm91bmQgYWN0dWFsbHkuLi4uLi4KKworaW5mYWN0LCByZWNlaXZlX3BhY2tldHMoZGV2KSBpcyB2ZXJ5IGNsb3NlIHRvIG15X3BvbGwoKSBhbmQgCittYWtlX3J4X2J1ZmZzX2F2YWlsKCkgaXMgaW52b2tlZCBmcm9tIG15X3BvbGwoKQorCis0KSBjb252ZXJ0aW5nIHJlY2VpdmVfcGFja2V0cygpIHRvIGRldi0+cG9sbCgpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitXZSBuZWVkIHRvIGNvbnZlcnQgdGhlIGNsYXNzaWNhbCBEIEJlY2tlciByZWNlaXZlX3BhY2tldHMoZGV2KSB0byBteV9wb2xsKCkKKworRmlyc3QgdGhlIHR5cGljYWwgcmVjZWl2ZV9wYWNrZXRzKCkgYmVsb3c6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8qIHRoaXMgaXMgY2FsbGVkIGJ5IGludGVycnVwdCBoYW5kbGVyICovCitzdGF0aWMgdm9pZCByZWNlaXZlX3BhY2tldHMgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisKKwlzdHJ1Y3QgbXlfcHJpdmF0ZSAqdHAgPSAoc3RydWN0IG15X3ByaXZhdGUgKilkZXYtPnByaXY7CisJcnhfcmluZyA9IHRwLT5yeF9yaW5nOworCWN1cl9yeCA9IHRwLT5jdXJfcng7CisJaW50IGVudHJ5ID0gY3VyX3J4ICUgUlhfUklOR19TSVpFOworCWludCByZWNlaXZlZCA9IDA7CisJaW50IHJ4X3dvcmtfbGltaXQgPSB0cC0+ZGlydHlfcnggKyBSWF9SSU5HX1NJWkUgLSB0cC0+Y3VyX3J4OworCisJd2hpbGUgKHJ4X3Jpbmdfbm90X2VtcHR5KSB7CisJCXUzMiByeF9zdGF0dXM7CisJCXVuc2lnbmVkIGludCByeF9zaXplOworCQl1bnNpZ25lZCBpbnQgcGt0X3NpemU7CisJCXN0cnVjdCBza19idWZmICpza2I7CisgICAgICAgICAgICAgICAgLyogcmVhZCBzaXplK3N0YXR1cyBvZiBuZXh0IGZyYW1lIGZyb20gRE1BIHJpbmcgYnVmZmVyICovCisJCS8qIHRoZSBudW1iZXIgMTYgYW5kIDQgYXJlIGp1c3QgZXhhbXBsZXMgKi8KKyAgICAgICAgICAgICAgICByeF9zdGF0dXMgPSBsZTMyX3RvX2NwdSAoKih1MzIgKikgKHJ4X3JpbmcgKyByaW5nX29mZnNldCkpOworICAgICAgICAgICAgICAgIHJ4X3NpemUgPSByeF9zdGF0dXMgPj4gMTY7CisgICAgICAgICAgICAgICAgcGt0X3NpemUgPSByeF9zaXplIC0gNDsKKworCQkvKiBwcm9jZXNzIGVycm9ycyAqLworICAgICAgICAgICAgICAgIGlmICgocnhfc2l6ZSA+IChNQVhfRVRIX0ZSQU1FX1NJWkUrNCkpIHx8CisgICAgICAgICAgICAgICAgICAgICghKHJ4X3N0YXR1cyAmIFJ4U3RhdHVzT0spKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbmV0ZHJ2X3J4X2VyciAocnhfc3RhdHVzLCBkZXYsIHRwLCBpb2FkZHIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICgtLXJ4X3dvcmtfbGltaXQgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJLyogZ3JhYiBhIHNrYiAqLworICAgICAgICAgICAgICAgIHNrYiA9IGRldl9hbGxvY19za2IgKHBrdF9zaXplICsgMik7CisgICAgICAgICAgICAgICAgaWYgKHNrYikgeworCQkJLgorCQkJLgorCQkJbmV0aWZfcnggKHNrYik7CisJCQkuCisJCQkuCisgICAgICAgICAgICAgICAgfSBlbHNlIHsgIC8qIE9PTSAqLworCQkJLypzZWVtcyB2ZXJ5IGRyaXZlciBzcGVjaWZpYyAuLi4gc29tZSBqdXN0IHBhc3MKKwkJCXdoYXRldmVyIGlzIG9uIHRoZSByaW5nIGFscmVhZHkuICovCisgICAgICAgICAgICAgICAgfQorCisJCS8qIG1vdmUgdG8gdGhlIG5leHQgc2tiIG9uIHRoZSByaW5nICovCisJCWVudHJ5ID0gKCsrdHAtPmN1cl9yeCkgJSBSWF9SSU5HX1NJWkU7CisJCXJlY2VpdmVkKysgOworCisgICAgICAgIH0KKworCS8qIHN0b3JlIGN1cnJlbnQgcmluZyBwb2ludGVyIHN0YXRlICovCisgICAgICAgIHRwLT5jdXJfcnggPSBjdXJfcng7CisKKyAgICAgICAgLyogUmVmaWxsIHRoZSBSeCByaW5nIGJ1ZmZlcnMgaWYgdGhleSBhcmUgbmVlZGVkICovCisJcmVmaWxsX3J4X3JpbmcoKTsKKwkuCisJLgorCit9CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitXZSBjaGFuZ2UgaXQgdG8gYSBuZXcgb25lIGJlbG93OyBub3RlIHRoZSBhZGRpdGlvbmFsIHBhcmFtZXRlciBpbgordGhlIGNhbGwuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyogdGhpcyBpcyBjYWxsZWQgYnkgdGhlIG5ldHdvcmsgY29yZSAqLworc3RhdGljIGludCBteV9wb2xsIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgKmJ1ZGdldCkKK3sKKworCXN0cnVjdCBteV9wcml2YXRlICp0cCA9IChzdHJ1Y3QgbXlfcHJpdmF0ZSAqKWRldi0+cHJpdjsKKwlyeF9yaW5nID0gdHAtPnJ4X3Jpbmc7CisJY3VyX3J4ID0gdHAtPmN1cl9yeDsKKwlpbnQgZW50cnkgPSBjdXJfcnggJSBSWF9CVUZfTEVOOworCS8qIG1heGltdW0gcGFja2V0cyB0byBzZW5kIHRvIHRoZSBzdGFjayAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKiBub3RlIG5vdGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkJCisJaW50IHJ4X3dvcmtfbGltaXQgPSBkZXYtPnF1b3RhOworCisvKioqKioqKioqKioqKioqKioqKioqKioqIGVuZCBub3RlIG5vdGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkJCisgICAgZG8geyAgLy8gb3V0ZXIgYmVnaW5uaW5nIGxvb3Agc3RhcnRzIGhlcmUKKworCWNsZWFyX3J4X3N0YXR1c19yZWdpc3Rlcl9iaXQoKTsKKworCXdoaWxlIChyeF9yaW5nX25vdF9lbXB0eSkgeworCQl1MzIgcnhfc3RhdHVzOworCQl1bnNpZ25lZCBpbnQgcnhfc2l6ZTsKKwkJdW5zaWduZWQgaW50IHBrdF9zaXplOworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworICAgICAgICAgICAgICAgIC8qIHJlYWQgc2l6ZStzdGF0dXMgb2YgbmV4dCBmcmFtZSBmcm9tIERNQSByaW5nIGJ1ZmZlciAqLworCQkvKiB0aGUgbnVtYmVyIDE2IGFuZCA0IGFyZSBqdXN0IGV4YW1wbGVzICovCisgICAgICAgICAgICAgICAgcnhfc3RhdHVzID0gbGUzMl90b19jcHUgKCoodTMyICopIChyeF9yaW5nICsgcmluZ19vZmZzZXQpKTsKKyAgICAgICAgICAgICAgICByeF9zaXplID0gcnhfc3RhdHVzID4+IDE2OworICAgICAgICAgICAgICAgIHBrdF9zaXplID0gcnhfc2l6ZSAtIDQ7CisKKwkJLyogcHJvY2VzcyBlcnJvcnMgKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJ4X3NpemUgPiAoTUFYX0VUSF9GUkFNRV9TSVpFKzQpKSB8fAorICAgICAgICAgICAgICAgICAgICAoIShyeF9zdGF0dXMgJiBSeFN0YXR1c09LKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldGRydl9yeF9lcnIgKHJ4X3N0YXR1cywgZGV2LCB0cCwgaW9hZGRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgIH0KKworLyoqKioqKioqKioqKioqKioqKioqKioqKiBub3RlIG5vdGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkJCisgICAgICAgICAgICAgICAgaWYgKC0tcnhfd29ya19saW1pdCA8IDApIHsgLyogd2UgZ290IHBhY2tldHMsIGJ1dCBubyBxdW90YSAqLworCQkJLyogc3RvcmUgY3VycmVudCByaW5nIHBvaW50ZXIgc3RhdGUgKi8KKwkJCXRwLT5jdXJfcnggPSBjdXJfcng7CisKKwkJCS8qIFJlZmlsbCB0aGUgUnggcmluZyBidWZmZXJzIGlmIHRoZXkgYXJlIG5lZWRlZCAqLworCQkJcmVmaWxsX3J4X3JpbmcoZGV2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbm90X2RvbmU7CisJCX0KKy8qKioqKioqKioqKioqKioqKioqKioqICBlbmQgbm90ZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCS8qIGdyYWIgYSBza2IgKi8KKyAgICAgICAgICAgICAgICBza2IgPSBkZXZfYWxsb2Nfc2tiIChwa3Rfc2l6ZSArIDIpOworICAgICAgICAgICAgICAgIGlmIChza2IpIHsKKwkJCS4KKwkJCS4KKy8qKioqKioqKioqKioqKioqKioqKioqKiogbm90ZSBub3RlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCQorCQkJbmV0aWZfcmVjZWl2ZV9za2IgKHNrYik7CisvKioqKioqKioqKioqKioqKioqKioqKiAgZW5kIG5vdGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS4KKwkJCS4KKyAgICAgICAgICAgICAgICB9IGVsc2UgeyAgLyogT09NICovCisJCQkvKnNlZW1zIHZlcnkgZHJpdmVyIHNwZWNpZmljIC4uLiBjb21tb24gaXMganVzdCBwYXNzCisJCQl3aGF0ZXZlciBpcyBvbiB0aGUgcmluZyBhbHJlYWR5LiAqLworICAgICAgICAgICAgICAgIH0KKworCQkvKiBtb3ZlIHRvIHRoZSBuZXh0IHNrYiBvbiB0aGUgcmluZyAqLworCQllbnRyeSA9ICgrK3RwLT5jdXJfcngpICUgUlhfUklOR19TSVpFOworCQlyZWNlaXZlZCsrIDsKKworICAgICAgICB9CisKKwkvKiBzdG9yZSBjdXJyZW50IHJpbmcgcG9pbnRlciBzdGF0ZSAqLworICAgICAgICB0cC0+Y3VyX3J4ID0gY3VyX3J4OworCisgICAgICAgIC8qIFJlZmlsbCB0aGUgUnggcmluZyBidWZmZXJzIGlmIHRoZXkgYXJlIG5lZWRlZCAqLworCXJlZmlsbF9yeF9yaW5nKGRldik7CisJCisJLyogbm8gcGFja2V0cyBvbiByaW5nOyBidXQgbmV3IG9uZXMgY2FuIGFycml2ZSBzaW5jZSB3ZSBsYXN0IAorCSAgIGNoZWNrZWQgICovCisJc3RhdHVzID0gcmVhZF9pbnRlcnJ1cHRfc3RhdHVzX3JlZygpOworCWlmIChyeCBzdGF0dXMgaXMgbm90IHNldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgc29tZXRoaW5nIGFycml2ZXMgaW4gdGhpcyBuYXJyb3cgd2luZG93LAorCQkJYW4gaW50ZXJydXB0IHdpbGwgYmUgZ2VuZXJhdGVkICovCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisJfQorCS8qIGRvbmUhIGF0IGxlYXN0IHRoYXRzIHdoYXQgaXQgbG9va3MgbGlrZSA7LT4KKwlpZiBuZXcgcGFja2V0cyBjYW1lIGluIGFmdGVyIG91ciBsYXN0IGNoZWNrIG9uIHN0YXR1cyBiaXRzCisJdGhleSdsbCBiZSBjYXVnaHQgYnkgdGhlIHdoaWxlIGNoZWNrIGFuZCB3ZSBnbyBiYWNrIGFuZCBjbGVhciB0aGVtIAorCXNpbmNlIHdlIGhhdmVudCBleGNlZWRlZCBvdXIgcXVvdGEgKi8KKyAgICB9IHdoaWxlIChyeF9zdGF0dXNfaXNfc2V0KTsgCisKK2RvbmU6CisKKy8qKioqKioqKioqKioqKioqKioqKioqKiogbm90ZSBub3RlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCQorICAgICAgICBkZXYtPnF1b3RhIC09IHJlY2VpdmVkOworICAgICAgICAqYnVkZ2V0IC09IHJlY2VpdmVkOworCisgICAgICAgIC8qIElmIFJYIHJpbmcgaXMgbm90IGZ1bGwgd2UgYXJlIG91dCBvZiBtZW1vcnkuICovCisgICAgICAgIGlmICh0cC0+cnhfYnVmZmVyc1t0cC0+ZGlydHlfcnggJSBSWF9SSU5HX1NJWkVdLnNrYiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gb29tOworCisJLyogd2UgYXJlIGhhcHB5L2RvbmUsIG5vIG1vcmUgcGFja2V0cyBvbiByaW5nOyBwdXQgdXMgYmFjaworCXRvIHdoZXJlIHdlIGNhbiBzdGFydCBwcm9jZXNzaW5nIGludGVycnVwdHMgYWdhaW4gKi8KKyAgICAgICAgbmV0aWZfcnhfY29tcGxldGUoZGV2KTsKKwllbmFibGVfcnhfYW5kX3J4bm9idWZfaW50cygpOworCisgICAgICAgLyogVGhlIGxhc3Qgb3AgaGFwcGVucyBhZnRlciBwb2xsIGNvbXBsZXRpb24uIFdoaWNoIG1lYW5zIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICogMS4gaXQgY2FuIHJhY2Ugd2l0aCBkaXNhYmxpbmcgaXJxcyBpbiBpcnEgaGFuZGxlciAod2hpY2ggYXJlIGRvbmUgdG8gCisJKiBzY2hlZHVsZSBwb2xscykKKyAgICAgICAgKiAyLiBpdCBjYW4gcmFjZSB3aXRoIGRpcy9lbmFibGluZyBpcnFzIGluIG90aGVyIHBvbGwgdGhyZWFkcworICAgICAgICAqIDMuIGlmIGFuIGlycSByYWlzZWQgYWZ0ZXIgdGhlIGJlZ2luaW5nIG9mIHRoZSBvdXRlciAgYmVnaW5uaW5nIAorICAgICAgICAqIGxvb3AobWFya2VkIGluIHRoZSBjb2RlIGFib3ZlKSwgaXQgd2lsbCBiZSBpbW1lZGlhdGVseQorICAgICAgICAqIHRyaWdnZXJlZCBoZXJlLgorICAgICAgICAqCisgICAgICAgICogU3VtbWFyaXppbmc6IHRoZSBsb2dpYyBtYXkgcmVzdWx0cyBpbiBzb21lIHJlZHVuZGFudCBpcnFzIGJvdGgKKyAgICAgICAgKiBkdWUgdG8gcmFjZXMgaW4gbWFza2luZyBhbmQgZHVlIHRvIHRvbyBsYXRlIGFja2luZyBvZiBhbHJlYWR5CisgICAgICAgICogcHJvY2Vzc2VkIGlycXMuIFRoZSBnb29kIG5ld3M6IG5vIGV2ZW50cyBhcmUgZXZlciBsb3N0LgorICAgICAgICAqLworCisgICAgICAgIHJldHVybiAwOyAgIC8qIGRvbmUgKi8KKworbm90X2RvbmU6CisgICAgICAgIGlmICh0cC0+Y3VyX3J4IC0gdHAtPmRpcnR5X3J4ID4gUlhfUklOR19TSVpFLzIgfHwKKyAgICAgICAgICAgIHRwLT5yeF9idWZmZXJzW3RwLT5kaXJ0eV9yeCAlIFJYX1JJTkdfU0laRV0uc2tiID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmVmaWxsX3J4X3JpbmcoZGV2KTsKKworICAgICAgICBpZiAoIXJlY2VpdmVkKSB7CisgICAgICAgICAgICAgICAgcHJpbnRrKCJyZWNlaXZlZD09MFxuIik7CisgICAgICAgICAgICAgICAgcmVjZWl2ZWQgPSAxOworICAgICAgICB9CisgICAgICAgIGRldi0+cXVvdGEgLT0gcmVjZWl2ZWQ7CisgICAgICAgICpidWRnZXQgLT0gcmVjZWl2ZWQ7CisgICAgICAgIHJldHVybiAxOyAgLyogbm90X2RvbmUgKi8KKworb29tOgorICAgICAgICAvKiBTdGFydCB0aW1lciwgc3RvcCBwb2xsaW5nLCBidXQgZG8gbm90IGVuYWJsZSByeCBpbnRlcnJ1cHRzLiAqLworCXN0YXJ0X3BvbGxfdGltZXIoZGV2KTsKKyAgICAgICAgcmV0dXJuIDA7ICAvKiB3ZSdsbCB0YWtlIGl0IGZyb20gaGVyZSBzbyB0ZWxsIGNvcmUgImRvbmUiKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKiBFbmQgbm90ZSBub3RlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCQorfQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGcm9tIGFib3ZlIHdlIG5vdGUgdGhhdDoKKzApIHJ4X3dvcmtfbGltaXQgPSBkZXYtPnF1b3RhIAorMSkgcmVmaWxsX3J4X3JpbmcoKSBpcyBpbiBjaGFyZ2Ugb2YgY2xlYXJpbmcgdGhlIGJpdCBmb3Igcnhub2J1ZmYgd2hlbgoraXQgZG9lcyB0aGUgd29yay4KKzIpIFdlIGhhdmUgYSBkb25lIGFuZCBub3RfZG9uZSBzdGF0ZS4KKzMpIGluc3RlYWQgb2YgbmV0aWZfcngoKSB3ZSBjYWxsIG5ldGlmX3JlY2VpdmVfc2tiKCkgdG8gcGFzcyB0aGUgc2tiLgorNCkgd2UgaGF2ZSBhIG5ldyB3YXkgb2YgaGFuZGxpbmcgb29tIGNvbmRpdGlvbgorNSkgQSBuZXcgb3V0ZXIgZm9yICg7OykgbG9vcCBoYXMgYmVlbiBhZGRlZC4gVGhpcyBzZXJ2ZXMgdGhlIHB1cnBvc2Ugb2YKK2Vuc3VyaW5nIHRoYXQgaWYgYSBuZXcgcGFja2V0IGhhcyBjb21lIGluLCBhZnRlciB3ZSBhcmUgYWxsIHNldCBhbmQgZG9uZSwKK2FuZCB3ZSBoYXZlIG5vdCBleGNlZWRlZCBvdXIgcXVvdGEgdGhhdCB3ZSBjb250aW51ZSBzZW5kaW5nIHBhY2tldHMgdXAuCisgCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQb2xsIHRpbWVyIGNvZGUgd2lsbCBuZWVkIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKK2EpIAorCisgICAgICAgIGlmICh0cC0+Y3VyX3J4IC0gdHAtPmRpcnR5X3J4ID4gUlhfUklOR19TSVpFLzIgfHwKKyAgICAgICAgICAgIHRwLT5yeF9idWZmZXJzW3RwLT5kaXJ0eV9yeCAlIFJYX1JJTkdfU0laRV0uc2tiID09IE5VTEwpIAorICAgICAgICAgICAgICAgIHJlZmlsbF9yeF9yaW5nKGRldik7CisKKyAgICAgICAgLyogSWYgUlggcmluZyBpcyBub3QgZnVsbCB3ZSBhcmUgc3RpbGwgb3V0IG9mIG1lbW9yeS4KKwkgICBSZXN0YXJ0IHRoZSB0aW1lciBhZ2Fpbi4gRWxzZSB3ZSByZS1hZGQgb3Vyc2VsdmVzIAorICAgICAgICAgICB0byB0aGUgbWFzdGVyIHBvbGwgbGlzdC4KKyAgICAgICAgICovCisKKyAgICAgICAgaWYgKHRwLT5yeF9idWZmZXJzW3RwLT5kaXJ0eV9yeCAlIFJYX1JJTkdfU0laRV0uc2tiID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmVzdGFydF90aW1lcigpOworCisJZWxzZSBuZXRpZl9yeF9zY2hlZHVsZShkZXYpOyAgLyogd2UgYXJlIGJhY2sgb24gdGhlIHBvbGwgbGlzdCAqLworCQorNSkgZGV2LT5jbG9zZSgpIGFuZCBkZXYtPnN1c3BlbmQoKSBpc3N1ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhlIGRyaXZlciB3cml0dGVyIG5lZWRudCB3b3JyeSBhYm91dCB0aGlzLiBUaGUgdG9wIG5ldCBsYXllciB0YWtlcworY2FyZSBvZiBpdC4KKworNikgQWRkaW5nIG5ldyBTdGF0cyB0byAvcHJvYyAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitJbiBvcmRlciB0byBkZWJ1ZyBzb21lIG9mIHRoZSBuZXcgZmVhdHVyZXMsIHdlIGludHJvZHVjZSBuZXcgc3RhdHMKK3RoYXQgbmVlZCB0byBiZSBjb2xsZWN0ZWQuCitUT0RPOiBGaWxsIHRoaXMgbGF0ZXIuCisKK0FQUEVORElYIDE6IGRpc2N1c3Npb24gb24gdXNpbmcgZXRoZXJuZXQgSFcgRkMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK01vc3QgY2hpcHMgd2l0aCBGQyBvbmx5IHNlbmQgYSBwYXVzZSBwYWNrZXQgd2hlbiB0aGV5IHJ1biBvdXQgb2YgUnggYnVmZmVycy4KK1NpbmNlIHBhY2tldHMgYXJlIHB1bGxlZCBvZmYgdGhlIERNQSByaW5nIGJ5IGEgc29mdGlycSBpbiBOQVBJLAoraWYgdGhlIHN5c3RlbSBpcyBzbG93IGluIGdyYWJiaW5nIHRoZW0gYW5kIHdlIGhhdmUgYSBoaWdoIGlucHV0CityYXRlIChmYXN0ZXIgdGhhbiB0aGUgc3lzdGVtJ3MgY2FwYWNpdHkgdG8gcmVtb3ZlIHBhY2tldHMpLCB0aGVuIHRoZW9yZXRpY2FsbHkKK3RoZXJlIHdpbGwgb25seSBiZSBvbmUgcnggaW50ZXJydXB0IGZvciBhbGwgcGFja2V0cyBkdXJpbmcgYSBnaXZlbiBwYWNrZXRzdG9ybS4KK1VuZGVyIGxvdyBsb2FkLCB3ZSBtaWdodCBoYXZlIGEgc2luZ2xlIGludGVycnVwdCBwZXIgcGFja2V0LgorRkMgc2hvdWxkIGJlIHByb2dyYW1tZWQgdG8gYXBwbHkgaW4gdGhlIGNhc2Ugd2hlbiB0aGUgc3lzdGVtIGNhbnQgcHVsbCBvdXQKK3BhY2tldHMgZmFzdCBlbm91Z2ggaS5lIHNlbmQgYSBwYXVzZSBvbmx5IHdoZW4geW91IHJ1biBvdXQgb2YgcnggYnVmZmVycy4KK05vdGUgRkMgaW4gaXRzZWxmIGlzIGEgZ29vZCBzb2x1dGlvbiBidXQgd2UgaGF2ZSBmb3VuZCBpdCB0byBub3QgYmUKK211Y2ggb2YgYSBjb21tb2RpdHkgZmVhdHVyZSAoYm90aCBpbiBOSUNzIGFuZCBzd2l0Y2hlcykgYW5kIGhlbmNlIGZhbGxzCit1bmRlciB0aGUgc2FtZSBjYXRlZ29yeSBhcyB1c2luZyBOSUMgYmFzZWQgbWl0aWdhdGlvbi4gQWxzbyBleHBlcmltZW50cworaW5kaWNhdGUgdGhhdCBpdHMgbXVjaCBoYXJkZXIgdG8gcmVzb2x2ZSB0aGUgcmVzb3VyY2UgYWxsb2NhdGlvbgoraXNzdWUgKGFrYSBsYXp5IHJlY2VpdmluZyB0aGF0IE5BUEkgb2ZmZXJzKSBhbmQgaGVuY2UgcXVhbnRpZnkgaXRzIHVzZWZ1bGxuZXNzCitwcm92ZWQgaGFyZGVyLiBJbiBhbnkgY2FzZSwgRkMgd29ya3MgZXZlbiBiZXR0ZXIgd2l0aCBOQVBJIGJ1dCBpcyBub3QKK25lY2Vzc2FyeS4KKworCitBUFBFTkRJWCAyOiB0aGUgInJvdHRpbmcgcGFja2V0IiByYWNlLXdpbmRvdyBhdm9pZGFuY2Ugc2NoZW1lIAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIGFzc29jaWF0aW9ucyBzZWVuIGhlcmUKKworMSkgc3RhdHVzL2ludCB3aGljaCBob25vcnMgbGV2ZWwgdHJpZ2dlcmVkIElSUQorCitJZiBhIHN0YXR1cyBiaXQgZm9yIHJlY2VpdmUgb3Igcnhub2J1ZmYgaXMgc2V0IGFuZCB0aGUgY29ycmVzcG9uZGluZyAKK2ludGVycnVwdC1lbmFibGUgYml0IGlzIG5vdCBvbiwgdGhlbiBubyBpbnRlcnJ1cHRzIHdpbGwgYmUgZ2VuZXJhdGVkLiBIb3dldmVyLCAKK2FzIHNvb24gYXMgdGhlICJpbnRlcnJ1cHQtZW5hYmxlIiBiaXQgaXMgdW5tYXNrZWQsIGFuIGltbWVkaWF0ZSBpbnRlcnJ1cHQgaXMgCitnZW5lcmF0ZWQuICBbYXNzdW1pbmcgdGhlIHN0YXR1cyBiaXQgd2FzIG5vdCB0dXJuZWQgb2ZmXS4KK0dlbmVyYWxseSB0aGUgY29uY2VwdCBvZiBsZXZlbCB0cmlnZ2VyZWQgSVJRcyBpbiBhc3NvY2lhdGlvbiB3aXRoIGEgc3RhdHVzIGFuZAoraW50ZXJydXB0LWVuYWJsZSBDU1IgcmVnaXN0ZXIgc2V0IGlzIHVzZWQgdG8gYXZvaWQgdGhlIHJhY2UuCisKK0lmIHdlIHRha2UgdGhlIGV4YW1wbGUgb2YgdGhlIHR1bGlwOgorInBlbmRpbmcgd29yayIgaXMgaW5kaWNhdGVkIGJ5IHRoZSBzdGF0dXMgYml0KENTUjUgaW4gdHVsaXApLgordGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJydXB0IGJpdCAoQ1NSNyBpbiB0dWxpcCkgbWlnaHQgYmUgdHVybmVkIG9mZiAoYnV0Cit0aGUgQ1NSNSB3aWxsIGNvbnRpbnVlIHRvIGJlIHR1cm5lZCBvbiB3aXRoIG5ldyBwYWNrZXQgYXJyaXZhbHMgZXZlbiBpZgord2UgY2xlYXIgaXQgdGhlIGZpcnN0IHRpbWUpCitWZXJ5IGltcG9ydGFudCBpcyB0aGUgZmFjdCB0aGF0IGlmIHdlIHR1cm4gb24gdGhlIGludGVycnVwdCBiaXQgb24gd2hlbgorc3RhdHVzIGlzIHNldCB0aGF0IGFuIGltbWVkaWF0ZSBpcnEgaXMgdHJpZ2dlcmVkLgorIAorSWYgd2UgY2xlYXJlZCB0aGUgcnggcmluZyBhbmQgcHJvY2xhaW1lZCB0aGVyZSB3YXMgIm5vIG1vcmUgd29yawordG8gYmUgZG9uZSIgYW5kIHRoZW4gd2VudCBvbiB0byBkbyBhIGZldyBvdGhlciB0aGluZ3M7ICB0aGVuIHdoZW4gd2UgZW5hYmxlCitpbnRlcnJ1cHRzLCB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoYXQgYSBuZXcgcGFja2V0IG1pZ2h0IHNuZWFrIGluIGR1cmluZwordGhpcyBwaGFzZS4gSXQgaGVscHMgdG8gbG9vayBhdCB0aGUgcHNldWRvIGNvZGUgZm9yIHRoZSB0dWxpcCBwb2xsCityb3V0aW5lOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgQUNLOworICAgICAgICAgICAgICAgIHdoaWxlIChyaW5nX2lzX25vdF9lbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3b3JrLXdvcmstd29yaworICAgICAgICAgICAgICAgICAgICAgICAgaWYgcXVvdGEgaXMgZXhjZWVkZWQ6IGV4aXQsIG5vIHRvdWNoaW5nIGlycSBzdGF0dXMvbWFzaworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvKiBObyBwYWNrZXRzLCBidXQgbmV3IGNhbiBhcnJpdmUgd2hpbGUgd2UgYXJlIGRvaW5nIHRoaXMqLworICAgICAgICAgICAgICAgIENTUjUgOj0gcmVhZAorICAgICAgICAgICAgICAgIGlmIChDU1I1IGlzIG5vdCBzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHNvbWV0aGluZyBhcnJpdmVzIGluIHRoaXMgbmFycm93IHdpbmRvdyBoZXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgKiAgd2hlcmUgdGhlIGNvbW1lbnRzIGFyZSA7LT4gaXJxIHdpbGwgYmUgZ2VuZXJhdGVkICovCisgICAgICAgICAgICAgICAgICAgICAgICB1bm1hc2sgaXJxczsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQgcG9sbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKHJ4X3N0YXR1c19pc19zZXQpOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NTUjUgYml0IG9mIGludGVyZXN0IGlzIG9ubHkgdGhlIHJ4IHN0YXR1cy4gCitJZiB5b3UgbG9vayBhdCB0aGUgbGFzdCBpZiBzdGF0ZW1lbnQ6IAoreW91IGp1c3QgZmluaXNoZWQgZ3JhYmJpbmcgYWxsIHRoZSBwYWNrZXRzIGZyb20gdGhlIHJ4IHJpbmcgLi4geW91IGNoZWNrIGlmCitzdGF0dXMgYml0IHNheXMgdGhlcmVzIG1vcmUgcGFja2V0cyBqdXN0IGluIC4uLiBpdCBzYXlzIG5vbmU7IHlvdSB0aGVuCitlbmFibGUgcnggaW50ZXJydXB0cyBhZ2FpbjsgaWYgYSBuZXcgcGFja2V0IGp1c3QgY2FtZSBpbiBkdXJpbmcgdGhpcyBjaGVjaywKK3dlIGFyZSBjb3VudGluZyB0aGF0IENTUjUgd2lsbCBiZSBzZXQgaW4gdGhhdCBzbWFsbCB3aW5kb3cgb2Ygb3Bwb3J0dW5pdHkKK2FuZCB0aGF0IGJ5IHJlLWVuYWJsaW5nIGludGVycnVwdHMsIHdlIHdvdWxkIGFjdHVhbGx5IHRyaWdlciBhbiBpbnRlcnJ1cHQKK3RvIHJlZ2lzdGVyIHRoZSBuZXcgcGFja2V0IGZvciBwcm9jZXNzaW5nLgorCitbVGhlIGFib3ZlIGRlc2NyaXB0aW9uIG5heSBiZSB2ZXJ5IHZlcmJvc2UsIGlmIHlvdSBoYXZlIGJldHRlciB3b3JkaW5nIAordGhhdCB3aWxsIG1ha2UgdGhpcyBtb3JlIHVuZGVyc3RhbmRhYmxlLCBwbGVhc2Ugc3VnZ2VzdCBpdC5dCisKKzIpIG5vbi1jYXBhYmxlIGhhcmR3YXJlCisKK1RoZXNlIGRvIG5vdCBnZW5lcmFsbHkgcmVzcGVjdCBsZXZlbCB0cmlnZ2VyZWQgSVJRcy4gTm9ybWFsbHksCitpcnFzIG1heSBiZSBsb3N0IHdoaWxlIGJlaW5nIG1hc2tlZCBhbmQgdGhlIG9ubHkgd2F5IHRvIGxlYXZlIHBvbGwgaXMgdG8gZG8KK2EgZG91YmxlIGNoZWNrIGZvciBuZXcgaW5wdXQgYWZ0ZXIgbmV0aWZfcnhfY29tcGxldGUoKSBpcyBpbnZva2VkCithbmQgcmUtZW5hYmxlIHBvbGxpbmcgKGFmdGVyIHNlZWluZyB0aGlzIG5ldyBpbnB1dCkuCisKK1NhbXBsZSBjb2RlOgorCistLS0tLS0tLS0KKwkuCisJLgorcmVzdGFydF9wb2xsOgorCXdoaWxlIChyaW5nX2lzX25vdF9lbXB0eSgpKSB7CisJCXdvcmstd29yay13b3JrCisJCWlmIHF1b3RhIGlzIGV4Y2VlZGVkOiBleGl0LCBub3QgdG91Y2hpbmcgaXJxIHN0YXR1cy9tYXNrCisJfQorCS4KKwkuCisJLgorCWVuYWJsZV9yeF9pbnRlcnJ1cHRzKCkKKwluZXRpZl9yeF9jb21wbGV0ZShkZXYpOworCWlmIChyaW5nX2hhc19uZXdfcGFja2V0KCkgJiYgbmV0aWZfcnhfcmVzY2hlZHVsZShkZXYsIHJlY2VpdmVkKSkgeworCQlkaXNhYmxlX3J4X2FuZF9yeG5vYnVmcygpCisJCWdvdG8gcmVzdGFydF9wb2xsCisJfSB3aGlsZSAocnhfc3RhdHVzX2lzX3NldCk7CistLS0tLS0tLS0KKwkJCitCYXNpY2FsbHkgbmV0aWZfcnhfY29tcGxldGUoKSByZW1vdmVzIHVzIGZyb20gdGhlIHBvbGwgbGlzdCwgYnV0IGJlY2F1c2UgYQorbmV3IHBhY2tldCB3aGljaCB3aWxsIG5ldmVyIGJlIGNhdWdodCBkdWUgdG8gdGhlIHBvc3NpYmlsaXR5IG9mIGEgcmFjZQorbWlnaHQgY29tZSBpbiwgd2UgYXR0ZW1wdCB0byByZS1hZGQgb3Vyc2VsdmVzIHRvIHRoZSBwb2xsIGxpc3QuIAorCisKKworCitBUFBFTkRJWCAzOiBTY2hlZHVsaW5nIGlzc3Vlcy4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQXMgc2VlbiBOQVBJIG1vdmVzIHByb2Nlc3NpbmcgdG8gc29mdGlycSBsZXZlbC4gTGludXggdXNlcyB0aGUga3NvZnRpcnFkIGFzIHRoZSAKK2dlbmVyYWwgc29sdXRpb24gdG8gc2NoZWR1bGUgc29mdGlycSdzIHRvIHJ1biBiZWZvcmUgbmV4dCBpbnRlcnJ1cHQgYW5kIGJ5IHB1dHRpbmcgCit0aGVtIHVuZGVyIHNjaGVkdWxlciBjb250cm9sLiBBbHNvIHRoaXMgcHJldmVudHMgY29uc2VjdXRpdmUgc29mdGlycSdzIGZyb20gCittb25vcG9saXplIHRoZSBDUFUuIFRoaXMgYWxzbyBoYXZlIHRoZSBlZmZlY3QgdGhhdCB0aGUgcHJpb3JpdHkgb2Yga3NvZnRpcnEgbmVlZHMgCit0byBiZSBjb25zaWRlcmVkIHdoZW4gcnVubmluZyB2ZXJ5IENQVS1pbnRlbnNpdmUgYXBwbGljYXRpb25zIGFuZCBuZXR3b3JraW5nIHRvCitnZXQgdGhlIHByb3BlciBiYWxhbmNlIG9mIHNvZnRpcnEvdXNlciBiYWxhbmNlLiBJbmNyZWFzaW5nIGtzb2Z0aXJxIHByaW9yaXR5IHRvIDAgCisoZXZlbnR1YWxseSBtb3JlKSBpcyByZXBvcnRlZCBjdXJlIHByb2JsZW1zIHdpdGggbG93IG5ldHdvcmsgcGVyZm9ybWFuY2UgYXQgaGlnaCAKK0NQVSBsb2FkLgorCitNb3N0IHVzZWQgcHJvY2Vzc2VzIGluIGEgR0lHRSByb3V0ZXI6CitVU0VSICAgICAgIFBJRCAlQ1BVICVNRU0gIFNJWkUgICBSU1MgVFRZIFNUQVQgU1RBUlQgICBUSU1FIENPTU1BTkQKK3Jvb3QgICAgICAgICAzICAwLjIgIDAuMCAgICAgMCAgICAgMCAgPyAgUldOIEF1ZyAxNSA2MDI6MDAgKGtzb2Z0aXJxZF9DUFUwKQorcm9vdCAgICAgICAyMzIgIDAuMCAgNy45IDQxNDAwIDQwODg0ICA/ICBTICAgQXVnIDE1ICA3NDoxMiBnYXRlZCAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworcmVsZXZhbnQgc2l0ZXM6Cis9PT09PT09PT09PT09PT09PT0KK2Z0cDovL3JvYnVyLnNsdS5zZS9wdWIvTGludXgvbmV0LWRldmVsb3BtZW50L05BUEkvCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RPRE86IFdyaXRlIG5ldC1za2VsZXRvbi5jIGRyaXZlci4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQXV0aG9yczoKKz09PT09PT09CitBbGV4ZXkgS3V6bmV0c292IDxrdXpuZXRAbXMyLmluci5hYy5ydT4KK0phbWFsIEhhZGkgU2FsaW0gPGhhZGlAY3liZXJ1cy5jYT4KK1JvYmVydCBPbHNzb24gPFJvYmVydC5PbHNzb25AZGF0YS5zbHUuc2U+CisKK0Fja25vd2xlZGdlbWVudHM6Cis9PT09PT09PT09PT09PT09CitQZW9wbGUgd2hvIG1hZGUgdGhpcyBkb2N1bWVudCBiZXR0ZXI6CisKK0xlbm5lcnQgQnV5dGVuaGVrIDxidXl0ZW5oQGdudS5vcmc+CitBbmRyZXcgTW9ydG9uICA8YWtwbUB6aXAuY29tLmF1PgorTWFuZnJlZCBTcHJhdWwgPG1hbmZyZWRAY29sb3JmdWxsaWZlLmNvbT4KK0RvbmFsZCBCZWNrZXIgPGJlY2tlckBzY3lsZC5jb20+CitKZWZmIEdhcnppayA8amdhcnppa0Bwb2JveC5jb20+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvUExJUC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvUExJUC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ3ZTNmNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9QTElQLnR4dApAQCAtMCwwICsxLDIxNSBAQAorUExJUDogVGhlIFBhcmFsbGVsIExpbmUgSW50ZXJuZXQgUHJvdG9jb2wgRGV2aWNlCisKK0RvbmFsZCBCZWNrZXIgKGJlY2tlckBzdXBlci5vcmcpCitJLkQuQS4gU3VwZXJjb21wdXRpbmcgUmVzZWFyY2ggQ2VudGVyLCBCb3dpZSBNRCAyMDcxNQorCitBdCBzb21lIHBvaW50IFQuIFRob3JuIHdpbGwgcHJvYmFibHkgY29udHJpYnV0ZSB0ZXh0LAorVG9tbXkgVGhvcm4gKHR0aG9ybkBkYWltaS5hYXUuZGspCisKK1BMSVAgSW50cm9kdWN0aW9uCistLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgcGFyYWxsZWwgcG9ydCBwYWNrZXQgcHVzaGVyIGZvciBOZXQvTEdYLgorVGhpcyBkZXZpY2UgaW50ZXJmYWNlIGFsbG93cyBhIHBvaW50LXRvLXBvaW50IGNvbm5lY3Rpb24gYmV0d2VlbiB0d28KK3BhcmFsbGVsIHBvcnRzIHRvIGFwcGVhciBhcyBhIElQIG5ldHdvcmsgaW50ZXJmYWNlLgorCitXaGF0IGlzIFBMSVA/Cis9PT09PT09PT09PT09CisKK1BMSVAgaXMgUGFyYWxsZWwgTGluZSBJUCwgdGhhdCBpcywgdGhlIHRyYW5zcG9ydGF0aW9uIG9mIElQIHBhY2thZ2VzCitvdmVyIGEgcGFyYWxsZWwgcG9ydC4gSW4gdGhlIGNhc2Ugb2YgYSBQQywgdGhlIG9idmlvdXMgY2hvaWNlIGlzIHRoZQorcHJpbnRlciBwb3J0LiAgUExJUCBpcyBhIG5vbi1zdGFuZGFyZCwgYnV0IFtjYW4gdXNlXSB1c2VzIHRoZSBzdGFuZGFyZAorTGFwTGluayBudWxsLXByaW50ZXIgY2FibGUgW2NhbiBhbHNvIHdvcmsgaW4gdHVyYm8gbW9kZSwgd2l0aCBhIFBMSVAKK2NhYmxlXS4gW1RoZSBwcm90b2NvbCB1c2VkIHRvIHBhY2sgSVAgcGFja2FnZXMsIGlzIGEgc2ltcGxlIG9uZQoraW5pdGlhdGVkIGJ5IENyeW53ci5dCisKK0FkdmFudGFnZXMgb2YgUExJUAorPT09PT09PT09PT09PT09PT09CisKK0l0J3MgY2hlYXAsIGl0J3MgYXZhaWxhYmxlIGV2ZXJ5d2hlcmUsIGFuZCBpdCdzIGVhc3kuCisKK1RoZSBQTElQIGNhYmxlIGlzIGFsbCB0aGF0J3MgbmVlZGVkIHRvIGNvbm5lY3QgdHdvIExpbnV4IGJveGVzLCBhbmQgaXQKK2NhbiBiZSBidWlsdCBmb3IgdmVyeSBmZXcgYnVja3MuCisKK0Nvbm5lY3RpbmcgdHdvIExpbnV4IGJveGVzIHRha2VzIG9ubHkgYSBzZWNvbmQncyBkZWNpc2lvbiBhbmQgYSBmZXcKK21pbnV0ZXMnIHdvcmssIG5vIG5lZWQgdG8gc2VhcmNoIGZvciBhIFtzdXBwb3J0ZWRdIG5ldGNhcmQuIFRoaXMgbWlnaHQKK2V2ZW4gYmUgZXNwZWNpYWxseSBpbXBvcnRhbnQgaW4gdGhlIGNhc2Ugb2Ygbm90ZWJvb2tzLCB3aGVyZSBuZXRjYXJkcworYXJlIG5vdCBlYXNpbHkgYXZhaWxhYmxlLgorCitOb3QgcmVxdWlyaW5nIGEgbmV0Y2FyZCBhbHNvIG1lYW5zIHRoYXQgYXBhcnQgZnJvbSBjb25uZWN0aW5nIHRoZQorY2FibGVzLCBldmVyeXRoaW5nIGVsc2UgaXMgc29mdHdhcmUgY29uZmlndXJhdGlvbiBbd2hpY2ggaW4gcHJpbmNpcGxlCitjb3VsZCBiZSBtYWRlIHZlcnkgZWFzeS5dCisKK0Rpc2FkdmFudGFnZXMgb2YgUExJUAorPT09PT09PT09PT09PT09PT09PT09CisKK0RvZXNuJ3Qgd29yayBvdmVyIGEgbW9kZW0sIGxpa2UgU0xJUCBhbmQgUFBQLiBMaW1pdGVkIHJhbmdlLCAxNSBtLgorQ2FuIG9ubHkgYmUgdXNlZCB0byBjb25uZWN0IHRocmVlICg/KSBMaW51eCBib3hlcy4gRG9lc24ndCBjb25uZWN0IHRvCithbiBleGlzdGluZyBFdGhlcm5ldC4gSXNuJ3Qgc3RhbmRhcmQgKG5vdCBldmVuIGRlIGZhY3RvIHN0YW5kYXJkLCBsaWtlCitTTElQKS4KKworUGVyZm9ybWFuY2UKKz09PT09PT09PT09CisKK1BMSVAgZWFzaWx5IG91dHBlcmZvcm1zIEV0aGVybmV0IGNhcmRzLi4uLih1cHMsIEkgd2FzIGRyZWFtaW5nLCBidXQKK2l0ICppcyogZ2V0dGluZyBsYXRlLiBFT0IpCisKK1BMSVAgZHJpdmVyIGRldGFpbHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIExpbnV4IFBMSVAgZHJpdmVyIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBvcmlnaW5hbCBDcnlud3IgcHJvdG9jb2wsCit0aGF0IHVzZXMgdGhlIHBhcmFsbGVsIHBvcnQgc3Vic3lzdGVtIG9mIHRoZSBrZXJuZWwgaW4gb3JkZXIgdG8gcHJvcGVybHkKK3NoYXJlIHBhcmFsbGVsIHBvcnRzIGJldHdlZW4gUExJUCBhbmQgb3RoZXIgc2VydmljZXMuCisKK0lSUXMgYW5kIHRyaWdnZXIgdGltZW91dHMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworV2hlbiBhIHBhcmFsbGVsIHBvcnQgdXNlZCBmb3IgYSBQTElQIGRyaXZlciBoYXMgYW4gSVJRIGNvbmZpZ3VyZWQgdG8gaXQsIHRoZQorUExJUCBkcml2ZXIgaXMgc2lnbmFsZWQgd2hlbmV2ZXIgZGF0YSBpcyBzZW50IHRvIGl0IHZpYSB0aGUgY2FibGUsIHN1Y2ggdGhhdAord2hlbiBubyBkYXRhIGlzIGF2YWlsYWJsZSwgdGhlIGRyaXZlciBpc24ndCBiZWluZyB1c2VkLgorCitIb3dldmVyLCBvbiBzb21lIG1hY2hpbmVzIGl0IGlzIGhhcmQsIGlmIG5vdCBpbXBvc3NpYmxlLCB0byBjb25maWd1cmUgYW4gSVJRCit0byBhIGNlcnRhaW4gcGFyYWxsZWwgcG9ydCwgbWFpbmx5IGJlY2F1c2UgaXQgaXMgdXNlZCBieSBzb21lIG90aGVyIGRldmljZS4KK09uIHRoZXNlIG1hY2hpbmVzLCB0aGUgUExJUCBkcml2ZXIgY2FuIGJlIHVzZWQgaW4gSVJRLWxlc3MgbW9kZSwgd2hlcmUKK3RoZSBQTElQIGRyaXZlciB3b3VsZCBjb25zdGFudGx5IHBvbGwgdGhlIHBhcmFsbGVsIHBvcnQgZm9yIGRhdGEgd2FpdGluZywKK2FuZCBpZiBzdWNoIGRhdGEgaXMgYXZhaWxhYmxlLCBwcm9jZXNzIGl0LiBUaGlzIG1vZGUgaXMgbGVzcyBlZmZpY2llbnQgdGhhbgordGhlIElSUSBtb2RlLCBiZWNhdXNlIHRoZSBkcml2ZXIgaGFzIHRvIGNoZWNrIHRoZSBwYXJhbGxlbCBwb3J0IG1hbnkgdGltZXMKK3BlciBzZWNvbmQsIGV2ZW4gd2hlbiBubyBkYXRhIGF0IGFsbCBpcyBzZW50LiBTb21lIHJvdWdoIG1lYXN1cmVtZW50cworaW5kaWNhdGUgdGhhdCB0aGVyZSBpc24ndCBhIG5vdGljZWFibGUgcGVyZm9ybWFuY2UgZHJvcCB3aGVuIHVzaW5nIElSUS1sZXNzCittb2RlIGFzIGNvbXBhcmVkIHRvIElSUSBtb2RlIGFzIGZhciBhcyB0aGUgZGF0YSB0cmFuc2ZlciBzcGVlZCBpcyBpbnZvbHZlZC4KK1RoZXJlIGlzIGEgcGVyZm9ybWFuY2UgZHJvcCBvbiB0aGUgbWFjaGluZSBob3N0aW5nIHRoZSBkcml2ZXIuCisKK1doZW4gdGhlIFBMSVAgZHJpdmVyIGlzIHVzZWQgaW4gSVJRIG1vZGUsIHRoZSB0aW1lb3V0IHVzZWQgZm9yIHRyaWdnZXJpbmcgYQorZGF0YSB0cmFuc2ZlciAodGhlIG1heGltYWwgdGltZSB0aGUgUExJUCBkcml2ZXIgd291bGQgYWxsb3cgdGhlIG90aGVyIHNpZGUKK2JlZm9yZSBhbm5vdW5jaW5nIGEgdGltZW91dCwgd2hlbiB0cnlpbmcgdG8gaGFuZHNoYWtlIGEgdHJhbnNmZXIgb2Ygc29tZQorZGF0YSkgaXMsIGJ5IGRlZmF1bHQsIDUwMHVzZWMuIEFzIElSUSBkZWxpdmVyeSBpcyBtb3JlIG9yIGxlc3MgaW1tZWRpYXRlLAordGhpcyB0aW1lb3V0IGlzIHF1aXRlIHN1ZmZpY2llbnQuIAorCitXaGVuIGluIElSUS1sZXNzIG1vZGUsIHRoZSBQTElQIGRyaXZlciBwb2xscyB0aGUgcGFyYWxsZWwgcG9ydCBIWiB0aW1lcworcGVyIHNlY29uZCAod2hlcmUgSFogaXMgdHlwaWNhbGx5IDEwMCBvbiBtb3N0IHBsYXRmb3JtcywgYW5kIDEwMjQgb24gYW4KK0FscGhhLCBhcyBvZiB0aGlzIHdyaXRpbmcpLiBCZXR3ZWVuIHR3byBzdWNoIHBvbGxzLCB0aGVyZSBhcmUgMTBeNi9IWiB1c2Vjcy4KK09uIGFuIGkzODYsIGZvciBleGFtcGxlLCAxMF42LzEwMCA9IDEwMDAwdXNlYy4gSXQgaXMgZWFzeSB0byBzZWUgdGhhdCBpdCBpcworcXVpdGUgcG9zc2libGUgZm9yIHRoZSB0cmlnZ2VyIHRpbWVvdXQgdG8gZXhwaXJlIGJldHdlZW4gdHdvIHN1Y2ggcG9sbHMsIGFzCit0aGUgdGltZW91dCBpcyBvbmx5IDUwMHVzZWMgbG9uZy4gQXMgYSByZXN1bHQsIGl0IGlzIHJlcXVpcmVkIHRvIGNoYW5nZSB0aGUKK3RyaWdnZXIgdGltZW91dCBvbiB0aGUgKm90aGVyKiBzaWRlIG9mIGEgUExJUCBjb25uZWN0aW9uLCB0byBhYm91dAorMTBeNi9IWiB1c2Vjcy4gSWYgYm90aCBzaWRlcyBvZiBhIFBMSVAgY29ubmVjdGlvbiBhcmUgdXNlZCBpbiBJUlEtbGVzcyBtb2RlLAordGhpcyB0aW1lb3V0IGlzIHJlcXVpcmVkIG9uIGJvdGggc2lkZXMuCisKK0l0IGFwcGVhcnMgdGhhdCBpbiBwcmFjdGljZSwgdGhlIHRyaWdnZXIgdGltZW91dCBjYW4gYmUgc2hvcnRlciB0aGFuIGluIHRoZQorYWJvdmUgY2FsY3VsYXRpb24uIEl0IGlzbid0IGFuIGltcG9ydGFudCBpc3N1ZSwgdW5sZXNzIHRoZSB3aXJlIGlzIGZhdWx0eSwKK2luIHdoaWNoIGNhc2UgYSBsb25nIHRpbWVvdXQgd291bGQgc3RhbGwgdGhlIG1hY2hpbmUgd2hlbiwgZm9yIHdoYXRldmVyCityZWFzb24sIGJpdHMgYXJlIGRyb3BwZWQuCisKK0EgdXRpbGl0eSB0aGF0IGNhbiBwZXJmb3JtIHRoaXMgY2hhbmdlIGluIExpbnV4IGlzIHBsaXBjb25maWcsIHdoaWNoIGlzIHBhcnQKK29mIHRoZSBuZXQtdG9vbHMgcGFja2FnZSAoaXRzIGxvY2F0aW9uIGNhbiBiZSBmb3VuZCBpbiB0aGUKK0RvY3VtZW50YXRpb24vQ2hhbmdlcyBmaWxlKS4gQW4gZXhhbXBsZSBjb21tYW5kIHdvdWxkIGJlCisncGxpcGNvbmZpZyBwbGlwWCB0cmlnZ2VyIDEwMDAwJywgd2hlcmUgcGxpcFggaXMgdGhlIGFwcHJvcHJpYXRlCitQTElQIGRldmljZS4KKworUExJUCBoYXJkd2FyZSBpbnRlcmNvbm5lY3Rpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1BMSVAgdXNlcyBzZXZlcmFsIGRpZmZlcmVudCBkYXRhIHRyYW5zZmVyIG1ldGhvZHMuICBUaGUgZmlyc3QgKGFuZCB0aGUKK29ubHkgb25lIGltcGxlbWVudGVkIGluIHRoZSBlYXJseSB2ZXJzaW9uIG9mIHRoZSBjb2RlKSB1c2VzIGEgc3RhbmRhcmQKK3ByaW50ZXIgIm51bGwiIGNhYmxlIHRvIHRyYW5zZmVyIGRhdGEgZm91ciBiaXRzIGF0IGEgdGltZSB1c2luZworZGF0YSBiaXQgb3V0cHV0cyBjb25uZWN0ZWQgdG8gc3RhdHVzIGJpdCBpbnB1dHMuCisKK1RoZSBzZWNvbmQgZGF0YSB0cmFuc2ZlciBtZXRob2QgcmVsaWVzIG9uIGJvdGggbWFjaGluZXMgaGF2aW5nCitiaS1kaXJlY3Rpb25hbCBwYXJhbGxlbCBwb3J0cywgcmF0aGVyIHRoYW4gb3V0cHV0LW9ubHkgYGBwcmludGVyJycKK3BvcnRzLiAgVGhpcyBhbGxvd3MgYnl0ZS13aWRlIHRyYW5zZmVycyBhbmQgYXZvaWRzIHJlY29uc3RydWN0aW5nCituaWJibGVzIGludG8gYnl0ZXMsIGxlYWRpbmcgdG8gbXVjaCBmYXN0ZXIgdHJhbnNmZXJzLgorCitQYXJhbGxlbCBUcmFuc2ZlciBNb2RlIDAgQ2FibGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgY2FibGUgZm9yIHRoZSBmaXJzdCB0cmFuc2ZlciBtb2RlIGlzIGEgc3RhbmRhcmQKK3ByaW50ZXIgIm51bGwiIGNhYmxlIHdoaWNoIHRyYW5zZmVycyBkYXRhIGZvdXIgYml0cyBhdCBhIHRpbWUgdXNpbmcKK2RhdGEgYml0IG91dHB1dHMgb2YgdGhlIGZpcnN0IHBvcnQgKG1hY2hpbmUgVCkgY29ubmVjdGVkIHRvIHRoZQorc3RhdHVzIGJpdCBpbnB1dHMgb2YgdGhlIHNlY29uZCBwb3J0IChtYWNoaW5lIFIpLiAgVGhlcmUgYXJlIGZpdmUKK3N0YXR1cyBpbnB1dHMsIGFuZCB0aGV5IGFyZSB1c2VkIGFzIGZvdXIgZGF0YSBpbnB1dHMgYW5kIGEgY2xvY2sgKGRhdGEKK3N0cm9iZSkgaW5wdXQsIGFycmFuZ2VkIHNvIHRoYXQgdGhlIGRhdGEgaW5wdXQgYml0cyBhcHBlYXIgYXMgY29udGlndW91cworYml0cyB3aXRoIHN0YW5kYXJkIHN0YXR1cyByZWdpc3RlciBpbXBsZW1lbnRhdGlvbi4KKworQSBjYWJsZSB0aGF0IGltcGxlbWVudHMgdGhpcyBwcm90b2NvbCBpcyBhdmFpbGFibGUgY29tbWVyY2lhbGx5IGFzIGEKKyJOdWxsIFByaW50ZXIiIG9yICJUdXJibyBMYXBsaW5rIiBjYWJsZS4gIEl0IGNhbiBiZSBjb25zdHJ1Y3RlZCB3aXRoCit0d28gREItMjUgbWFsZSBjb25uZWN0b3JzIHN5bW1ldHJpY2FsbHkgY29ubmVjdGVkIGFzIGZvbGxvd3M6CisKKyAgICBTVFJPQkUgb3V0cHV0CTEqCisgICAgRDAtPkVSUk9SCTIgLSAxNQkJMTUgLSAyCisgICAgRDEtPlNMQ1QJMyAtIDEzCQkxMyAtIDMKKyAgICBEMi0+UEFQT1VUCTQgLSAxMgkJMTIgLSA0CisgICAgRDMtPkFDSwk1IC0gMTAJCTEwIC0gNQorICAgIEQ0LT5CVVNZCTYgLSAxMQkJMTEgLSA2CisgICAgRDUsRDYsRDcgYXJlICAgNyosIDgqLCA5KgorICAgIEFVVE9GRCBvdXRwdXQgMTQqCisgICAgSU5JVCAgIG91dHB1dCAxNioKKyAgICBTTENUSU4JMTcgLSAxNworICAgIGV4dHJhIGdyb3VuZHMgYXJlIDE4KiwxOSosMjAqLDIxKiwyMiosMjMqLDI0KgorICAgIEdST1VORAkyNSAtIDI1CisqIERvIG5vdCBjb25uZWN0IHRoZXNlIHBpbnMgb24gZWl0aGVyIGVuZAorCitJZiB0aGUgY2FibGUgeW91IGFyZSB1c2luZyBoYXMgYSBtZXRhbGxpYyBzaGllbGQgaXQgc2hvdWxkIGJlCitjb25uZWN0ZWQgdG8gdGhlIG1ldGFsbGljIERCLTI1IHNoZWxsIGF0IG9uZSBlbmQgb25seS4KKworUGFyYWxsZWwgVHJhbnNmZXIgTW9kZSAxCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIHNlY29uZCBkYXRhIHRyYW5zZmVyIG1ldGhvZCByZWxpZXMgb24gYm90aCBtYWNoaW5lcyBoYXZpbmcKK2JpLWRpcmVjdGlvbmFsIHBhcmFsbGVsIHBvcnRzLCByYXRoZXIgdGhhbiBvdXRwdXQtb25seSBgYHByaW50ZXInJworcG9ydHMuICBUaGlzIGFsbG93cyBieXRlLXdpZGUgdHJhbnNmZXJzLCBhbmQgYXZvaWRzIHJlY29uc3RydWN0aW5nCituaWJibGVzIGludG8gYnl0ZXMuICBUaGlzIGNhYmxlIHNob3VsZCBub3QgYmUgdXNlZCBvbiB1bmlkaXJlY3Rpb25hbAorYGBwcmludGVyJycgKGFzIG9wcG9zZWQgdG8gYGBwYXJhbGxlbCcnKSBwb3J0cyBvciB3aGVuIHRoZSBtYWNoaW5lCitpc24ndCBjb25maWd1cmVkIGZvciBQTElQLCBhcyBpdCB3aWxsIHJlc3VsdCBpbiBvdXRwdXQgZHJpdmVyCitjb25mbGljdHMgYW5kIHRoZSAodW5saWtlbHkpIHBvc3NpYmlsaXR5IG9mIGRhbWFnZS4KKworVGhlIGNhYmxlIGZvciB0aGlzIHRyYW5zZmVyIG1vZGUgc2hvdWxkIGJlIGNvbnN0cnVjdGVkIGFzIGZvbGxvd3M6CisKKyAgICBTVFJPQkUtPkJVU1kgMSAtIDExCisgICAgRDAtPkQwCTIgLSAyCisgICAgRDEtPkQxCTMgLSAzCisgICAgRDItPkQyCTQgLSA0CisgICAgRDMtPkQzCTUgLSA1CisgICAgRDQtPkQ0CTYgLSA2CisgICAgRDUtPkQ1CTcgLSA3CisgICAgRDYtPkQ2CTggLSA4CisgICAgRDctPkQ3CTkgLSA5CisgICAgSU5JVCAtPiBBQ0sgIDE2IC0gMTAKKyAgICBBVVRPRkQtPlBBUE9VVCAxNCAtIDEyCisgICAgU0xDVC0+U0xDVElOIDEzIC0gMTcKKyAgICBHTkQtPkVSUk9SCTE4IC0gMTUKKyAgICBleHRyYSBncm91bmRzIGFyZSAxOSosMjAqLDIxKiwyMiosMjMqLDI0KgorICAgIEdST1VORAkyNSAtIDI1CisqIERvIG5vdCBjb25uZWN0IHRoZXNlIHBpbnMgb24gZWl0aGVyIGVuZAorCitPbmNlIGFnYWluLCBpZiB0aGUgY2FibGUgeW91IGFyZSB1c2luZyBoYXMgYSBtZXRhbGxpYyBzaGllbGQgaXQgc2hvdWxkCitiZSBjb25uZWN0ZWQgdG8gdGhlIG1ldGFsbGljIERCLTI1IHNoZWxsIGF0IG9uZSBlbmQgb25seS4KKworUExJUCBNb2RlIDAgdHJhbnNmZXIgcHJvdG9jb2wKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBQTElQIGRyaXZlciBpcyBjb21wYXRpYmxlIHdpdGggdGhlICJDcnlud3IiIHBhcmFsbGVsIHBvcnQgdHJhbnNmZXIKK3N0YW5kYXJkIGluIE1vZGUgMC4gIFRoYXQgc3RhbmRhcmQgc3BlY2lmaWVzIHRoZSBmb2xsb3dpbmcgcHJvdG9jb2w6CisKKyAgIHNlbmQgaGVhZGVyIG5pYmJsZSAnMHg4JworICAgY291bnQtbG93IG9jdGV0CisgICBjb3VudC1oaWdoIG9jdGV0CisgICAuLi4gZGF0YSBvY3RldHMKKyAgIGNoZWNrc3VtIG9jdGV0CisKK0VhY2ggb2N0ZXQgaXMgc2VudCBhcworCTx3YWl0IGZvciByeC4gJzB4MT8nPgk8c2VuZCAweDEwKyhvY3RldCYweDBGKT4KKwk8d2FpdCBmb3IgcnguICcweDA/Jz4JPHNlbmQgMHgwMCsoKG9jdGV0Pj40KSYweDBGKT4KKworVG8gc3RhcnQgYSB0cmFuc2ZlciB0aGUgdHJhbnNtaXR0aW5nIG1hY2hpbmUgb3V0cHV0cyBhIG5pYmJsZSAweDA4LgorVGhhdCByYWlzZXMgdGhlIEFDSyBsaW5lLCB0cmlnZ2VyaW5nIGFuIGludGVycnVwdCBpbiB0aGUgcmVjZWl2aW5nCittYWNoaW5lLiAgVGhlIHJlY2VpdmluZyBtYWNoaW5lIGRpc2FibGVzIGludGVycnVwdHMgYW5kIHJhaXNlcyBpdHMgb3duIEFDSworbGluZS4gCisKK1Jlc3RhdGVkOgorCisoT1VUIGlzIGJpdCAwLTQsIE9VVC5qIGlzIGJpdCBqIGZyb20gT1VULiBJTiBsaWtld2lzZSkKK1NlbmRfQnl0ZToKKyAgIE9VVCA6PSBsb3cgbmliYmxlLCBPVVQuNCA6PSAxCisgICBXQUlUIEZPUiBJTi40ID0gMQorICAgT1VUIDo9IGhpZ2ggbmliYmxlLCBPVVQuNCA6PSAwCisgICBXQUlUIEZPUiBJTi40ID0gMApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1JFQURNRS5zYjEwMDAgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvUkVBRE1FLnNiMTAwMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODJkNDI1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1JFQURNRS5zYjEwMDAKQEAgLTAsMCArMSwyMDcgQEAKK3NiMTAwMCBpcyBhIG1vZHVsZSBuZXR3b3JrIGRldmljZSBkcml2ZXIgZm9yIHRoZSBHZW5lcmFsIEluc3RydW1lbnQgKGFsc28ga25vd24KK2FzIE5leHRMZXZlbCkgU1VSRmJvYXJkMTAwMCBpbnRlcm5hbCBjYWJsZSBtb2RlbSBib2FyZC4gIFRoaXMgaXMgYW4gSVNBIGNhcmQKK3doaWNoIGlzIHVzZWQgYnkgYSBudW1iZXIgb2YgY2FibGUgVFYgY29tcGFuaWVzIHRvIHByb3ZpZGUgY2FibGUgbW9kZW0gYWNjZXNzLgorSXQncyBhIG9uZS13YXkgZG93bnN0cmVhbS1vbmx5IGNhYmxlIG1vZGVtLCBtZWFuaW5nIHRoYXQgeW91ciB1cHN0cmVhbSBuZXQgbGluaworaXMgcHJvdmlkZWQgYnkgeW91ciByZWd1bGFyIHBob25lIG1vZGVtLgorCitUaGlzIGRyaXZlciB3YXMgd3JpdHRlbiBieSBGcmFuY28gVmVudHVyaSA8ZnZlbnR1cmlAbWVkaWFvbmUubmV0Pi4gIEhlIGRlc2VydmVzCithIGdyZWF0IGRlYWwgb2YgdGhhbmtzIGZvciB0aGlzIHdvbmRlcmZ1bCBwaWVjZSBvZiBjb2RlIQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTdXBwb3J0IGZvciB0aGlzIGRldmljZSBpcyBub3cgYSBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBMaW51eCBrZXJuZWwuICBUaGUKK2RyaXZlciBzb3VyY2UgY29kZSBmaWxlIGlzIGRyaXZlcnMvbmV0L3NiMTAwMC5jLiAgSW4gYWRkaXRpb24gdG8gdGhpcworeW91IHdpbGwgbmVlZDoKKworMS4pIFRoZSAiY21jb25maWciIHByb2dyYW0uICBUaGlzIGlzIGEgdXRpbGl0eSB3aGljaCBzdXBwbGVtZW50cyAiaWZjb25maWciCit0byBjb25maWd1cmUgdGhlIGNhYmxlIG1vZGVtIGFuZCBuZXR3b3JrIGludGVyZmFjZSAodXN1YWxseSBjYWxsZWQgImNtMCIpOworYW5kCisKKzIuKSBTZXZlcmFsIFBQUCBzY3JpcHRzIHdoaWNoIGxpdmUgaW4gL2V0Yy9wcHAgdG8gbWFrZSBjb25uZWN0aW5nIHZpYSB5b3VyCitjYWJsZSBtb2RlbSBlYXN5LgorCisgICBUaGVzZSB1dGlsaXRpZXMgY2FuIGJlIG9idGFpbmVkIGZyb206CisKKyAgICAgIGh0dHA6Ly93d3cuamFja3NvbnZpbGxlLm5ldC9+ZnZlbnR1cmkvCisKKyAgIGluIEZyYW5jbydzIG9yaWdpbmFsIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGlvbiAudGFyLmd6IGZpbGUuICBTdXBwb3J0IGZvcgorICAgdGhlIHNiMTAwMCBkcml2ZXIgY2FuIGJlIGZvdW5kIGF0OgorCisgICAgICBodHRwOi8vaG9tZS5hZGVscGhpYS5uZXQvfnNpZ2xlcmNtL3NiMTAwMC5odG1sCisgICAgICBodHRwOi8vbGludXhwb3dlci5jeC9+Y2FibGUvCisKKyAgIGFsb25nIHdpdGggdGhlc2UgdXRpbGl0aWVzLgorCiszLikgVGhlIHN0YW5kYXJkIGlzYXBucCB0b29scy4gIFRoZXNlIGFyZSBuZWNlc3NhcnkgdG8gY29uZmlndXJlIHlvdXIgU0IxMDAwCitjYXJkIGF0IGJvb3QgdGltZSAob3IgYWZ0ZXJ3YXJkcyBieSBoYW5kKSBzaW5jZSBpdCdzIGEgUG5QIGNhcmQuCisKKyAgIElmIHlvdSBkb24ndCBoYXZlIHRoZXNlIGluc3RhbGxlZCBhcyBhIHN0YW5kYXJkIHBhcnQgb2YgeW91ciBMaW51eAorICAgZGlzdHJpYnV0aW9uLCB5b3UgY2FuIGZpbmQgdGhlbSBhdDoKKworICAgICAgaHR0cDovL3d3dy5yb2VzdG9jay5kZW1vbi5jby51ay9pc2FwbnB0b29scy8KKworICAgb3IgY2hlY2sgeW91ciBMaW51eCBkaXN0cmlidXRpb24gYmluYXJ5IENEIG9yIHRoZWlyIHdlYiBzaXRlLiAgRm9yIGhlbHAgd2l0aAorICAgaXNhcG5wLCBwbnBkdW1wLCBvciAvZXRjL2lzYXBucC5jb25mLCBnbyB0bzoKKworICAgICAgaHR0cDovL3d3dy5yb2VzdG9jay5kZW1vbi5jby51ay9pc2FwbnB0b29scy9pc2FwbnBmYXEuaHRtbAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyBtYWtlIHRoZSBTQjEwMDAgY2FyZCB3b3JrLCBmb2xsb3cgdGhlc2Ugc3RlcHM6CisKKzEuKSBSdW4gYG1ha2UgY29uZmlnJywgb3IgYG1ha2UgbWVudWNvbmZpZycsIG9yIGBtYWtlIHhjb25maWcnLCB3aGljaGV2ZXIKK3lvdSBwcmVmZXIsIGluIHRoZSB0b3Aga2VybmVsIHRyZWUgZGlyZWN0b3J5IHRvIHNldCB1cCB5b3VyIGtlcm5lbAorY29uZmlndXJhdGlvbi4gIE1ha2Ugc3VyZSB0byBzYXkgIlkiIHRvICJQcm9tcHQgZm9yIGRldmVsb3BtZW50IGRyaXZlcnMiCithbmQgdG8gc2F5ICJNIiB0byB0aGUgc2IxMDAwIGRyaXZlci4gIEFsc28gc2F5ICJZIiBvciAiTSIgdG8gYWxsIHRoZSBzdGFuZGFyZAorbmV0d29ya2luZyBxdWVzdGlvbnMgdG8gZ2V0IFRDUC9JUCBhbmQgUFBQIG5ldHdvcmtpbmcgc3VwcG9ydC4KKworMi4pICpCRUZPUkUqIHlvdSBidWlsZCB0aGUga2VybmVsLCBlZGl0IGRyaXZlcnMvbmV0L3NiMTAwMC5jLiAgTWFrZSBzdXJlCit0byByZWRlZmluZSB0aGUgdmFsdWUgb2YgUkVBRF9EQVRBX1BPUlQgdG8gbWF0Y2ggdGhlIEkvTyBhZGRyZXNzIHVzZWQKK2J5IGlzYXBucCB0byBhY2Nlc3MgeW91ciBQblAgY2FyZHMuICBUaGlzIGlzIHRoZSB2YWx1ZSBvZiBSRUFEUE9SVCBpbgorL2V0Yy9pc2FwbnAuY29uZiBvciBnaXZlbiBieSB0aGUgb3V0cHV0IG9mIHBucGR1bXAuCisKKzMuKSBCdWlsZCBhbmQgaW5zdGFsbCB0aGUga2VybmVsIGFuZCBtb2R1bGVzIGFzIHVzdWFsLgorCis0LikgQm9vdCB5b3VyIG5ldyBrZXJuZWwgZm9sbG93aW5nIHRoZSB1c3VhbCBwcm9jZWR1cmVzLgorCis1LikgU2V0IHVwIHRvIGNvbmZpZ3VyZSB0aGUgbmV3IFNCMTAwMCBQblAgY2FyZCBieSBjYXB0dXJpbmcgdGhlIG91dHB1dAorb2YgInBucGR1bXAiIHRvIGEgZmlsZSBhbmQgZWRpdGluZyB0aGlzIGZpbGUgdG8gc2V0IHRoZSBjb3JyZWN0IEkvTyBwb3J0cywKK0lSUSwgYW5kIERNQSBzZXR0aW5ncyBmb3IgYWxsIHlvdXIgUG5QIGNhcmRzLiAgTWFrZSBzdXJlIG5vbmUgb2YgdGhlIHNldHRpbmdzCitjb25mbGljdCB3aXRoIG9uZSBhbm90aGVyLiAgVGhlbiB0ZXN0IHRoaXMgY29uZmlndXJhdGlvbiBieSBydW5uaW5nIHRoZQorImlzYXBucCIgY29tbWFuZCB3aXRoIHlvdXIgbmV3IGNvbmZpZyBmaWxlIGFzIHRoZSBpbnB1dC4gIENoZWNrIGZvcgorZXJyb3JzIGFuZCBmaXggYXMgbmVjZXNzYXJ5LiAgKEFzIGFuIGFzaWRlLCBJIHVzZSBJL08gcG9ydHMgMHgxMTAgYW5kCisweDMxMCBhbmQgSVJRIDExIGZvciBteSBTQjEwMDAgY2FyZCBhbmQgdGhlc2Ugd29yayB3ZWxsIGZvciBtZS4gIFlNTVYuKQorVGhlbiBzYXZlIHRoZSBmaW5pc2hlZCBjb25maWcgZmlsZSBhcyAvZXRjL2lzYXBucC5jb25mIGZvciBwcm9wZXIgY29uZmlndXJhdGlvbgorb24gc3Vic2VxdWVudCByZWJvb3RzLgorCis2LikgRG93bmxvYWQgdGhlIG9yaWdpbmFsIGZpbGUgc2IxMDAwLTEuMS4yLnRhci5neiBmcm9tIEZyYW5jbydzIHNpdGUgb3Igb25lIG9mCit0aGUgb3RoZXJzIHJlZmVyZW5jZWQgYWJvdmUuICBBcyByb290LCB1bnBhY2sgaXQgaW50byBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgYW5kCitkbyBhIGBtYWtlIGNtY29uZmlnJyBhbmQgdGhlbiBgaW5zdGFsbCAtYyBjbWNvbmZpZyAvdXNyL2xvY2FsL3NiaW4nLiAgRG9uJ3QgZG8KK2BtYWtlIGluc3RhbGwnIGJlY2F1c2UgaXQgZXhwZWN0cyB0byBmaW5kIGFsbCB0aGUgdXRpbGl0aWVzIGJ1aWx0IGFuZCByZWFkeSBmb3IKK2luc3RhbGxhdGlvbiwgbm90IGp1c3QgY21jb25maWcuCisKKzcuKSBBcyByb290LCBjb3B5IGFsbCB0aGUgZmlsZXMgdW5kZXIgdGhlIHBwcC8gc3ViZGlyZWN0b3J5IGluIEZyYW5jbydzCit0YXIgZmlsZSBpbnRvIC9ldGMvcHBwLCBiZWluZyBjYXJlZnVsIG5vdCB0byBvdmVyd3JpdGUgYW55IGZpbGVzIHRoYXQgYXJlCithbHJlYWR5IGluIHRoZXJlLiAgVGhlbiBtb2RpZnkgcHBwQGdpLW9uIHRvIHNldCB0aGUgY29ycmVjdCBsb2dpbiBuYW1lLAorcGhvbmUgbnVtYmVyLCBhbmQgZnJlcXVlbmN5IGZvciB0aGUgY2FibGUgbW9kZW0uICBBbHNvIGVkaXQgcGFwLXNlY3JldHMKK3RvIHNwZWNpZnkgeW91ciBsb2dpbiBuYW1lIGFuZCBwYXNzd29yZCBhbmQgYW55IHNpdGUtc3BlY2lmaWMgaW5mb3JtYXRpb24KK3lvdSBuZWVkLgorCis4LikgQmUgc3VyZSB0byBtb2RpZnkgL2V0Yy9wcHAvZmlyZXdhbGwgdG8gdXNlIGlwY2hhaW5zIGluc3RlYWQgb2YKK3RoZSBvbGRlciBpcGZ3YWRtIGNvbW1hbmRzIGZyb20gdGhlIDIuMC54IGtlcm5lbHMuICBUaGVyZSdzIGEgbmVhdCB1dGlsaXR5IHRvCitjb252ZXJ0IGlwZndhZG0gY29tbWFuZHMgdG8gaXBjaGFpbnMgY29tbWFuZHM6CisKKyAgIGh0dHA6Ly91c2Vycy5kaHAuY29tL353aGlzcGVyL2lwZndhZG0yaXBjaGFpbnMvCisKK1lvdSBtYXkgYWxzbyB3aXNoIHRvIG1vZGlmeSB0aGUgZmlyZXdhbGwgc2NyaXB0IHRvIGltcGxlbWVudCBhIGRpZmZlcmVudAorZmlyZXdhbGxpbmcgc2NoZW1lLgorCis5LikgU3RhcnQgdGhlIFBQUCBjb25uZWN0aW9uIHZpYSB0aGUgc2NyaXB0IC9ldGMvcHBwL3BwcEBnaS1vbi4gIFlvdSBtdXN0IGJlCityb290IHRvIGRvIHRoaXMuICBJdCdzIGJldHRlciB0byB1c2UgYSB1dGlsaXR5IGxpa2Ugc3VkbyB0byBleGVjdXRlCitmcmVxdWVudGx5IHVzZWQgY29tbWFuZHMgbGlrZSB0aGlzIHdpdGggcm9vdCBwZXJtaXNzaW9ucyBpZiBwb3NzaWJsZS4gIElmIHlvdQorY29ubmVjdCBzdWNjZXNzZnVsbHkgdGhlIGNhYmxlIG1vZGVtIGludGVyZmFjZSB3aWxsIGNvbWUgdXAgYW5kIHlvdSdsbCBzZWUgYQorZHJpdmVyIG1lc3NhZ2UgbGlrZSB0aGlzIGF0IHRoZSBjb25zb2xlOgorCisgICAgICAgICBjbTA6IHNiMTAwMCBhdCAoMHgxMTAsMHgzMTApLCBjc24gMSwgUy9OIDB4MmEwZDE2ZDgsIElSUSAxMS4KKyAgICAgICAgIHNiMTAwMC5jOnYxLjEuMiA2LzAxLzk4IChmdmVudHVyaUBtZWRpYW9uZS5uZXQpCisKK1RoZSAiaWZjb25maWciIGNvbW1hbmQgc2hvdWxkIHNob3cgdHdvIG5ldyBpbnRlcmZhY2VzLCBwcHAwIGFuZCBjbTAuCitUaGUgY29tbWFuZCAiY21jb25maWcgY20wIiB3aWxsIGdpdmUgeW91IGluZm9ybWF0aW9uIGFib3V0IHRoZSBjYWJsZSBtb2RlbQoraW50ZXJmYWNlLgorCisxMC4pIFRyeSBwaW5naW5nIGEgc2l0ZSB2aWEgYHBpbmcgLWMgNSB3d3cueWFob28uY29tJywgZm9yIGV4YW1wbGUuICBZb3Ugc2hvdWxkCitzZWUgcGFja2V0cyByZWNlaXZlZC4KKworMTEuKSBJZiB5b3UgY2FuJ3QgZ2V0IHNpdGUgbmFtZXMgKGxpa2Ugd3d3LnlhaG9vLmNvbSkgdG8gcmVzb2x2ZSBpbnRvCitJUCBhZGRyZXNzZXMgKGxpa2UgMjA0LjcxLjIwMC42NyksIGJlIHN1cmUgeW91ciAvZXRjL3Jlc29sdi5jb25mIGZpbGUKK2hhcyBubyBzeW50YXggZXJyb3JzIGFuZCBoYXMgdGhlIHJpZ2h0IG5hbWVzZXJ2ZXIgSVAgYWRkcmVzc2VzIGluIGl0LgorSWYgdGhpcyBkb2Vzbid0IGhlbHAsIHRyeSBzb21ldGhpbmcgbGlrZSBgcGluZyAtYyA1IDIwNC43MS4yMDAuNjcnIHRvCitzZWUgaWYgdGhlIG5ldHdvcmtpbmcgaXMgcnVubmluZyBidXQgdGhlIEROUyByZXNvbHV0aW9uIGlzIHdoZXJlIHRoZQorcHJvYmxlbSBsaWVzLgorCisxMi4pIElmIHlvdSBzdGlsbCBoYXZlIHByb2JsZW1zLCBnbyB0byB0aGUgc3VwcG9ydCB3ZWIgc2l0ZXMgbWVudGlvbmVkIGFib3ZlCithbmQgcmVhZCB0aGUgaW5mb3JtYXRpb24gYW5kIGRvY3VtZW50YXRpb24gdGhlcmUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvbW1vbiBwcm9ibGVtczoKKworMS4pIFBhY2tldHMgZ28gb3V0IG9uIHRoZSBwcHAwIGludGVyZmFjZSBidXQgZG9uJ3QgY29tZSBiYWNrIG9uIHRoZSBjbTAKK2ludGVyZmFjZS4gIEl0IGxvb2tzIGxpa2UgSSdtIGNvbm5lY3RlZCBidXQgSSBjYW4ndCBldmVuIHBpbmcgYW55CitudW1lcmljYWwgSVAgYWRkcmVzc2VzLiAgKFRoaXMgaGFwcGVucyBwcmVkb21pbmFudGx5IG9uIERlYmlhbiBzeXN0ZW1zIGR1ZQordG8gYSBkZWZhdWx0IGJvb3QtdGltZSBjb25maWd1cmF0aW9uIHNjcmlwdC4pCisKK1NvbHV0aW9uIC0tIEFzIHJvb3QgYGVjaG8gMCA+IC9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL2NtMC9ycF9maWx0ZXInIHNvIGl0CitjYW4gc2hhcmUgdGhlIHNhbWUgSVAgYWRkcmVzcyBhcyB0aGUgcHBwMCBpbnRlcmZhY2UuICBOb3RlIHRoYXQgdGhpcworY29tbWFuZCBzaG91bGQgcHJvYmFibHkgYmUgYWRkZWQgdG8gdGhlIC9ldGMvcHBwL2NhYmxlbW9kZW0gc2NyaXB0CisqcmlnaHQqYmV0d2VlbiogdGhlICIvc2Jpbi9pZmNvbmZpZyIgYW5kICIvc2Jpbi9jbWNvbmZpZyIgY29tbWFuZHMuCitZb3UgbWF5IG5lZWQgdG8gZG8gdGhpcyB0byAvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi9wcHAwL3JwX2ZpbHRlciBhcyB3ZWxsLgorSWYgeW91IGRvIHRoaXMgdG8gL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvZGVmYXVsdC9ycF9maWx0ZXIgb24gZWFjaCByZWJvb3QKKyhpbiByYy5sb2NhbCBvciBzb21lIHN1Y2gpIHRoZW4gYW55IGludGVyZmFjZXMgY2FuIHNoYXJlIHRoZSBzYW1lIElQCithZGRyZXNzZXMuCisKKzIuKSBJIGdldCAidW5yZXNvbHZlZCBzeW1ib2wiIGVycm9yIG1lc3NhZ2VzIG9uIGV4ZWN1dGluZyBgaW5zbW9kIHNiMTAwMC5vJy4KKworU29sdXRpb24gLS0gWW91IHByb2JhYmx5IGhhdmUgYSBub24tbWF0Y2hpbmcga2VybmVsIHNvdXJjZSB0cmVlIGFuZAorL3Vzci9pbmNsdWRlL2xpbnV4IGFuZCAvdXNyL2luY2x1ZGUvYXNtIGhlYWRlciBmaWxlcy4gIE1ha2Ugc3VyZSB5b3UKK2luc3RhbGwgdGhlIGNvcnJlY3QgdmVyc2lvbnMgb2YgdGhlIGhlYWRlciBmaWxlcyBpbiB0aGVzZSB0d28gZGlyZWN0b3JpZXMuCitUaGVuIHJlYnVpbGQgYW5kIHJlaW5zdGFsbCB0aGUga2VybmVsLgorCiszLikgV2hlbiBpc2FwbnAgcnVucyBpdCByZXBvcnRzIGFuIGVycm9yLCBhbmQgbXkgU0IxMDAwIGNhcmQgaXNuJ3Qgd29ya2luZy4KKworU29sdXRpb24gLS0gVGhlcmUncyBhIHByb2JsZW0gd2l0aCBsYXRlciB2ZXJzaW9ucyBvZiBpc2FwbnAgdXNpbmcgdGhlICIoQ0hFQ0spIgorb3B0aW9uIGluIHRoZSBsaW5lcyB0aGF0IGFsbG9jYXRlIHRoZSB0d28gSS9PIGFkZHJlc3NlcyBmb3IgdGhlIFNCMTAwMCBjYXJkLgorVGhpcyBmaXJzdCBwb3BwZWQgdXAgb24gUkggNi4wLiAgRGVsZXRlICIoQ0hFQ0spIiBmb3IgdGhlIFNCMTAwMCBJL08gYWRkcmVzc2VzLgorTWFrZSBzdXJlIHRoZXkgZG9uJ3QgY29uZmxpY3Qgd2l0aCBhbnkgb3RoZXIgcGllY2VzIG9mIGhhcmR3YXJlIGZpcnN0ISAgVGhlbgorcmVydW4gaXNhcG5wIGFuZCBnbyBmcm9tIHRoZXJlLgorCis0LikgSSBjYW4ndCBleGVjdXRlIHRoZSAvZXRjL3BwcC9wcHBAZ2ktb24gZmlsZS4KKworU29sdXRpb24gLS0gQXMgcm9vdCBkbyBgY2htb2QgdWcreCAvZXRjL3BwcC9wcHBAZ2ktb24nLgorCis1LikgVGhlIGZpcmV3YWxsIHNjcmlwdCBpc24ndCB3b3JraW5nICh3aXRoIDIuMi54IGFuZCBoaWdoZXIga2VybmVscykuCisKK1NvbHV0aW9uIC0tIFVzZSB0aGUgaXBmd2FkbTJpcGNoYWlucyBzY3JpcHQgcmVmZXJlbmNlZCBhYm92ZSB0byBjb252ZXJ0IHRoZQorL2V0Yy9wcHAvZmlyZXdhbGwgc2NyaXB0IGZyb20gdGhlIGRlcHJlY2F0ZWQgaXBmd2FkbSBjb21tYW5kcyB0byBpcGNoYWlucy4KKworNi4pIEknbSBnZXR0aW5nICp0b25zKiBvZiBmaXJld2FsbCBkZW55IG1lc3NhZ2VzIGluIHRoZSAvdmFyL2tlcm4ubG9nLAorL3Zhci9tZXNzYWdlcywgYW5kL29yIC92YXIvc3lzbG9nIGZpbGVzLCBhbmQgdGhleSdyZSBmaWxsaW5nIHVwIG15IC92YXIKK3BhcnRpdGlvbiEhIQorCitTb2x1dGlvbiAtLSBGaXJzdCwgdGVsbCB5b3VyIElTUCB0aGF0IHlvdSdyZSByZWNlaXZpbmcgRG9TIChEZW5pYWwgb2YgU2VydmljZSkKK2FuZC9vciBwb3J0c2Nhbm5pbmcgKFVEUCBjb25uZWN0aW9uIGF0dGVtcHRzKSBhdHRhY2tzISAgTG9vayBvdmVyIHRoZSBkZW55CittZXNzYWdlcyB0byBmaWd1cmUgb3V0IHdoYXQgdGhlIGF0dGFjayBpcyBhbmQgd2hlcmUgaXQncyBjb21pbmcgZnJvbS4gIE5leHQsCitlZGl0IC9ldGMvcHBwL2NhYmxlbW9kZW0gYW5kIG1ha2Ugc3VyZSB0aGUgIixub2Jyb2FkY2FzdCIgb3B0aW9uIGlzIHR1cm5lZCBvbgordG8gdGhlICJjbWNvbmZpZyIgY29tbWFuZCAodW5jb21tZW50IHRoYXQgbGluZSkuICBJZiB5b3UncmUgbm90IHJlY2VpdmluZyB0aGVzZQorZGVuaWVkIHBhY2tldHMgb24geW91ciBicm9hZGNhc3QgaW50ZXJmYWNlIChJUCBhZGRyZXNzIHh4eC55eXkuenp6LjI1NQordHlwaWNhbGx5KSwgdGhlbiBzb21lb25lIGlzIGF0dGFja2luZyB5b3VyIG1hY2hpbmUgaW4gcGFydGljdWxhci4gIEJlIGNhcmVmdWwKK291dCB0aGVyZS4uLi4KKworNy4pIEV2ZXJ5dGhpbmcgc2VlbXMgdG8gd29yayBmaW5lIGJ1dCBteSBjb21wdXRlciBsb2NrcyB1cCBhZnRlciBhIHdoaWxlCisoYW5kIHR5cGljYWxseSBkdXJpbmcgYSBsZW5ndGh5IGRvd25sb2FkIHRocm91Z2ggdGhlIGNhYmxlIG1vZGVtKSEKKworU29sdXRpb24gLS0gWW91IG1heSBuZWVkIHRvIGFkZCBhIHNob3J0IGRlbGF5IGluIHRoZSBkcml2ZXIgdG8gJ3Nsb3cgZG93bicgdGhlCitTVVJGYm9hcmQgYmVjYXVzZSB5b3VyIFBDIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIGtlZXAgdXAgd2l0aCB0aGUgdHJhbnNmZXIgcmF0ZQorb2YgdGhlIFNCMTAwMC4gVG8gZG8gdGhpcywgaXQncyBwcm9iYWJseSBiZXN0IHRvIGRvd25sb2FkIEZyYW5jbydzCitzYjEwMDAtMS4xLjIudGFyLmd6IGFyY2hpdmUgYW5kIGJ1aWxkIGFuZCBpbnN0YWxsIHNiMTAwMC5vIG1hbnVhbGx5LiAgWW91J2xsCit3YW50IHRvIGVkaXQgdGhlICdNYWtlZmlsZScgYW5kIGxvb2sgZm9yIHRoZSAnU0IxMDAwX0RFTEFZJworZGVmaW5lLiAgVW5jb21tZW50IHRob3NlICdDRkxBR1MnIGxpbmVzIChhbmQgY29tbWVudCBvdXQgdGhlIGRlZmF1bHQgb25lcykKK2FuZCB0cnkgc2V0dGluZyB0aGUgZGVsYXkgdG8gc29tZXRoaW5nIGxpa2UgNjAgbWljcm9zZWNvbmRzIHdpdGg6CisnLURTQjEwMDBfREVMQVk9NjAnLiAgVGhlbiBkbyBgbWFrZScgYW5kIGFzIHJvb3QgYG1ha2UgaW5zdGFsbCcgYW5kIHRyeQoraXQgb3V0LiAgSWYgaXQgc3RpbGwgZG9lc24ndCB3b3JrIG9yIHlvdSBsaWtlIHBsYXlpbmcgd2l0aCB0aGUgZHJpdmVyLCB5b3UgbWF5Cit0cnkgb3RoZXIgbnVtYmVycy4gIFJlbWVtYmVyIHRob3VnaCB0aGF0IHRoZSBoaWdoZXIgdGhlIGRlbGF5LCB0aGUgc2xvd2VyIHRoZQorZHJpdmVyICh3aGljaCBzbG93cyBkb3duIHRoZSByZXN0IG9mIHRoZSBQQyB0b28gd2hlbiBpdCBpcyBhY3RpdmVseQordXNlZCkuIFRoYW5rcyB0byBFZCBEYWlnYSBmb3IgdGhpcyB0aXAhCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NyZWRpdHM6ICBUaGlzIFJFQURNRSBjYW1lIGZyb20gRnJhbmNvIFZlbnR1cmkncyBvcmlnaW5hbCBSRUFETUUgZmlsZSB3aGljaCBpcworc3RpbGwgc3VwcGxpZWQgd2l0aCBoaXMgZHJpdmVyIC50YXIuZ3ogYXJjaGl2ZS4gIEkgYW5kIGFsbCBvdGhlciBzYjEwMDAgdXNlcnMKK293ZSBGcmFuY28gYSB0cmVtZW5kb3VzICJUaGFuayB5b3UhIiAgQWRkaXRpb25hbCB0aGFua3MgZ29lcyB0byBDYXJsIFBhdHRlbgorYW5kIFJhbHBoIEJvbm5lbGwgd2hvIGFyZSBub3cgbWFuYWdpbmcgdGhlIExpbnV4IFNCMTAwMCB3ZWIgc2l0ZSwgYW5kIHRvCit0aGUgU0IxMDAwIHVzZXJzIHdobyByZXBvcnRlZCBhbmQgaGVscGVkIGRlYnVnIHRoZSBjb21tb24gcHJvYmxlbXMgbGlzdGVkCithYm92ZS4KKworCisJCQkJCUNsZW1taXR0IFNpZ2xlcgorCQkJCQljc2lnbGVyQHZ0LmVkdQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1RPRE8gYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvVE9ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmQzNmZmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL1RPRE8KQEAgLTAsMCArMSwxOCBAQAorVG8tZG8gaXRlbXMgZm9yIG5ldHdvcmsgZHJpdmVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIE1vdmUgZXRoZXJuZXQgY3JjIHJvdXRpbmUgdG8gZ2VuZXJpYyBjb2RlCisKKyogKGZvciAyLjUpIEludGVncmF0ZSBKYW1hbCBIYWRpIFNhbGltJ3MgbmV0ZGV2IFJ4IHBvbGxpbmcgQVBJIGNoYW5nZQorCisqIEF1ZGl0IGFsbCBuZXQgZHJpdmVycyB0byBtYWtlIHN1cmUgbWFnaWMgcGFja2V0IC8gd2FrZS1vbi1sYW4gLworICBzaW1pbGFyIGZlYXR1cmVzIGFyZSBkaXNhYmxlZCBpbiB0aGUgZHJpdmVyIGJ5IGRlZmF1bHQuCisKKyogQXVkaXQgYWxsIG5ldCBkcml2ZXJzIHRvIG1ha2Ugc3VyZSB0aGUgbW9kdWxlIGFsd2F5cyBwcmludHMgb3V0IGEKKyAgdmVyc2lvbiBzdHJpbmcgd2hlbiBsb2FkZWQgYXMgYSBtb2R1bGUsIGJ1dCBvbmx5IHByaW50cyBhIHZlcnNpb24KKyAgc3RyaW5nIHdoZW4gYnVpbHQgaW50byB0aGUga2VybmVsIGlmIGEgZGV2aWNlIGlzIGRldGVjdGVkLgorCisqIEFkZCBFVEhUT09MX0dEUlZJTkZPIGlvY3RsIHN1cHBvcnQgdG8gYWxsIGV0aGVybmV0IGRyaXZlcnMuCisKKyogZG1mZSBQQ0kgRE1BIGlzIHRvdGFsbHkgd3JvbmcgYW5kIG9ubHkgd29ya3Mgb24geDg2CisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9hbGlhcy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWxpYXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMTJjMmYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYWxpYXMudHh0CkBAIC0wLDAgKzEsNTMgQEAKKworSVAtQWxpYXNpbmc6Cis9PT09PT09PT09PT0KKworSVAtYWxpYXNlcyBhcmUgYWRkaXRpb25hbCBJUC1hZGRyZXNzZXMvbWFza3MgaG9va2VkIHVwIHRvIGEgYmFzZSAKK2ludGVyZmFjZSBieSBhZGRpbmcgYSBjb2xvbiBhbmQgYSBzdHJpbmcgd2hlbiBydW5uaW5nIGlmY29uZmlnLiAKK1RoaXMgc3RyaW5nIGlzIHVzdWFsbHkgbnVtZXJpYywgYnV0IHRoaXMgaXMgbm90IGEgbXVzdC4KKworSVAtQWxpYXNlcyBhcmUgYXZhaWwgaWYgQ09ORklHX0lORVQgKGBzdGFuZGFyZCcgSVB2NCBuZXR3b3JraW5nKSAKK2lzIGNvbmZpZ3VyZWQgaW4gdGhlIGtlcm5lbC4KKworCitvIEFsaWFzIGNyZWF0aW9uLgorICBBbGlhcyBjcmVhdGlvbiBpcyBkb25lIGJ5ICdtYWdpYycgaW50ZXJmYWNlIG5hbWluZzogZWcuIHRvIGNyZWF0ZSBhCisgIDIwMC4xLjEuMSBhbGlhcyBmb3IgZXRoMCAuLi4KKyAgCisgICAgIyBpZmNvbmZpZyBldGgwOjAgMjAwLjEuMS4xICBldGMsZXRjLi4uLgorICAgICAgICAgICAgICAgICAgIH5+IC0+IHJlcXVlc3QgYWxpYXMgIzAgY3JlYXRpb24gKGlmIG5vdCB5ZXQgZXhpc3RzKSBmb3IgZXRoMAorCisgICAgVGhlIGNvcnJlc3BvbmRpbmcgcm91dGUgaXMgYWxzbyBzZXQgdXAgYnkgdGhpcyBjb21tYW5kLiAKKyAgICBQbGVhc2Ugbm90ZTogVGhlIHJvdXRlIGFsd2F5cyBwb2ludHMgdG8gdGhlIGJhc2UgaW50ZXJmYWNlLgorCQorCitvIEFsaWFzIGRlbGV0aW9uLgorICBUaGUgYWxpYXMgaXMgcmVtb3ZlZCBieSBzaHV0dGluZyB0aGUgYWxpYXMgZG93bjoKKworICAgICMgaWZjb25maWcgZXRoMDowIGRvd24KKyAgICAgICAgICAgICAgICAgfn5+fn5+fn5+fiAtPiB3aWxsIGRlbGV0ZSBhbGlhcworCisgIAkJICAgCQkgICAKK28gQWxpYXMgKHJlLSljb25maWd1cmluZworCisgIEFsaWFzZXMgYXJlIG5vdCByZWFsIGRldmljZXMsIGJ1dCBwcm9ncmFtcyBzaG91bGQgYmUgYWJsZSB0byBjb25maWd1cmUgYW5kCisgIHJlZmVyIHRvIHRoZW0gYXMgdXN1YWwgKGlmY29uZmlnLCByb3V0ZSwgZXRjKS4KKworCitvIFJlbGF0aW9uc2hpcCB3aXRoIG1haW4gZGV2aWNlCisKKyAgSWYgdGhlIGJhc2UgZGV2aWNlIGlzIHNodXQgZG93biB0aGUgYWRkZWQgYWxpYXNlcyB3aWxsIGJlIGRlbGV0ZWQgCisgIHRvby4KKworCitDb250YWN0CistLS0tLS0tCitQbGVhc2UgZmluZ2VyIG9yIGUtbWFpbCBtZToKKyAgIEp1YW4gSm9zZSBDaWFybGFudGUgPGpqY2lhcmxhQHJhaXoudW5jdS5lZHUuYXI+CisKK1VwZGF0ZWQgYnkgRXJpayBTY2hvZW5mZWxkZXIgPHNjaG9lbmZyQGdhZXJ0bmVyLkRFPgorCis7IGxvY2FsIHZhcmlhYmxlczoKKzsgbW9kZTogaW5kZW50ZWQtdGV4dAorOyBtb2RlOiBhdXRvLWZpbGwKKzsgZW5kOgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FyY25ldC1oYXJkd2FyZS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYXJjbmV0LWhhcmR3YXJlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGE1ZjAxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2FyY25ldC1oYXJkd2FyZS50eHQKQEAgLTAsMCArMSwzMTMzIEBACisgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMSkgVGhpcyBmaWxlIGlzIGEgc3VwcGxlbWVudCB0byBhcmNuZXQudHh0LiAgUGxlYXNlIHJlYWQgdGhhdCBmb3IgZ2VuZXJhbAorICAgZHJpdmVyIGNvbmZpZ3VyYXRpb24gaGVscC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisyKSBUaGlzIGZpbGUgaXMgbm8gbG9uZ2VyIExpbnV4LXNwZWNpZmljLiAgSXQgc2hvdWxkIHByb2JhYmx5IGJlIG1vdmVkIG91dCBvZgorICAgdGhlIGtlcm5lbCBzb3VyY2VzLiAgSWRlYXM/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCZWNhdXNlIHNvIG1hbnkgcGVvcGxlIChteXNlbGYgaW5jbHVkZWQpIHNlZW0gdG8gaGF2ZSBvYnRhaW5lZCBBUkNuZXQgY2FyZHMKK3dpdGhvdXQgbWFudWFscywgdGhpcyBmaWxlIGNvbnRhaW5zIGEgcXVpY2sgaW50cm9kdWN0aW9uIHRvIEFSQ25ldCBoYXJkd2FyZSwKK3NvbWUgY2FibGluZyB0aXBzLCBhbmQgYSBsaXN0aW5nIG9mIGFsbCBqdW1wZXIgc2V0dGluZ3MgSSBjYW4gZmluZC4gUGxlYXNlCitlLW1haWwgYXBlbndhcnJAd29ybGR2aXNpb25zLmNhIHdpdGggYW55IHNldHRpbmdzIGZvciB5b3VyIHBhcnRpY3VsYXIgY2FyZCwKK29yIGFueSBvdGhlciBpbmZvcm1hdGlvbiB5b3UgaGF2ZSEKKworCitJTlRST0RVQ1RJT04gVE8gQVJDTkVUCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FSQ25ldCBpcyBhIG5ldHdvcmsgdHlwZSB3aGljaCB3b3JrcyBpbiBhIHdheSBzaW1pbGFyIHRvIHBvcHVsYXIgRXRoZXJuZXQKK25ldHdvcmtzIGJ1dCB3aGljaCBpcyBhbHNvIGRpZmZlcmVudCBpbiBzb21lIHZlcnkgaW1wb3J0YW50IHdheXMuCisKK0ZpcnN0IG9mIGFsbCwgeW91IGNhbiBnZXQgQVJDbmV0IGNhcmRzIGluIGF0IGxlYXN0IHR3byBzcGVlZHM6IDIuNSBNYnBzCisoc2xvd2VyIHRoYW4gRXRoZXJuZXQpIGFuZCAxMDAgTWJwcyAoZmFzdGVyIHRoYW4gbm9ybWFsIEV0aGVybmV0KS4gIEluIGZhY3QsCit0aGVyZSBhcmUgb3RoZXJzIGFzIHdlbGwsIGJ1dCB0aGVzZSBhcmUgbGVzcyBjb21tb24uICBUaGUgZGlmZmVyZW50IGhhcmR3YXJlCit0eXBlcywgYXMgZmFyIGFzIEknbSBhd2FyZSwgYXJlIG5vdCBjb21wYXRpYmxlIGFuZCBzbyB5b3UgY2Fubm90IHdpcmUgYQorMTAwIE1icHMgY2FyZCB0byBhIDIuNSBNYnBzIGNhcmQsIGFuZCBzbyBvbi4gIEZyb20gd2hhdCBJIGhlYXIsIG15IGRyaXZlciBkb2VzCit3b3JrIHdpdGggMTAwIE1icHMgY2FyZHMsIGJ1dCBJIGhhdmVuJ3QgYmVlbiBhYmxlIHRvIHZlcmlmeSB0aGlzIG15c2VsZiwKK3NpbmNlIEkgb25seSBoYXZlIHRoZSAyLjUgTWJwcyB2YXJpZXR5LiAgSXQgaXMgcHJvYmFibHkgbm90IGdvaW5nIHRvIHNhdHVyYXRlCit5b3VyIDEwMCBNYnBzIGNhcmQuICBTdG9wIGNvbXBsYWluaW5nLiA6KQorCitZb3UgYWxzbyBjYW5ub3QgY29ubmVjdCBhbiBBUkNuZXQgY2FyZCB0byBhbnkga2luZCBvZiBFdGhlcm5ldCBjYXJkIGFuZAorZXhwZWN0IGl0IHRvIHdvcmsuICAKKworVGhlcmUgYXJlIHR3byAidHlwZXMiIG9mIEFSQ25ldCAtIFNUQVIgdG9wb2xvZ3kgYW5kIEJVUyB0b3BvbG9neS4gIFRoaXMKK3JlZmVycyB0byBob3cgdGhlIGNhcmRzIGFyZSBtZWFudCB0byBiZSB3aXJlZCB0b2dldGhlci4gIEFjY29yZGluZyB0byBtb3N0CithdmFpbGFibGUgZG9jdW1lbnRhdGlvbiwgeW91IGNhbiBvbmx5IGNvbm5lY3QgU1RBUiBjYXJkcyB0byBTVEFSIGNhcmRzIGFuZAorQlVTIGNhcmRzIHRvIEJVUyBjYXJkcy4gIFRoYXQgbWFrZXMgc2Vuc2UsIHJpZ2h0PyAgV2VsbCwgaXQncyBub3QgcXVpdGUKK3RydWU7IHNlZSBiZWxvdyB1bmRlciAiQ2FibGluZy4iCisKK09uY2UgeW91IGdldCBwYXN0IHRoZXNlIGxpdHRsZSBzdHVtYmxpbmcgYmxvY2tzLCBBUkNuZXQgaXMgYWN0dWFsbHkgcXVpdGUgYQord2VsbC1kZXNpZ25lZCBzdGFuZGFyZC4gIEl0IHVzZXMgc29tZXRoaW5nIGNhbGxlZCAibW9kaWZpZWQgdG9rZW4gcGFzc2luZyIKK3doaWNoIG1ha2VzIGl0IGNvbXBsZXRlbHkgaW5jb21wYXRpYmxlIHdpdGggc28tY2FsbGVkICJUb2tlbiBSaW5nIiBjYXJkcywKK2J1dCB3aGljaCBtYWtlcyB0cmFuc2ZlcnMgbXVjaCBtb3JlIHJlbGlhYmxlIHRoYW4gRXRoZXJuZXQgZG9lcy4gIEluIGZhY3QsCitBUkNuZXQgd2lsbCBndWFyYW50ZWUgdGhhdCBhIHBhY2tldCBhcnJpdmVzIHNhZmVseSBhdCB0aGUgZGVzdGluYXRpb24sIGFuZAorZXZlbiBpZiBpdCBjYW4ndCBwb3NzaWJseSBiZSBkZWxpdmVyZWQgcHJvcGVybHkgKGllLiBiZWNhdXNlIG9mIGEgY2FibGUKK2JyZWFrLCBvciBiZWNhdXNlIHRoZSBkZXN0aW5hdGlvbiBjb21wdXRlciBkb2VzIG5vdCBleGlzdCkgaXQgd2lsbCBhdCBsZWFzdAordGVsbCB0aGUgc2VuZGVyIGFib3V0IGl0LgorCitCZWNhdXNlIG9mIHRoZSBjYXJlZnVsbHkgZGVmaW5lZCBhY3Rpb24gb2YgdGhlICJ0b2tlbiIsIGl0IHdpbGwgYWx3YXlzIG1ha2UKK2EgcGFzcyBhcm91bmQgdGhlICJyaW5nIiB3aXRoaW4gYSBtYXhpbXVtIGxlbmd0aCBvZiB0aW1lLiAgVGhpcyBtYWtlcyBpdAordXNlZnVsIGZvciByZWFsdGltZSBuZXR3b3Jrcy4KKworSW4gYWRkaXRpb24sIGFsbCBrbm93biBBUkNuZXQgY2FyZHMgaGF2ZSBhbiAoYWxtb3N0KSBpZGVudGljYWwgcHJvZ3JhbW1pbmcKK2ludGVyZmFjZS4gIFRoaXMgbWVhbnMgdGhhdCB3aXRoIG9uZSBBUkNuZXQgZHJpdmVyIHlvdSBjYW4gc3VwcG9ydCBhbnkKK2NhcmQsIHdoZXJlYXMgd2l0aCBFdGhlcm5ldCBlYWNoIG1hbnVmYWN0dXJlciB1c2VzIHdoYXQgaXMgc29tZXRpbWVzIGEKK2NvbXBsZXRlbHkgZGlmZmVyZW50IHByb2dyYW1taW5nIGludGVyZmFjZSwgbGVhZGluZyB0byBhIGxvdCBvZiBkaWZmZXJlbnQsCitzb21ldGltZXMgdmVyeSBzaW1pbGFyLCBFdGhlcm5ldCBkcml2ZXJzLiAgT2YgY291cnNlLCBhbHdheXMgdXNpbmcgdGhlIHNhbWUKK3Byb2dyYW1taW5nIGludGVyZmFjZSBhbHNvIG1lYW5zIHRoYXQgd2hlbiBoaWdoLXBlcmZvcm1hbmNlIGhhcmR3YXJlCitmYWNpbGl0aWVzIGxpa2UgUENJIGJ1cyBtYXN0ZXJpbmcgRE1BIGFwcGVhciwgaXQncyBoYXJkIHRvIHRha2UgYWR2YW50YWdlIG9mCit0aGVtLiAgTGV0J3Mgbm90IGdvIGludG8gdGhhdC4KKworT25lIHRoaW5nIHRoYXQgbWFrZXMgQVJDbmV0IGNhcmRzIGRpZmZpY3VsdCB0byBwcm9ncmFtIGZvciwgaG93ZXZlciwgaXMgdGhlCitsaW1pdCBvbiB0aGVpciBwYWNrZXQgc2l6ZXM7IHN0YW5kYXJkIEFSQ25ldCBjYW4gb25seSBzZW5kIHBhY2tldHMgdGhhdCBhcmUKK3VwIHRvIDUwOCBieXRlcyBpbiBsZW5ndGguICBUaGlzIGlzIHNtYWxsZXIgdGhhbiB0aGUgSW50ZXJuZXQgImJhcmUgbWluaW11bSIKK29mIDU3NiBieXRlcywgbGV0IGFsb25lIHRoZSBFdGhlcm5ldCBNVFUgb2YgMTUwMC4gIFRvIGNvbXBlbnNhdGUsIGFuIGV4dHJhCitsZXZlbCBvZiBlbmNhcHN1bGF0aW9uIGlzIGRlZmluZWQgYnkgUkZDMTIwMSwgd2hpY2ggSSBjYWxsICJwYWNrZXQKK3NwbGl0dGluZywiIHRoYXQgYWxsb3dzICJ2aXJ0dWFsIHBhY2tldHMiIHRvIGdyb3cgYXMgbGFyZ2UgYXMgNjRLIGVhY2gsCithbHRob3VnaCB0aGV5IGFyZSBnZW5lcmFsbHkga2VwdCBkb3duIHRvIHRoZSBFdGhlcm5ldC1zdHlsZSAxNTAwIGJ5dGVzLgorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgYWR2YW50YWdlcyBhbmQgZGlzYWR2YW50YWdlcyAobW9zdGx5IHRoZQorYWR2YW50YWdlcykgb2YgQVJDbmV0IG5ldHdvcmtzLCB5b3UgbWlnaHQgdHJ5IHRoZSAiQVJDbmV0IFRyYWRlIEFzc29jaWF0aW9uIgorV1dXIHBhZ2U6CisJaHR0cDovL3d3dy5hcmNuZXQuY29tCisKKworQ0FCTElORyBBUkNORVQgTkVUV09SS1MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgc2VjdGlvbiB3YXMgcmV3cml0dGVuIGJ5IAorICAgICAgICBWb2p0ZWNoIFBhdmxpayAgICAgPHZvanRlY2hAc3VzZS5jej4KK3VzaW5nIGluZm9ybWF0aW9uIGZyb20gc2V2ZXJhbCBwZW9wbGUsIGluY2x1ZGluZzoKKyAgICAgICAgQXZlcnkgUGVubnJhdW4gICAgIDxhcGVud2FyckB3b3JsZHZpc2lvbnMuY2E+CisgCVN0ZXBoZW4gQS4gV29vZCAgICA8c2F3QGhhbGxjMS5jZWJhZi5nb3Y+CisgCUpvaG4gUGF1bCBNb3JyaXNvbiA8am1vcnJpc29AYm9nb21pcHMuZWUudWJjLmNhPgorIAlKb2FjaGltIEtvZW5pZyAgICAgPGpvam9AcmVwYXMuZGU+CithbmQgQXZlcnkgdG91Y2hlZCBpdCB1cCBhIGJpdCwgYXQgVm9qdGVjaCdzIHJlcXVlc3QuCisKK0FSQ25ldCAodGhlIGNsYXNzaWMgMi41IE1icHMgdmVyc2lvbikgY2FuIGJlIGNvbm5lY3RlZCBieSB0d28gZGlmZmVyZW50Cit0eXBlcyBvZiBjYWJsaW5nOiBjb2F4IGFuZCB0d2lzdGVkIHBhaXIuICBUaGUgb3RoZXIgQVJDbmV0LXR5cGUgbmV0d29ya3MKKygxMDAgTWJwcyBUQ05TIGFuZCAzMjAga2JwcyAtIDMyIE1icHMgQVJDbmV0IFBsdXMpIHVzZSBkaWZmZXJlbnQgdHlwZXMgb2YKK2NhYmxpbmcgKFR5cGUxLCBGaWJlciwgQzEsIEM0LCBDNSkuCisKK0ZvciBhIGNvYXggbmV0d29yaywgeW91ICJzaG91bGQiIHVzZSA5MyBPaG0gUkctNjIgY2FibGUuICBCdXQgb3RoZXIgY2FibGVzCithbHNvIHdvcmsgZmluZSwgYmVjYXVzZSBBUkNuZXQgaXMgYSB2ZXJ5IHN0YWJsZSBuZXR3b3JrLiBJIHBlcnNvbmFsbHkgdXNlIDc1CitPaG0gVFYgYW50ZW5uYSBjYWJsZS4KKworQ2FyZHMgZm9yIGNvYXggY2FibGluZyBhcmUgc2hpcHBlZCBpbiB0d28gZGlmZmVyZW50IHZhcmlhbnRzOiBmb3IgQlVTIGFuZAorU1RBUiBuZXR3b3JrIHRvcG9sb2dpZXMuICBUaGV5IGFyZSBtb3N0bHkgdGhlIHNhbWUuICBUaGUgb25seSBkaWZmZXJlbmNlCitsaWVzIGluIHRoZSBoeWJyaWQgY2hpcCBpbnN0YWxsZWQuICBCVVMgY2FyZHMgdXNlIGhpZ2ggaW1wZWRhbmNlIG91dHB1dCwKK3doaWxlIFNUQVIgdXNlIGxvdyBpbXBlZGFuY2UuICBMb3cgaW1wZWRhbmNlIGNhcmQgKFNUQVIpIGlzIGVsZWN0cmljYWxseQorZXF1YWwgdG8gYSBoaWdoIGltcGVkYW5jZSBvbmUgd2l0aCBhIHRlcm1pbmF0b3IgaW5zdGFsbGVkLgorCitVc3VhbGx5LCB0aGUgQVJDbmV0IG5ldHdvcmtzIGFyZSBidWlsdCB1cCBmcm9tIFNUQVIgY2FyZHMgYW5kIGh1YnMuICBUaGVyZQorYXJlIHR3byB0eXBlcyBvZiBodWJzIC0gYWN0aXZlIGFuZCBwYXNzaXZlLiAgUGFzc2l2ZSBodWJzIGFyZSBzbWFsbCBib3hlcword2l0aCBmb3VyIEJOQyBjb25uZWN0b3JzIGNvbnRhaW5pbmcgZm91ciA0NyBPaG0gcmVzaXN0b3JzOgorCisgICB8ICAgICAgICAgfCB3aXJlcworICAgUiAgICAgICAgICsganVuY3Rpb24KKy1SLSstUi0gICAgICBSIDQ3IE9obSByZXNpc3RvcnMKKyAgIFIKKyAgIHwKKworVGhlIHNoaWVsZGluZyBpcyBjb25uZWN0ZWQgdG9nZXRoZXIuICBBY3RpdmUgaHVicyBhcmUgbXVjaCBtb3JlIGNvbXBsaWNhdGVkOwordGhleSBhcmUgcG93ZXJlZCBhbmQgY29udGFpbiBlbGVjdHJvbmljcyB0byBhbXBsaWZ5IHRoZSBzaWduYWwgYW5kIHNlbmQgaXQKK3RvIG90aGVyIHNlZ21lbnRzIG9mIHRoZSBuZXQuICBUaGV5IHVzdWFsbHkgaGF2ZSBlaWdodCBjb25uZWN0b3JzLiAgQWN0aXZlCitodWJzIGNvbWUgaW4gdHdvIHZhcmlhbnRzIC0gZHVtYiBhbmQgc21hcnQuICBUaGUgZHVtYiB2YXJpYW50IGp1c3QKK2FtcGxpZmllcywgYnV0IHRoZSBzbWFydCBvbmUgZGVjb2RlcyB0byBkaWdpdGFsIGFuZCBlbmNvZGVzIGJhY2sgYWxsIHBhY2tldHMKK2NvbWluZyB0aHJvdWdoLiAgVGhpcyBpcyBtdWNoIGJldHRlciBpZiB5b3UgaGF2ZSBzZXZlcmFsIGh1YnMgaW4gdGhlIG5ldCwKK3NpbmNlIG1hbnkgZHVtYiBhY3RpdmUgaHVicyBtYXkgd29yc2VuIHRoZSBzaWduYWwgcXVhbGl0eS4KKworQW5kIG5vdyB0byB0aGUgY2FibGluZy4gIFdoYXQgeW91IGNhbiBjb25uZWN0IHRvZ2V0aGVyOgorCisxLiBBIGNhcmQgdG8gYSBjYXJkLiAgVGhpcyBpcyB0aGUgc2ltcGxlc3Qgd2F5IG9mIGNyZWF0aW5nIGEgMi1jb21wdXRlcgorICAgbmV0d29yay4KKworMi4gQSBjYXJkIHRvIGEgcGFzc2l2ZSBodWIuICBSZW1lbWJlciB0aGF0IGFsbCB1bnVzZWQgY29ubmVjdG9ycyBvbiB0aGUgaHViCisgICBtdXN0IGJlIHByb3Blcmx5IHRlcm1pbmF0ZWQgd2l0aCA5MyBPaG0gKG9yIHNvbWV0aGluZyBlbHNlIGlmIHlvdSBkb24ndAorICAgaGF2ZSB0aGUgcmlnaHQgb25lcykgdGVybWluYXRvcnMuCisgICAJKEF2ZXJ5J3Mgbm90ZTogb29wcywgSSBkaWRuJ3Qga25vdyB0aGF0LiAgTWluZSAoVFYgY2FibGUpIHdvcmtzCisJYW55d2F5LCB0aG91Z2guKQorCiszLiBBIGNhcmQgdG8gYW4gYWN0aXZlIGh1Yi4gIEhlcmUgaXMgbm8gbmVlZCB0byB0ZXJtaW5hdGUgdGhlIHVudXNlZAorICAgY29ubmVjdG9ycyBleGNlcHQgc29tZSBraW5kIG9mIGFlc3RoZXRpYyBmZWVsaW5nLiAgQnV0LCB0aGVyZSBtYXkgbm90IGJlCisgICBtb3JlIHRoYW4gZWxldmVuIGFjdGl2ZSBodWJzIGJldHdlZW4gYW55IHR3byBjb21wdXRlcnMuICBUaGF0IG9mIGNvdXJzZQorICAgZG9lc24ndCBsaW1pdCB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBodWJzIG9uIHRoZSBuZXR3b3JrLgorICAgCis0LiBBbiBhY3RpdmUgaHViIHRvIGFub3RoZXIuCisKKzUuIEFuIGFjdGl2ZSBodWIgdG8gcGFzc2l2ZSBodWIuCisKK1JlbWVtYmVyLCB0aGF0IHlvdSBjYW4gbm90IGNvbm5lY3QgdHdvIHBhc3NpdmUgaHVicyB0b2dldGhlci4gIFRoZSBwb3dlciBsb3NzCitpbXBsaWVkIGJ5IHN1Y2ggYSBjb25uZWN0aW9uIGlzIHRvbyBoaWdoIGZvciB0aGUgbmV0IHRvIG9wZXJhdGUgcmVsaWFibHkuCisKK0FuIGV4YW1wbGUgb2YgYSB0eXBpY2FsIEFSQ25ldCBuZXR3b3JrOgorCisgICAgICAgICAgIFIgICAgICAgICAgICAgICAgICAgICBTIC0gU1RBUiB0eXBlIGNhcmQgICAgICAgICAgICAgIAorICAgIFMtLS0tLS1ILS0tLS0tLS1BLS0tLS0tLVMgICAgUiAtIFRlcm1pbmF0b3IKKyAgICAgICAgICAgfCAgICAgICAgfCAgICAgICAgICAgIEggLSBIdWIgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgIHwgICAgICAgIHwgICAgICAgICAgICBBIC0gQWN0aXZlIGh1YiAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICB8ICAgUy0tLS1ILS0tLVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgUyAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitUaGUgQlVTIHRvcG9sb2d5IGlzIHZlcnkgc2ltaWxhciB0byB0aGUgb25lIHVzZWQgYnkgRXRoZXJuZXQuICBUaGUgb25seQorZGlmZmVyZW5jZSBpcyBpbiBjYWJsZSBhbmQgdGVybWluYXRvcnM6IHRoZXkgc2hvdWxkIGJlIDkzIE9obS4gIEV0aGVybmV0Cit1c2VzIDUwIE9obSBpbXBlZGFuY2UuIFlvdSB1c2UgVCBjb25uZWN0b3JzIHRvIHB1dCB0aGUgY29tcHV0ZXJzIG9uIGEgc2luZ2xlCitsaW5lIG9mIGNhYmxlLCB0aGUgYnVzLiBZb3UgaGF2ZSB0byBwdXQgdGVybWluYXRvcnMgYXQgYm90aCBlbmRzIG9mIHRoZQorY2FibGUuIEEgdHlwaWNhbCBCVVMgQVJDbmV0IG5ldHdvcmsgbG9va3MgbGlrZToKKworICAgIFJULS0tLVQtLS0tLS1ULS0tLS0tVC0tLS0tLVQtLS0tLS1UUgorICAgICBCICAgIEIgICAgICBCICAgICAgQiAgICAgIEIgICAgICBCCisKKyAgQiAtIEJVUyB0eXBlIGNhcmQKKyAgUiAtIFRlcm1pbmF0b3IKKyAgVCAtIFQgY29ubmVjdG9yCisKK0J1dCB0aGF0IGlzIG5vdCBhbGwhIFRoZSB0d28gdHlwZXMgY2FuIGJlIGNvbm5lY3RlZCB0b2dldGhlci4gIEFjY29yZGluZyB0bwordGhlIG9mZmljaWFsIGRvY3VtZW50YXRpb24gdGhlIG9ubHkgd2F5IG9mIGNvbm5lY3RpbmcgdGhlbSBpcyB1c2luZyBhbiBhY3RpdmUKK2h1YjoKKworICAgICAgICAgQS0tLS0tLVQtLS0tLS1ULS0tLS0tVFIKKyAgICAgICAgIHwgICAgICBCICAgICAgQiAgICAgIEIKKyAgICAgUy0tLUgtLS1TCisgICAgICAgICB8CisgICAgICAgICBTCisKK1RoZSBvZmZpY2lhbCBkb2NzIGFsc28gc3RhdGUgdGhhdCB5b3UgY2FuIHVzZSBTVEFSIGNhcmRzIGF0IHRoZSBlbmRzIG9mCitCVVMgbmV0d29yayBpbiBwbGFjZSBvZiBhIEJVUyBjYXJkIGFuZCBhIHRlcm1pbmF0b3I6CisKKyAgICAgUy0tLS0tLVQtLS0tLS1ULS0tLS0tUworICAgICAgICAgICAgQiAgICAgIEIKKworQnV0LCBhY2NvcmRpbmcgdG8gbXkgb3duIGV4cGVyaW1lbnRzLCB5b3UgY2FuIHNpbXBseSBoYW5nIGEgQlVTIHR5cGUgY2FyZAorYW55d2hlcmUgaW4gbWlkZGxlIG9mIGEgY2FibGUgaW4gYSBTVEFSIHRvcG9sb2d5IG5ldHdvcmsuICBBbmQgbW9yZSAtIHlvdQorY2FuIHVzZSB0aGUgYnVzIGNhcmQgaW4gcGxhY2Ugb2YgYW55IHN0YXIgY2FyZCBpZiB5b3UgdXNlIGEgdGVybWluYXRvci4gVGhlbgoreW91IGNhbiBidWlsZCB2ZXJ5IGNvbXBsaWNhdGVkIG5ldHdvcmtzIGZ1bGZpbGxpbmcgYWxsIHlvdXIgbmVlZHMhICBBbgorZXhhbXBsZToKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgIFJULS0tLS0tVC0tLS0tLS1ULS0tLS0tSC0tLS0tLVMKKyAgICAgICAgICAgIEIgICAgICBCICAgICAgIEIgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICBSCisgICAgUy0tLS0tLUEtLS0tLS1ULS0tLS0tLVQtLS0tLS0tQS0tLS0tLS1ILS0tLS0tVFIgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICB8ICAgICAgQiAgICAgICBCICAgICAgIHwgICAgICAgfCAgICAgIEIgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgIHwgICBTICAgICAgICAgICAgICAgICBCVCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgIHwgICB8ICAgICAgICAgICAgICAgICAgfCAgUy0tLS1BLS0tLS1TCisgICAgUy0tLS0tLUgtLS1BLS0tLVMgICAgICAgICAgICAgfCAgICAgICB8IAorICAgICAgICAgICB8ICAgfCAgICAgIFMtLS0tLS1ULS0tLUgtLS1TICAgfAorICAgICAgICAgICBTICAgUyAgICAgICAgICAgICBCICAgIFIgICAgICAgUyAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK0EgYmFzaWNhbGx5IGRpZmZlcmVudCBjYWJsaW5nIHNjaGVtZSBpcyB1c2VkIHdpdGggVHdpc3RlZCBQYWlyIGNhYmxpbmcuIEVhY2gKK29mIHRoZSBUUCBjYXJkcyBoYXMgdHdvIFJKIChwaG9uZS1jb3JkIHN0eWxlKSBjb25uZWN0b3JzLiAgVGhlIGNhcmRzIGFyZQordGhlbiBkYWlzeS1jaGFpbmVkIHRvZ2V0aGVyIHVzaW5nIGEgY2FibGUgY29ubmVjdGluZyBldmVyeSB0d28gbmVpZ2hib3JpbmcKK2NhcmRzLiAgVGhlIGVuZHMgYXJlIHRlcm1pbmF0ZWQgd2l0aCBSSiA5MyBPaG0gdGVybWluYXRvcnMgd2hpY2ggcGx1ZyBpbnRvCit0aGUgZW1wdHkgY29ubmVjdG9ycyBvZiBjYXJkcyBvbiB0aGUgZW5kcyBvZiB0aGUgY2hhaW4uICBBbiBleGFtcGxlOgorCisgICAgICAgICAgX19fX19fX19fX18gICBfX19fX19fX19fXworICAgICAgX1JffF8gICAgICAgICBffF98XyAgICAgICAgIF98X1JfICAKKyAgICAgfCAgICAgfCAgICAgICB8ICAgICB8ICAgICAgIHwgICAgIHwgICAgICAKKyAgICAgfENhcmQgfCAgICAgICB8Q2FyZCB8ICAgICAgIHxDYXJkIHwgICAgIAorICAgICB8X19fX198ICAgICAgIHxfX19fX3wgICAgICAgfF9fX19ffCAgICAgICAgICAKKworCitUaGVyZSBhcmUgYWxzbyBodWJzIGZvciB0aGUgVFAgdG9wb2xvZ3kuICBUaGVyZSBpcyBub3RoaW5nIGRpZmZpY3VsdAoraW52b2x2ZWQgaW4gdXNpbmcgdGhlbTsgeW91IGp1c3QgY29ubmVjdCBhIFRQIGNoYWluIHRvIGEgaHViIG9uIGFueSBlbmQgb3IKK2V2ZW4gYXQgYm90aC4gIFRoaXMgd2F5IHlvdSBjYW4gY3JlYXRlIGFsbW9zdCBhbnkgbmV0d29yayBjb25maWd1cmF0aW9uLiAKK1RoZSBtYXhpbXVtIG9mIDExIGh1YnMgYmV0d2VlbiBhbnkgdHdvIGNvbXB1dGVycyBvbiB0aGUgbmV0IGFwcGxpZXMgaGVyZSBhcword2VsbC4gIEFuIGV4YW1wbGU6CisKKyAgICBSUC0tLS0tLS1QLS0tLS0tLS1QLS0tLS0tLS1ILS0tLS1QLS0tLS0tUC0tLS0tUFIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICBSUC0tLS0tSC0tLS0tLS0tUC0tLS0tLS0tSC0tLS0tUC0tLS0tLVBSCisgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgIFBSICAgICAgICAgICAgICAgIFBSCisKKyAgICBSIC0gUkogVGVybWluYXRvcgorICAgIFAgLSBUUCBDYXJkCisgICAgSCAtIFRQIEh1YgorCitMaWtlIGFueSBuZXR3b3JrLCBBUkNuZXQgaGFzIGEgbGltaXRlZCBjYWJsZSBsZW5ndGguICBUaGVzZSBhcmUgdGhlIG1heGltdW0KK2NhYmxlIGxlbmd0aHMgYmV0d2VlbiB0d28gYWN0aXZlIGVuZHMgKGFuIGFjdGl2ZSBlbmQgYmVpbmcgYW4gYWN0aXZlIGh1YiBvcgorYSBTVEFSIGNhcmQpLgorCisJCVJHLTYyICAgICAgIDkzIE9obSB1cCB0byA2NTAgbQorCQlSRy01OS9VICAgICA3NSBPaG0gdXAgdG8gNDU3IG0KKwkJUkctMTEvVSAgICAgNzUgT2htIHVwIHRvIDUzMyBtCisJCUlCTSBUeXBlIDEgMTUwIE9obSB1cCB0byAyMDAgbQorCQlJQk0gVHlwZSAzIDEwMCBPaG0gdXAgdG8gMTAwIG0KKworVGhlIG1heGltdW0gbGVuZ3RoIG9mIGFsbCBjYWJsZXMgY29ubmVjdGVkIHRvIGEgcGFzc2l2ZSBodWIgaXMgbGltaXRlZCB0byA2NQorbWV0ZXJzIGZvciBSRy02MiBjYWJsaW5nOyBsZXNzIGZvciBvdGhlcnMuICBZb3UgY2FuIHNlZSB0aGF0IHVzaW5nIHBhc3NpdmUKK2h1YnMgaW4gYSBsYXJnZSBuZXR3b3JrIGlzIGEgYmFkIGlkZWEuIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIHNpbmdsZSAiQlVTCitUcnVuayIgaXMgYWJvdXQgMzAwIG1ldGVycyBmb3IgUkctNjIuIFRoZSBtYXhpbXVtIGRpc3RhbmNlIGJldHdlZW4gdGhlIHR3bworbW9zdCBkaXN0YW50IHBvaW50cyBvZiB0aGUgbmV0IGlzIGxpbWl0ZWQgdG8gMzAwMCBtZXRlcnMuIFRoZSBtYXhpbXVtIGxlbmd0aAorb2YgYSBUUCBjYWJsZSBiZXR3ZWVuIHR3byBjYXJkcy9odWJzIGlzIDY1MCBtZXRlcnMuCisKKworU0VUVElORyBUSEUgSlVNUEVSUworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgQVJDbmV0IGNhcmRzIHNob3VsZCBoYXZlIGEgdG90YWwgb2YgZm91ciBvciBmaXZlIGRpZmZlcmVudCBzZXR0aW5nczoKKworICAtIHRoZSBJL08gYWRkcmVzczogIHRoaXMgaXMgdGhlICJwb3J0IiB5b3VyIEFSQ25ldCBjYXJkIGlzIG9uLiAgUHJvYmVkCisgICAgdmFsdWVzIGluIHRoZSBMaW51eCBBUkNuZXQgZHJpdmVyIGFyZSBvbmx5IGZyb20gMHgyMDAgdGhyb3VnaCAweDNGMC4gKElmCisgICAgeW91ciBjYXJkIGhhcyBhZGRpdGlvbmFsIG9uZXMsIHdoaWNoIGlzIHBvc3NpYmxlLCBwbGVhc2UgdGVsbCBtZS4pIFRoaXMKKyAgICBzaG91bGQgbm90IGJlIHRoZSBzYW1lIGFzIGFueSBvdGhlciBkZXZpY2Ugb24geW91ciBzeXN0ZW0uICBBY2NvcmRpbmcgdG8KKyAgICBhIGRvYyBJIGdvdCBmcm9tIE5vdmVsbCwgTVMgV2luZG93cyBwcmVmZXJzIHZhbHVlcyBvZiAweDMwMCBvciBtb3JlLAorICAgIGVhdGluZyBuZXQgY29ubmVjdGlvbnMgb24gbXkgc3lzdGVtIChhdCBsZWFzdCkgb3RoZXJ3aXNlLiAgTXkgZ3Vlc3MgaXMKKyAgICB0aGlzIG1heSBiZSBiZWNhdXNlLCBpZiB5b3VyIGNhcmQgaXMgYXQgMHgyRTAsIHByb2JpbmcgZm9yIGEgc2VyaWFsIHBvcnQKKyAgICBhdCAweDJFOCB3aWxsIHJlc2V0IHRoZSBjYXJkIGFuZCBwcm9iYWJseSBtZXNzIHRoaW5ncyB1cCByb3lhbGx5LgorCS0gQXZlcnkncyBmYXZvdXJpdGU6IDB4MzAwLgorCisgIC0gdGhlIElSUTogb24gIDgtYml0IGNhcmRzLCBpdCBtaWdodCBiZSAyICg5KSwgMywgNCwgNSwgb3IgNy4KKyAgICAgICAgICAgICBvbiAxNi1iaXQgY2FyZHMsIGl0IG1pZ2h0IGJlIDIgKDkpLCAzLCA0LCA1LCA3LCBvciAxMC0xNS4KKyAgICAgICAgICAgICAKKyAgICBNYWtlIHN1cmUgdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBhbnkgb3RoZXIgY2FyZCBvbiB5b3VyIHN5c3RlbS4gIE5vdGUKKyAgICB0aGF0IElSUTIgaXMgdGhlIHNhbWUgYXMgSVJROSwgYXMgZmFyIGFzIExpbnV4IGlzIGNvbmNlcm5lZC4gIFlvdSBjYW4KKyAgICAiY2F0IC9wcm9jL2ludGVycnVwdHMiIGZvciBhIHNvbWV3aGF0IGNvbXBsZXRlIGxpc3Qgb2Ygd2hpY2ggb25lcyBhcmUgaW4KKyAgICB1c2UgYXQgYW55IGdpdmVuIHRpbWUuICBIZXJlIGlzIGEgbGlzdCBvZiBjb21tb24gdXNhZ2VzIGZyb20gVm9qdGVjaAorICAgIFBhdmxpayA8dm9qdGVjaEBzdXNlLmN6PjoKKyAgICAJKCJOb3Qgb24gYnVzIiBtZWFucyB0aGVyZSBpcyBubyB3YXkgZm9yIGEgY2FyZCB0byBnZW5lcmF0ZSB0aGlzCisJaW50ZXJydXB0KQorCUlSUSAgMCAtIFRpbWVyIDAgKE5vdCBvbiBidXMpCisJSVJRICAxIC0gS2V5Ym9hcmQgKE5vdCBvbiBidXMpCisJSVJRICAyIC0gSVJRIENvbnRyb2xsZXIgMiAoTm90IG9uIGJ1cywgbm9yIGRvZXMgaW50ZXJydXB0IHRoZSBDUFUpCisJSVJRICAzIC0gQ09NMgorCUlSUSAgNCAtIENPTTEKKwlJUlEgIDUgLSBGUkVFIChMUFQyIGlmIHlvdSBoYXZlIGl0OyBzb21ldGltZXMgQ09NMzsgbWF5YmUgUExJUCkKKwlJUlEgIDYgLSBGbG9wcHkgZGlzayBjb250cm9sbGVyCisJSVJRICA3IC0gRlJFRSAoTFBUMSBpZiB5b3UgZG9uJ3QgdXNlIHRoZSBwb2xsaW5nIGRyaXZlcjsgUExJUCkgCisJSVJRICA4IC0gUmVhbHRpbWUgQ2xvY2sgSW50ZXJydXB0IChOb3Qgb24gYnVzKQorCUlSUSAgOSAtIEZSRUUgKFZHQSB2ZXJ0aWNhbCBzeW5jIGludGVycnVwdCBpZiBlbmFibGVkKQorCUlSUSAxMCAtIEZSRUUKKwlJUlEgMTEgLSBGUkVFCisJSVJRIDEyIC0gRlJFRQorCUlSUSAxMyAtIE51bWVyaWMgQ29wcm9jZXNzb3IgKE5vdCBvbiBidXMpCisJSVJRIDE0IC0gRml4ZWQgRGlzayBDb250cm9sbGVyCisJSVJRIDE1IC0gRlJFRSAoRml4ZWQgRGlzayBDb250cm9sbGVyIDIgaWYgeW91IGhhdmUgaXQpIAorCQorCU5vdGU6IElSUSA5IGlzIHVzZWQgb24gc29tZSB2aWRlbyBjYXJkcyBmb3IgdGhlICJ2ZXJ0aWNhbCByZXRyYWNlIgorCWludGVycnVwdC4gIFRoaXMgaW50ZXJydXB0IHdvdWxkIGhhdmUgYmVlbiBoYW5keSBmb3IgdGhpbmdzIGxpa2UKKwl2aWRlbyBnYW1lcywgYXMgaXQgb2NjdXJzIGV4YWN0bHkgb25jZSBwZXIgc2NyZWVuIHJlZnJlc2gsIGJ1dAorCXVuZm9ydHVuYXRlbHkgSUJNIGNhbmNlbGxlZCB0aGlzIGZlYXR1cmUgc3RhcnRpbmcgd2l0aCB0aGUgb3JpZ2luYWwKKwlWR0EgYW5kIHRodXMgbWFueSBWR0EvU1ZHQSBjYXJkcyBkbyBub3Qgc3VwcG9ydCBpdC4gIEZvciB0aGlzCisJcmVhc29uLCBubyBtb2Rlcm4gc29mdHdhcmUgdXNlcyB0aGlzIGludGVycnVwdCBhbmQgaXQgY2FuIGFsbW9zdAorCWFsd2F5cyBiZSBzYWZlbHkgZGlzYWJsZWQsIGlmIHlvdXIgdmlkZW8gY2FyZCBzdXBwb3J0cyBpdCBhdCBhbGwuCisJCisJSWYgeW91ciBjYXJkIGZvciBzb21lIHJlYXNvbiBDQU5OT1QgZGlzYWJsZSB0aGlzIElSUSAodXN1YWxseSB0aGVyZQorCWlzIGEganVtcGVyKSwgb25lIHNvbHV0aW9uIHdvdWxkIGJlIHRvIGNsaXAgdGhlIHByaW50ZWQgY2lyY3VpdAorCWNvbnRhY3Qgb24gdGhlIGJvYXJkOiBpdCdzIHRoZSBmb3VydGggY29udGFjdCBmcm9tIHRoZSBsZWZ0IG9uIHRoZQorCWJhY2sgc2lkZS4gIEkgdGFrZSBubyByZXNwb25zaWJpbGl0eSBpZiB5b3UgdHJ5IHRoaXMuCisKKwktIEF2ZXJ5J3MgZmF2b3VyaXRlOiBJUlEyIChhY3R1YWxseSBJUlE5KS4gIFdhdGNoIHRoYXQgVkdBLCB0aG91Z2guCisKKyAgLSB0aGUgbWVtb3J5IGFkZHJlc3M6ICBVbmxpa2UgbW9zdCBjYXJkcywgQVJDbmV0cyB1c2UgInNoYXJlZCBtZW1vcnkiIGZvcgorICAgIGNvcHlpbmcgYnVmZmVycyBhcm91bmQuICBNYWtlIFNVUkUgaXQgZG9lc24ndCBjb25mbGljdCB3aXRoIGFueSBvdGhlcgorICAgIHVzZWQgbWVtb3J5IGluIHlvdXIgc3lzdGVtIQorCUEwMDAwCQktIFZHQSBncmFwaGljcyBtZW1vcnkgKG9rIGlmIHlvdSBkb24ndCBoYXZlIFZHQSkKKyAgICAgICAgQjAwMDAJCS0gTW9ub2Nocm9tZSB0ZXh0IG1vZGUKKyAgICAgICAgQzAwMDAJCVwgIE9uZSBvZiB0aGVzZSBpcyB5b3VyIFZHQSBCSU9TIC0gdXN1YWxseSBDMDAwMC4KKyAgICAgICAgRTAwMDAJCS8KKyAgICAgICAgRjAwMDAJCS0gU3lzdGVtIEJJT1MKKworICAgIEFueXRoaW5nIGxlc3MgdGhhbiAweEEwMDAwIGlzLCB3ZWxsLCBhIEJBRCBpZGVhIHNpbmNlIGl0IGlzbid0IGFib3ZlCisgICAgNjQway4KKwktIEF2ZXJ5J3MgZmF2b3VyaXRlOiAweEQwMDAwCisKKyAgLSB0aGUgc3RhdGlvbiBhZGRyZXNzOiAgRXZlcnkgQVJDbmV0IGNhcmQgaGFzIGl0cyBvd24gInVuaXF1ZSIgbmV0d29yaworICAgIGFkZHJlc3MgZnJvbSAwIHRvIDI1NS4gIFVubGlrZSBFdGhlcm5ldCwgeW91IGNhbiBzZXQgdGhpcyBhZGRyZXNzCisgICAgeW91cnNlbGYgd2l0aCBhIGp1bXBlciBvciBzd2l0Y2ggKG9yIG9uIHNvbWUgY2FyZHMsIHdpdGggc3BlY2lhbAorICAgIHNvZnR3YXJlKS4gIFNpbmNlIGl0J3Mgb25seSA4IGJpdHMsIHlvdSBjYW4gb25seSBoYXZlIDI1NCBBUkNuZXQgY2FyZHMKKyAgICBvbiBhIG5ldHdvcmsuICBET04nVCB1c2UgMCBvciAyNTUsIHNpbmNlIHRoZXNlIGFyZSByZXNlcnZlZCAoYWx0aG91Z2gKKyAgICBuZWF0IHN0dWZmIHdpbGwgcHJvYmFibHkgaGFwcGVuIGlmIHlvdSBETyB1c2UgdGhlbSkuICBCeSB0aGUgd2F5LCBpZiB5b3UKKyAgICBoYXZlbid0IGFscmVhZHkgZ3Vlc3NlZCwgZG9uJ3Qgc2V0IHRoaXMgdGhlIHNhbWUgYXMgYW55IG90aGVyIEFSQ25ldCBvbgorICAgIHlvdXIgbmV0d29yayEKKwktIEF2ZXJ5J3MgZmF2b3VyaXRlOiAgMyBhbmQgNC4gIE5vdCB0aGF0IGl0IG1hdHRlcnMuCisKKyAgLSBUaGVyZSBtYXkgYmUgRVRTMSBhbmQgRVRTMiBzZXR0aW5ncy4gIFRoZXNlIG1heSBvciBtYXkgbm90IG1ha2UgYQorICAgIGRpZmZlcmVuY2Ugb24geW91ciBjYXJkIChtYW55IG1hbnVhbHMgY2FsbCB0aGVtICJyZXNlcnZlZCIpLCBidXQgYXJlCisgICAgdXNlZCB0byBjaGFuZ2UgdGhlIGRlbGF5cyB1c2VkIHdoZW4gcG93ZXJpbmcgdXAgYSBjb21wdXRlciBvbiB0aGUKKyAgICBuZXR3b3JrLiAgVGhpcyBpcyBvbmx5IG5lY2Vzc2FyeSB3aGVuIHdpcmluZyBWRVJZIGxvbmcgcmFuZ2UgQVJDbmV0CisgICAgbmV0d29ya3MsIG9uIHRoZSBvcmRlciBvZiA0a20gb3Igc287IGluIGFueSBjYXNlLCB0aGUgb25seSByZWFsCisgICAgcmVxdWlyZW1lbnQgaGVyZSBpcyB0aGF0IGFsbCBjYXJkcyBvbiB0aGUgbmV0d29yayB3aXRoIEVUUzEgYW5kIEVUUzIKKyAgICBqdW1wZXJzIGhhdmUgdGhlbSBpbiB0aGUgc2FtZSBwb3NpdGlvbi4gIENocmlzIEhpbmR5IDxjaHJpc2hAaW8ub3JnPgorICAgIHNlbnQgaW4gYSBjaGFydCB3aXRoIGFjdHVhbCB2YWx1ZXMgZm9yIHRoaXM6CisJRVQxCUVUMglSZXNwb25zZSBUaW1lCVJlY29uZmlndXJhdGlvbiBUaW1lCisJLS0tCS0tLQktLS0tLS0tLS0tLS0tCS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJb3BlbglvcGVuCTc0Ljd1cwkJODQwdXMKKwlvcGVuCWNsb3NlZAkyODMuNHVzCQkxNjgwdXMKKwljbG9zZWQJb3Blbgk1NjEuOHVzCQkxNjgwdXMKKwljbG9zZWQJY2xvc2VkCTExMTguNnVzCTE2ODB1cworICAgIAorICAgIE1ha2Ugc3VyZSB5b3Ugc2V0IEVUUzEgYW5kIEVUUzIgdG8gdGhlIFNBTUUgVkFMVUUgZm9yIGFsbCBjYXJkcyBvbiB5b3VyCisgICAgbmV0d29yay4KKyAgICAKK0Fsc28sIG9uIG1hbnkgY2FyZHMgKG5vdCBtaW5lLCB0aG91Z2gpIHRoZXJlIGFyZSByZWQgYW5kIGdyZWVuIExFRCdzLiAKK1ZvanRlY2ggUGF2bGlrIDx2b2p0ZWNoQHN1c2UuY3o+IHRlbGxzIG1lIHRoaXMgaXMgd2hhdCB0aGV5IG1lYW46CisJR1JFRU4gICAgICAgICAgIFJFRCAgICAgICAgICAgICBTdGF0dXMKKwktLS0tLQkJLS0tCQktLS0tLS0KKwlPRkYgICAgICAgICAgICAgT0ZGICAgICAgICAgICAgIFBvd2VyIG9mZgorCU9GRiAgICAgICAgICAgICBTaG9ydCBmbGFzaGVzICAgQ2FibGluZyBwcm9ibGVtcyAoYnJva2VuIGNhYmxlIG9yIG5vdAorCQkJCQkgIHRlcm1pbmF0ZWQpCisJT0ZGIChzaG9ydCkgICAgIE9OICAgICAgICAgICAgICBDYXJkIGluaXQKKwlPTiAgICAgICAgICAgICAgT04gICAgICAgICAgICAgIE5vcm1hbCBzdGF0ZSAtIGV2ZXJ5dGhpbmcgT0ssIG5vdGhpbmcKKwkJCQkJICBoYXBwZW5zCisJT04gICAgICAgICAgICAgIExvbmcgZmxhc2hlcyAgICBEYXRhIHRyYW5zZmVyCisJT04gICAgICAgICAgICAgIE9GRiAgICAgICAgICAgICBOZXZlciBoYXBwZW5zIChtYXliZSB3aGVuIHdyb25nIElEKQorCisKK1RoZSBmb2xsb3dpbmcgaXMgYWxsIHRoZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBwZW9wbGUgaGF2ZSBzZW50IG1lIGFib3V0Cit0aGVpciBvd24gcGFydGljdWxhciBBUkNuZXQgY2FyZHMuICBJdCBpcyBvZmZpY2lhbGx5IGEgbWVzcywgYW5kIGNvbnRhaW5zCitodWdlIGFtb3VudHMgb2YgZHVwbGljYXRlZCBpbmZvcm1hdGlvbi4gIEkgaGF2ZSBubyB0aW1lIHRvIGZpeCBpdC4gIElmIHlvdQord2FudCB0bywgUExFQVNFIERPISAgSnVzdCBzZW5kIG1lIGEgJ2RpZmYgLXUnIG9mIGFsbCB5b3VyIGNoYW5nZXMuCisKK1RoZSBtb2RlbCAjIGlzIGxpc3RlZCByaWdodCBhYm92ZSBzcGVjaWZpY3MgZm9yIHRoYXQgY2FyZCwgc28geW91IHNob3VsZCBiZQorYWJsZSB0byB1c2UgeW91ciB0ZXh0IHZpZXdlcidzICJzZWFyY2giIGZ1bmN0aW9uIHRvIGZpbmQgdGhlIGVudHJ5IHlvdSB3YW50LiAKK0lmIHlvdSBkb24ndCBLTk9XIHdoYXQga2luZCBvZiBjYXJkIHlvdSBoYXZlLCB0cnkgbG9va2luZyB0aHJvdWdoIHRoZQordmFyaW91cyBkaWFncmFtcyB0byBzZWUgaWYgeW91IGNhbiB0ZWxsLgorCitJZiB5b3VyIG1vZGVsIGlzbid0IGxpc3RlZCBhbmQvb3IgaGFzIGRpZmZlcmVudCBzZXR0aW5ncywgUExFQVNFIFBMRUFTRQordGVsbCBtZS4gIEkgaGFkIHRvIGZpZ3VyZSBtaW5lIG91dCB3aXRob3V0IHRoZSBtYW51YWwsIGFuZCBpdCBXQVNOJ1QgRlVOIQorCitFdmVuIGlmIHlvdXIgQVJDbmV0IG1vZGVsIGlzbid0IGxpc3RlZCwgYnV0IGhhcyB0aGUgc2FtZSBqdW1wZXJzIGFzIGFub3RoZXIKK21vZGVsIHRoYXQgaXMsIHBsZWFzZSBlLW1haWwgbWUgdG8gc2F5IHNvLgorCitDYXJkcyBMaXN0ZWQgaW4gdGhpcyBmaWxlIChpbiB0aGlzIG9yZGVyLCBtb3N0bHkpOgorCisJTWFudWZhY3R1cmVyCU1vZGVsICMJCQlCaXRzCisJLS0tLS0tLS0tLS0tCS0tLS0tLS0JCQktLS0tCisJU01DCQlQQzEwMAkJCTgKKwlTTUMJCVBDMTEwCQkJOAorCVNNQwkJUEMxMjAJCQk4CisJU01DCQlQQzEzMAkJCTgKKwlTTUMJCVBDMjcwRQkJCTgKKwlTTUMJCVBDNTAwCQkJMTYKKwlTTUMJCVBDNTAwTG9uZ2JvYXJkCQkxNgorCVNNQwkJUEM1NTBMb25nYm9hcmQJCTE2CisJU01DCQlQQzYwMAkJCTE2CisJU01DCQlQQzcxMAkJCTgKKwlTTUM/CQlMQ1MtODgzMCgtVCkJCTgvMTYKKwlQdXJlZGF0YQlQREk1MDcJCQk4CisJQ05ldCBUZWNoCUNOMTIwLVNlcmllcwkJOAorCUNOZXQgVGVjaAlDTjE2MC1TZXJpZXMJCTE2CisJTGFudGVjaD8JVU05MDY1TCBjaGlwc2V0CQk4CisJQWNlcgkJNTIxMC0wMDMJCTgKKwlEYXRhcG9pbnQ/CUxBTi1BUkMtOAkJOAorCVRvcHdhcmUJCVRBLUFSQy8xMAkJOAorCVRob21hcy1Db25yYWQJNTAwLTYyNDItMDA5NyBSRVYgQQk4CisJV2F0ZXJsb28/CShDKTE5ODUgV2F0ZXJsb28gTWljcm8uIDgKKwlObyBOYW1lCQktLQkJCTgvMTYKKwlObyBOYW1lCQlUYWl3YW4gUi5PLkM/CQk4CisJTm8gTmFtZQkJTW9kZWwgOTA1OAkJOAorCVRpYXJhCQlUaWFyYSBMYW5jYXJkPwkJOAorCQorCisqKiBTTUMgPSBTdGFuZGFyZCBNaWNyb3N5c3RlbXMgQ29ycC4KKyoqIENOZXQgVGVjaCA9IENOZXQgVGVjaG5vbG9neSwgSW5jLgorCisKK1VuY2xhc3NpZmllZCBTdHVmZgorLS0tLS0tLS0tLS0tLS0tLS0tCisgIC0gUGxlYXNlIHNlbmQgYW55IG90aGVyIGluZm9ybWF0aW9uIHlvdSBjYW4gZmluZC4KKyAgCisgIC0gQW5kIHNvbWUgb3RoZXIgc3R1ZmYgKG1vcmUgaW5mbyBpcyB3ZWxjb21lISk6CisgICAgIEZyb206IHJvb3RAdWx0cmF3b3JsZC54czRhbGwubmwgKFRpbW8gSGlsYnJpbmspCisgICAgIFRvOiBhcGVud2FyckBmb3huZXQubmV0IChBdmVyeSBQZW5uYXJ1bikKKyAgICAgRGF0ZTogV2VkLCAyNiBPY3QgMTk5NCAwMjoxMDozMiArMDAwMCAoR01UKQorICAgICBSZXBseS1UbzogdGltb2hAeHM0YWxsLm5sCisKKyAgICAgWy4uLnBhcnRzIGRlbGV0ZWQuLi5dCisKKyAgICAgQWJvdXQgdGhlIGp1bXBlcnM6IE9uIG15IFBDMTMwIHRoZXJlIGlzIG9uZSBtb3JlIGp1bXBlciwgbG9jYXRlZCBuZWFyIHRoZQorICAgICBjYWJsZS1jb25uZWN0b3IgYW5kIGl0J3MgZm9yIGNoYW5naW5nIHRvIHN0YXIgb3IgYnVzIHRvcG9sb2d5OyAKKyAgICAgY2xvc2VkOiBzdGFyIC0gb3BlbjogYnVzCisgICAgIE9uIHRoZSBQQzUwMCBhcmUgc29tZSBtb3JlIGp1bXBlci1waW5zLCBvbmUgYmxvY2sgbGFiZWxlZCB3aXRoIFJYLFBETixUWEkKKyAgICAgYW5kIGFub3RoZXIgd2l0aCBBTEUsTEExNyxMQTE4LExBMTkgdGhlc2UgYXJlIHVuZG9jdW1lbnRlZC4uCisKKyAgICAgWy4uLm1vcmUgcGFydHMgZGVsZXRlZC4uLl0KKworICAgICAtLS0gQ1VUIC0tLQorCisKKyoqIFN0YW5kYXJkIE1pY3Jvc3lzdGVtcyBDb3JwIChTTUMpICoqCitQQzEwMCwgUEMxMTAsIFBDMTIwLCBQQzEzMCAoOC1iaXQgY2FyZHMpCitQQzUwMCwgUEM2MDAgKDE2LWJpdCBjYXJkcykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAtIG1haW5seSBmcm9tIEF2ZXJ5IFBlbm5hcnVuIDxhcGVud2FyckB3b3JsZHZpc2lvbnMuY2E+LiAgVmFsdWVzIGRlcGljdGVkCisgICAgYXJlIGZyb20gQXZlcnkncyBzZXR1cC4KKyAgLSBzcGVjaWFsIHRoYW5rcyB0byBUaW1vIEhpbGJyaW5rIDx0aW1vaEB4czRhbGwubmw+IGZvciBub3RpbmcgdGhhdCBQQzEyMCwKKyAgICAxMzAsIDUwMCwgYW5kIDYwMCBhbGwgaGF2ZSB0aGUgc2FtZSBzd2l0Y2hlcyBhcyBBdmVyeSdzIFBDMTAwLiAKKyAgICBQQzUwMC82MDAgaGF2ZSBzZXZlcmFsIGV4dHJhLCB1bmRvY3VtZW50ZWQgcGlucyB0aG91Z2guICg/KQorICAtIFBDMTEwIHNldHRpbmdzIHdlcmUgdmVyaWZpZWQgYnkgU3RlcGhlbiBBLiBXb29kIDxzYXdAY2ViYWYuZ292PgorICAtIEFsc28sIHRoZSBKUC0gYW5kIFMtbnVtYmVycyBwcm9iYWJseSBkb24ndCBtYXRjaCB5b3VyIGNhcmQgZXhhY3RseS4gIFRyeQorICAgIHRvIGZpbmQganVtcGVycy9zd2l0Y2hlcyB3aXRoIHRoZSBzYW1lIG51bWJlciBvZiBzZXR0aW5ncyAtIGl0J3MKKyAgICBwcm9iYWJseSBtb3JlIHJlbGlhYmxlLgorICAKKworICAgICBKUDUJCSAgICAgICBbfF0gICAgOiAgICA6ICAgIDogICAgOgorKElSUSBTZXR0aW5nKQkJICAgICAgSVJRMiAgSVJRMyBJUlE0IElSUTUgSVJRNworCQlQdXQgZXhhY3RseSBvbmUganVtcGVyIG9uIGV4YWN0bHkgb25lIHNldCBvZiBwaW5zLgorCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgMiAgIDMgIDQgIDUgIDYgICA3ICA4ICA5IDEwCisgICAgIFMxICAgICAgICAgICAgICAgIC8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXAorKEkvTyBhbmQgTWVtb3J5ICAgICAgICB8ICAxICAxICogMCAgMCAgMCAgMCAqIDEgIDEgIDAgIDEgIHwKKyBhZGRyZXNzZXMpICAgICAgICAgICAgXC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vCisgICAgICAgICAgICAgICAgICAgICAgICAgIHwtLXwgICB8LS0tLS0tLS18ICAgfC0tLS0tLS0tfAorICAgICAgICAgICAgICAgICAgICAgICAgICAoYSkgICAgICAgKGIpICAgICAgICAgICAobSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgV0FSTklORy4gIEl0J3MgdmVyeSBpbXBvcnRhbnQgd2hlbiBzZXR0aW5nIHRoZXNlIHdoaWNoIHdheQorICAgICAgICAgICAgICAgIHlvdSdyZSBob2xkaW5nIHRoZSBjYXJkLCBhbmQgd2hpY2ggd2F5IHlvdSB0aGluayBpcyAnMSchCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgSWYgeW91IHN1c3BlY3QgdGhhdCB5b3VyIHNldHRpbmdzIGFyZSBub3QgYmVpbmcgbWFkZQorCQljb3JyZWN0bHksIHRyeSByZXZlcnNpbmcgdGhlIGRpcmVjdGlvbiBvciBpbnZlcnRpbmcgdGhlCisJCXN3aXRjaCBwb3NpdGlvbnMuCisKKwkJYTogVGhlIGZpcnN0IGRpZ2l0IG9mIHRoZSBJL08gYWRkcmVzcy4KKwkJCVNldHRpbmcJCVZhbHVlCisJCQktLS0tLS0tCQktLS0tLQorCQkJMDAJCTAKKwkJCTAxCQkxCisJCQkxMAkJMgorCQkJMTEJCTMKKworCQliOiBUaGUgc2Vjb25kIGRpZ2l0IG9mIHRoZSBJL08gYWRkcmVzcy4KKwkJCVNldHRpbmcJCVZhbHVlCisJCQktLS0tLS0tCQktLS0tLQorCQkJMDAwMAkJMAorCQkJMDAwMQkJMQorCQkJMDAxMAkJMgorCQkJLi4uCQkuLi4KKwkJCTExMTAJCUUKKwkJCTExMTEJCUYKKworCQlUaGUgSS9PIGFkZHJlc3MgaXMgaW4gdGhlIGZvcm0gYWIwLiAgRm9yIGV4YW1wbGUsIGlmCisJCWEgaXMgMHgyIGFuZCBiIGlzIDB4RSwgdGhlIGFkZHJlc3Mgd2lsbCBiZSAweDJFMC4KKworCQlETyBOT1QgU0VUIFRISVMgTEVTUyBUSEFOIDB4MjAwISEhISEKKworCisJCW06IFRoZSBmaXJzdCBkaWdpdCBvZiB0aGUgbWVtb3J5IGFkZHJlc3MuCisJCQlTZXR0aW5nCQlWYWx1ZQorCQkJLS0tLS0tLQkJLS0tLS0KKwkJCTAwMDAJCTAKKwkJCTAwMDEJCTEKKwkJCTAwMTAJCTIKKwkJCS4uLgkJLi4uCisJCQkxMTEwCQlFCisJCQkxMTExCQlGCisKKwkJVGhlIG1lbW9yeSBhZGRyZXNzIGlzIGluIHRoZSBmb3JtIG0wMDAwLiAgRm9yIGV4YW1wbGUsIGlmCisJCW0gaXMgRCwgdGhlIGFkZHJlc3Mgd2lsbCBiZSAweEQwMDAwLgorCisJCURPIE5PVCBTRVQgVEhJUyBUTyBDMDAwMCwgRjAwMDAsIE9SIExFU1MgVEhBTiBBMDAwMCEKKworICAgICAgICAgICAgICAgICAgICAgICAgICAxICAyICAzICA0ICA1ICA2ICA3ICA4CisgICAgIFMyICAgICAgICAgICAgICAgIC8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVwKKyhTdGF0aW9uIEFkZHJlc3MpICAgICAgfCAgMSAgMSAgMCAgMCAgMCAgMCAgMCAgMCAgfAorICAgICAgICAgICAgICAgICAgICAgICBcLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vCisKKwkJCVNldHRpbmcJCVZhbHVlCisJCQktLS0tLS0tCQktLS0tLQorCQkJMDAwMDAwMDAJMDAKKwkJCTEwMDAwMDAwCTAxCisJCQkwMTAwMDAwMAkwMgorCQkJLi4uCisJCQkwMTExMTExMQlGRQorCQkJMTExMTExMTEJRkYKKworCQlOb3RlIHRoYXQgdGhpcyBpcyBiaW5hcnkgd2l0aCB0aGUgZGlnaXRzIHJldmVyc2VkIQorCisJCURPIE5PVCBTRVQgVEhJUyBUTyAwIE9SIDI1NSAoMHhGRikhCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworKiogU3RhbmRhcmQgTWljcm9zeXN0ZW1zIENvcnAgKFNNQykgKioKK1BDMTMwRS9QQzI3MEUgKDgtYml0IGNhcmRzKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC0gZnJvbSBKdWVyZ2VuIFNlaWZlcnQgPHNlaWZlcnRAaHR3bS5kZT4KKworCitTVEFOREFSRCBNSUNST1NZU1RFTVMgQ09SUE9SQVRJT04gKFNNQykgQVJDTkVUKFIpLVBDMTMwRS9QQzI3MEUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGRlc2NyaXB0aW9uIGhhcyBiZWVuIHdyaXR0ZW4gYnkgSnVlcmdlbiBTZWlmZXJ0IDxzZWlmZXJ0QGh0d20uZGU+Cit1c2luZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBmb2xsb3dpbmcgT3JpZ2luYWwgU01DIE1hbnVhbCAKKworICAgICAgICAgICAgICJDb25maWd1cmF0aW9uIEd1aWRlIGZvcgorICAgICAgICAgICAgIEFSQ05FVChSKS1QQzEzMEUvUEMyNzAKKyAgICAgICAgICAgIE5ldHdvcmsgQ29udHJvbGxlciBCb2FyZHMKKyAgICAgICAgICAgICAgICBQdWIuICMgOTAwLjA0NEEKKyAgICAgICAgICAgICAgICAgICBKdW5lLCAxOTg5IgorCitBUkNORVQgaXMgYSByZWdpc3RlcmVkIHRyYWRlbWFyayBvZiB0aGUgRGF0YXBvaW50IENvcnBvcmF0aW9uCitTTUMgaXMgYSByZWdpc3RlcmVkIHRyYWRlbWFyayBvZiB0aGUgU3RhbmRhcmQgTWljcm9zeXN0ZW1zIENvcnBvcmF0aW9uICAKKworVGhlIFBDMTMwRSBpcyBhbiBlbmhhbmNlZCB2ZXJzaW9uIG9mIHRoZSBQQzEzMCBib2FyZCwgaXMgZXF1aXBwZWQgd2l0aCBhIAorc3RhbmRhcmQgQk5DIGZlbWFsZSBjb25uZWN0b3IgZm9yIGNvbm5lY3Rpb24gdG8gUkctNjIvVSBjb2F4IGNhYmxlLgorU2luY2UgdGhpcyBib2FyZCBpcyBkZXNpZ25lZCBib3RoIGZvciBwb2ludC10by1wb2ludCBjb25uZWN0aW9uIGluIHN0YXIKK25ldHdvcmtzIGFuZCBmb3IgY29ubmVjdGlvbiB0byBidXMgbmV0d29ya3MsIGl0IGlzIGRvd253YXJkbHkgY29tcGF0aWJsZSAKK3dpdGggYWxsIHRoZSBvdGhlciBzdGFuZGFyZCBib2FyZHMgZGVzaWduZWQgZm9yIGNvYXggbmV0d29ya3MgKHRoYXQgaXMsCit0aGUgUEMxMjAsIFBDMTEwIGFuZCBQQzEwMCBzdGFyIHRvcG9sb2d5IGJvYXJkcyBhbmQgdGhlIFBDMjIwLCBQQzIxMCBhbmQgCitQQzIwMCBidXMgdG9wb2xvZ3kgYm9hcmRzKS4KKworVGhlIFBDMjcwRSBpcyBhbiBlbmhhbmNlZCB2ZXJzaW9uIG9mIHRoZSBQQzI2MCBib2FyZCwgaXMgZXF1aXBwZWQgd2l0aCB0d28gCittb2R1bGFyIFJKMTEtdHlwZSBqYWNrcyBmb3IgY29ubmVjdGlvbiB0byB0d2lzdGVkIHBhaXIgd2lyaW5nLgorSXQgY2FuIGJlIHVzZWQgaW4gYSBzdGFyIG9yIGEgZGFpc3ktY2hhaW5lZCBuZXR3b3JrLgorCisKKyAgICAgICAgIDggNyA2IDUgNCAzIDIgMQorICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgIHwgICB8ICAgICAgIFMxICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgIHxfX19fX19fX19fX19fX19fX3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgIE9mZnN8QmFzZSB8SS9PIEFkZHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgIFJBTSBBZGRyIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ffAorICAgfCAgICAgICAgIF9fXyAgX19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1IzIHxfX198CisgICB8ICAgICAgICB8ICAgXC8gICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUjQgfF9fX3wKKyAgIHwgICAgICAgIHwgIFBST00gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ffAorICAgfCAgICAgICAgfCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOIHwgICB8IDgKKyAgIHwgICAgICAgIHwgU09DS0VUIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyB8ICAgfCA3CisgICB8ICAgICAgICB8X19fX19fX198ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgfCAgIHwgNgorICAgfCAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX19fX19fX19fICAgICAgICAgICAgICAgICAgICBlIHwgICB8IDUKKyAgIHwgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgQSB8IFMgfCA0CisgICB8ICAgICAgIHxvb3wgRVhUMiAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIGQgfCAyIHwgMworICAgfCAgICAgICB8b298IEVYVDEgIHwgICAgICAgU01DICAgICAgICAgfCAgICAgICAgICAgICAgICAgICBkIHwgICB8IDIKKyAgIHwgICAgICAgfG9vfCBST00gICB8ICAgICAgOTBDNjMgICAgICAgIHwgICAgICAgICAgICAgICAgICAgciB8X19ffCAxCisgICB8ICAgICAgIHxvb3wgSVJRNyAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfG98ICBfX19fX3wKKyAgIHwgICAgICAgfG9vfCBJUlE1ICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8b3wgfCBKMSAgfAorICAgfCAgICAgICB8b298IElSUTQgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgU1RBUiB8X19fX198CisgICB8ICAgICAgIHxvb3wgSVJRMyAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgSjIgIHwKKyAgIHwgICAgICAgfG9vfCBJUlEyICB8X19fX19fX19fX19fX19fX19fX3wgICAgICAgICAgICAgICAgICAgfF9fX19ffAorICAgfF9fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19fX19fX19fX19fX198CisgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICB8X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19ffAorCitMZWdlbmQ6CisKK1NNQyA5MEM2MwlBUkNORVQgQ29udHJvbGxlciAvIFRyYW5zY2VpdmVyIC9Mb2dpYworUzEJMS0zOglJL08gQmFzZSBBZGRyZXNzIFNlbGVjdAorCTQtNjoJTWVtb3J5IEJhc2UgQWRkcmVzcyBTZWxlY3QKKwk3LTg6CVJBTSBPZmZzZXQgU2VsZWN0CitTMgkxLTg6CU5vZGUgSUQgU2VsZWN0CitFWFQJCUV4dGVuZGVkIFRpbWVvdXQgU2VsZWN0CitST00JCVJPTSBFbmFibGUgU2VsZWN0CitTVEFSCQlTZWxlY3RlZCAtIFN0YXIgVG9wb2xvZ3kJKFBDMTMwRSBvbmx5KQorCQlEZXNlbGVjdGVkIC0gQnVzIFRvcG9sb2d5CShQQzEzMEUgb25seSkKK0NSMy9DUjQJCURpYWdub3N0aWMgTEVEcworSjEJCUJOQyBSRzYyL1UgQ29ubmVjdG9yCQkoUEMxMzBFIG9ubHkpCitKMQkJNi1wb3NpdGlvbiBUZWxlcGhvbmUgSmFjawkoUEMyNzBFIG9ubHkpCitKMgkJNi1wb3NpdGlvbiBUZWxlcGhvbmUgSmFjawkoUEMyNzBFIG9ubHkpCisKK1NldHRpbmcgb25lIG9mIHRoZSBzd2l0Y2hlcyB0byBPZmYvT3BlbiBtZWFucyAiMSIsIE9uL0Nsb3NlZCBtZWFucyAiMCIuCisKKworU2V0dGluZyB0aGUgTm9kZSBJRAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZWlnaHQgc3dpdGNoZXMgaW4gZ3JvdXAgUzIgYXJlIHVzZWQgdG8gc2V0IHRoZSBub2RlIElELgorVGhlc2Ugc3dpdGNoZXMgd29yayBpbiBhIHdheSBzaW1pbGFyIHRvIHRoZSBQQzEwMC1zZXJpZXMgY2FyZHM7IHNlZSB0aGF0CitlbnRyeSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCitTZXR0aW5nIHRoZSBJL08gQmFzZSBBZGRyZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmaXJzdCB0aHJlZSBzd2l0Y2hlcyBpbiBzd2l0Y2ggZ3JvdXAgUzEgYXJlIHVzZWQgdG8gc2VsZWN0IG9uZQorb2YgZWlnaHQgcG9zc2libGUgSS9PIEJhc2UgYWRkcmVzc2VzIHVzaW5nIHRoZSBmb2xsb3dpbmcgdGFibGUKKworCisgICBTd2l0Y2ggfCBIZXggSS9PCisgICAxIDIgMyAgfCBBZGRyZXNzCisgICAtLS0tLS0tfC0tLS0tLS0tCisgICAwIDAgMCAgfCAgMjYwCisgICAwIDAgMSAgfCAgMjkwCisgICAwIDEgMCAgfCAgMkUwICAoTWFudWZhY3R1cmVyJ3MgZGVmYXVsdCkKKyAgIDAgMSAxICB8ICAyRjAKKyAgIDEgMCAwICB8ICAzMDAKKyAgIDEgMCAxICB8ICAzNTAKKyAgIDEgMSAwICB8ICAzODAKKyAgIDEgMSAxICB8ICAzRTAKKworCitTZXR0aW5nIHRoZSBCYXNlIE1lbW9yeSAoUkFNKSBidWZmZXIgQWRkcmVzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG1lbW9yeSBidWZmZXIgcmVxdWlyZXMgMksgb2YgYSAxNksgYmxvY2sgb2YgUkFNLiBUaGUgYmFzZSBvZiB0aGlzCisxNksgYmxvY2sgY2FuIGJlIGxvY2F0ZWQgaW4gYW55IG9mIGVpZ2h0IHBvc2l0aW9ucy4KK1N3aXRjaGVzIDQtNiBvZiBzd2l0Y2ggZ3JvdXAgUzEgc2VsZWN0IHRoZSBCYXNlIG9mIHRoZSAxNksgYmxvY2suCitXaXRoaW4gdGhhdCAxNksgYWRkcmVzcyBzcGFjZSwgdGhlIGJ1ZmZlciBtYXkgYmUgYXNzaWduZWQgYW55IG9uZSBvZiBmb3VyIAorcG9zaXRpb25zLCBkZXRlcm1pbmVkIGJ5IHRoZSBvZmZzZXQsIHN3aXRjaGVzIDcgYW5kIDggb2YgZ3JvdXAgUzEuCisKKyAgIFN3aXRjaCAgICAgfCBIZXggUkFNIHwgSGV4IFJPTQorICAgNCA1IDYgIDcgOCB8IEFkZHJlc3MgfCBBZGRyZXNzICopCisgICAtLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0KKyAgIDAgMCAwICAwIDAgfCAgQzAwMDAgIHwgIEMyMDAwCisgICAwIDAgMCAgMCAxIHwgIEMwODAwICB8ICBDMjAwMAorICAgMCAwIDAgIDEgMCB8ICBDMTAwMCAgfCAgQzIwMDAKKyAgIDAgMCAwICAxIDEgfCAgQzE4MDAgIHwgIEMyMDAwCisgICAgICAgICAgICAgIHwgICAgICAgICB8CisgICAwIDAgMSAgMCAwIHwgIEM0MDAwICB8ICBDNjAwMAorICAgMCAwIDEgIDAgMSB8ICBDNDgwMCAgfCAgQzYwMDAKKyAgIDAgMCAxICAxIDAgfCAgQzUwMDAgIHwgIEM2MDAwCisgICAwIDAgMSAgMSAxIHwgIEM1ODAwICB8ICBDNjAwMAorICAgICAgICAgICAgICB8ICAgICAgICAgfAorICAgMCAxIDAgIDAgMCB8ICBDQzAwMCAgfCAgQ0UwMDAKKyAgIDAgMSAwICAwIDEgfCAgQ0M4MDAgIHwgIENFMDAwCisgICAwIDEgMCAgMSAwIHwgIENEMDAwICB8ICBDRTAwMAorICAgMCAxIDAgIDEgMSB8ICBDRDgwMCAgfCAgQ0UwMDAKKyAgICAgICAgICAgICAgfCAgICAgICAgIHwKKyAgIDAgMSAxICAwIDAgfCAgRDAwMDAgIHwgIEQyMDAwICAoTWFudWZhY3R1cmVyJ3MgZGVmYXVsdCkKKyAgIDAgMSAxICAwIDEgfCAgRDA4MDAgIHwgIEQyMDAwCisgICAwIDEgMSAgMSAwIHwgIEQxMDAwICB8ICBEMjAwMAorICAgMCAxIDEgIDEgMSB8ICBEMTgwMCAgfCAgRDIwMDAKKyAgICAgICAgICAgICAgfCAgICAgICAgIHwKKyAgIDEgMCAwICAwIDAgfCAgRDQwMDAgIHwgIEQ2MDAwCisgICAxIDAgMCAgMCAxIHwgIEQ0ODAwICB8ICBENjAwMAorICAgMSAwIDAgIDEgMCB8ICBENTAwMCAgfCAgRDYwMDAKKyAgIDEgMCAwICAxIDEgfCAgRDU4MDAgIHwgIEQ2MDAwCisgICAgICAgICAgICAgIHwgICAgICAgICB8CisgICAxIDAgMSAgMCAwIHwgIEQ4MDAwICB8ICBEQTAwMAorICAgMSAwIDEgIDAgMSB8ICBEODgwMCAgfCAgREEwMDAKKyAgIDEgMCAxICAxIDAgfCAgRDkwMDAgIHwgIERBMDAwCisgICAxIDAgMSAgMSAxIHwgIEQ5ODAwICB8ICBEQTAwMAorICAgICAgICAgICAgICB8ICAgICAgICAgfAorICAgMSAxIDAgIDAgMCB8ICBEQzAwMCAgfCAgREUwMDAKKyAgIDEgMSAwICAwIDEgfCAgREM4MDAgIHwgIERFMDAwCisgICAxIDEgMCAgMSAwIHwgIEREMDAwICB8ICBERTAwMAorICAgMSAxIDAgIDEgMSB8ICBERDgwMCAgfCAgREUwMDAKKyAgICAgICAgICAgICAgfCAgICAgICAgIHwKKyAgIDEgMSAxICAwIDAgfCAgRTAwMDAgIHwgIEUyMDAwCisgICAxIDEgMSAgMCAxIHwgIEUwODAwICB8ICBFMjAwMAorICAgMSAxIDEgIDEgMCB8ICBFMTAwMCAgfCAgRTIwMDAKKyAgIDEgMSAxICAxIDEgfCAgRTE4MDAgIHwgIEUyMDAwCisgIAorKikgVG8gZW5hYmxlIHRoZSA4SyBCb290IFBST00gaW5zdGFsbCB0aGUganVtcGVyIFJPTS4KKyAgIFRoZSBkZWZhdWx0IGlzIGp1bXBlciBST00gbm90IGluc3RhbGxlZC4KKworCitTZXR0aW5nIHRoZSBUaW1lb3V0cyBhbmQgSW50ZXJydXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBqdW1wZXJzIGxhYmVsZWQgRVhUMSBhbmQgRVhUMiBhcmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHRpbWVvdXQgCitwYXJhbWV0ZXJzLiBUaGVzZSB0d28ganVtcGVycyBhcmUgbm9ybWFsbHkgbGVmdCBvcGVuLgorCitUbyBzZWxlY3QgYSBoYXJkd2FyZSBpbnRlcnJ1cHQgbGV2ZWwgc2V0IG9uZSAob25seSBvbmUhKSBvZiB0aGUganVtcGVycworSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNy4gVGhlIE1hbnVmYWN0dXJlcidzIGRlZmF1bHQgaXMgSVJRMi4KKyAKKworQ29uZmlndXJpbmcgdGhlIFBDMTMwRSBmb3IgU3RhciBvciBCdXMgVG9wb2xvZ3kKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBzaW5nbGUganVtcGVyIGxhYmVsZWQgU1RBUiBpcyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgUEMxMzBFIGJvYXJkIGZvciAKK3N0YXIgb3IgYnVzIHRvcG9sb2d5LgorV2hlbiB0aGUganVtcGVyIGlzIGluc3RhbGxlZCwgdGhlIGJvYXJkIG1heSBiZSB1c2VkIGluIGEgc3RhciBuZXR3b3JrLCB3aGVuIAoraXQgaXMgcmVtb3ZlZCwgdGhlIGJvYXJkIGNhbiBiZSB1c2VkIGluIGEgYnVzIHRvcG9sb2d5LgorCisKK0RpYWdub3N0aWMgTEVEcworLS0tLS0tLS0tLS0tLS0tCisKK1R3byBkaWFnbm9zdGljIExFRHMgYXJlIHZpc2libGUgb24gdGhlIHJlYXIgYnJhY2tldCBvZiB0aGUgYm9hcmQuCitUaGUgZ3JlZW4gTEVEIG1vbml0b3JzIHRoZSBuZXR3b3JrIGFjdGl2aXR5OiB0aGUgcmVkIG9uZSBzaG93cyB0aGUKK2JvYXJkIGFjdGl2aXR5OgorCisgR3JlZW4gIHwgU3RhdHVzICAgICAgICAgICAgICAgUmVkICAgICAgfCBTdGF0dXMKKyAtLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0gICAtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLQorICBvbiAgICB8IG5vcm1hbCBhY3Rpdml0eSAgICAgIGZsYXNoL29uIHwgZGF0YSB0cmFuc2ZlcgorICBibGluayB8IHJlY29uZmlndXJhdGlvbiAgICAgIG9mZiAgICAgIHwgbm8gZGF0YSB0cmFuc2ZlcjsKKyAgb2ZmICAgfCBkZWZlY3RpdmUgYm9hcmQgb3IgICAgICAgICAgICB8IGluY29ycmVjdCBtZW1vcnkgb3IKKyAgICAgICAgfCBub2RlIElEIGlzIHplcm8gICAgICAgICAgICAgICB8IEkvTyBhZGRyZXNzCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworKiogU3RhbmRhcmQgTWljcm9zeXN0ZW1zIENvcnAgKFNNQykgKioKK1BDNTAwL1BDNTUwIExvbmdib2FyZCAoMTYtYml0IGNhcmRzKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAtIGZyb20gSnVlcmdlbiBTZWlmZXJ0IDxzZWlmZXJ0QGh0d20uZGU+CisKKworU1RBTkRBUkQgTUlDUk9TWVNURU1TIENPUlBPUkFUSU9OIChTTUMpIEFSQ05FVC1QQzUwMC9QQzU1MCBMb25nIEJvYXJkCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTm90ZTogVGhlcmUgaXMgYW5vdGhlciBWZXJzaW9uIG9mIHRoZSBQQzUwMCBjYWxsZWQgU2hvcnQgVmVyc2lvbiwgd2hpY2ggCisgICAgICBpcyBkaWZmZXJlbnQgaW4gaGFyZC0gYW5kIHNvZnR3YXJlISBUaGUgbW9zdCBpbXBvcnRhbnQgZGlmZmVyZW5jZXMKKyAgICAgIGFyZToKKyAgICAgIC0gVGhlIGxvbmcgYm9hcmQgaGFzIG5vIFNoYXJlZCBtZW1vcnkuCisgICAgICAtIE9uIHRoZSBsb25nIGJvYXJkIHRoZSBzZWxlY3Rpb24gb2YgdGhlIGludGVycnVwdCBpcyBkb25lIGJ5IGJpbmFyeQorICAgICAgICBjb2RlZCBzd2l0Y2gsIG9uIHRoZSBzaG9ydCBib2FyZCBkaXJlY3RseSBieSBqdW1wZXIuCisgICAgICAgIAorW0F2ZXJ5J3Mgbm90ZTogcGF5IHNwZWNpYWwgYXR0ZW50aW9uIHRvIHRoYXQ6IHRoZSBsb25nIGJvYXJkIEhBUyBOTyBTSEFSRUQKK01FTU9SWS4gIFRoaXMgbWVhbnMgdGhlIGN1cnJlbnQgTGludXgtQVJDbmV0IGRyaXZlciBjYW4ndCB1c2UgdGhlc2UgY2FyZHMuIAorSSBoYXZlIG9idGFpbmVkIGEgUEM1MDBMb25nYm9hcmQgYW5kIHdpbGwgYmUgZG9pbmcgc29tZSBleHBlcmltZW50cyBvbiBpdCBpbgordGhlIGZ1dHVyZSwgYnV0IGRvbid0IGhvbGQgeW91ciBicmVhdGguICBUaGFua3MgYWdhaW4gdG8gSnVlcmdlbiBTZWlmZXJ0IGZvcgoraGlzIGFkdmljZSBhYm91dCB0aGlzIV0KKworVGhpcyBkZXNjcmlwdGlvbiBoYXMgYmVlbiB3cml0dGVuIGJ5IEp1ZXJnZW4gU2VpZmVydCA8c2VpZmVydEBodHdtLmRlPgordXNpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgZm9sbG93aW5nIE9yaWdpbmFsIFNNQyBNYW51YWwgCisKKyAgICAgICAgICAgICAiQ29uZmlndXJhdGlvbiBHdWlkZSBmb3IKKyAgICAgICAgICAgICBTTUMgQVJDTkVULVBDNTAwL1BDNTUwCisgICAgICAgICBTZXJpZXMgTmV0d29yayBDb250cm9sbGVyIEJvYXJkcworICAgICAgICAgICAgIFB1Yi4gIyA5MDAuMDMzIFJldi4gQQorICAgICAgICAgICAgICAgIE5vdmVtYmVyLCAxOTg5IgorCitBUkNORVQgaXMgYSByZWdpc3RlcmVkIHRyYWRlbWFyayBvZiB0aGUgRGF0YXBvaW50IENvcnBvcmF0aW9uCitTTUMgaXMgYSByZWdpc3RlcmVkIHRyYWRlbWFyayBvZiB0aGUgU3RhbmRhcmQgTWljcm9zeXN0ZW1zIENvcnBvcmF0aW9uICAKKworVGhlIFBDNTAwIGlzIGVxdWlwcGVkIHdpdGggYSBzdGFuZGFyZCBCTkMgZmVtYWxlIGNvbm5lY3RvciBmb3IgY29ubmVjdGlvbgordG8gUkctNjIvVSBjb2F4IGNhYmxlLgorVGhlIGJvYXJkIGlzIGRlc2lnbmVkIGJvdGggZm9yIHBvaW50LXRvLXBvaW50IGNvbm5lY3Rpb24gaW4gc3RhciBuZXR3b3JrcworYW5kIGZvciBjb25uZWN0aW9uIHRvIGJ1cyBuZXR3b3Jrcy4KKworVGhlIFBDNTUwIGlzIGVxdWlwcGVkIHdpdGggdHdvIG1vZHVsYXIgUkoxMS10eXBlIGphY2tzIGZvciBjb25uZWN0aW9uCit0byB0d2lzdGVkIHBhaXIgd2lyaW5nLgorSXQgY2FuIGJlIHVzZWQgaW4gYSBzdGFyIG9yIGEgZGFpc3ktY2hhaW5lZCAoQlVTKSBuZXR3b3JrLgorCisgICAgICAgMSAKKyAgICAgICAwIDkgOCA3IDYgNSA0IDMgMiAxICAgICA2IDUgNCAzIDIgMQorICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICA8IHwgICAgICAgICBTVzEgICAgICAgICB8IHwgICAgIFNXMiAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICA+IHxfX19fX19fX19fX19fX19fX19fX198IHxfX19fX19fX19fX19ffCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICA8ICAgSVJRICAgIHxJL08gQWRkciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX198CisgICA8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1I0IHxfX198CisgICA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1IzIHxfX198CisgICA8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX198CisgICA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOIHwgICB8IDgKKyAgIDwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8gfCAgIHwgNworICAgPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCB8IFMgfCA2CisgICA8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlIHwgVyB8IDUKKyAgID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgfCAzIHwgNAorICAgPCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCB8ICAgfCAzCisgICA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkIHwgICB8IDIKKyAgIDwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgfF9fX3wgMQorICAgPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfG98ICAgIF9fX19ffAorICAgPCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfG98ICAgfCBKMSAgfAorICAgPiAgMyAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlA2ICAgfF9fX19ffAorICAgPCB8b3xvfCBKUDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBKMiAgfAorICAgPiB8b3xvfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfF9fX19ffAorICAgPCAgNCAyX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19fX19ffAorICAgPiAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgPF9fX198ICB8X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19ffAorCitMZWdlbmQ6CisKK1NXMQkxLTY6CUkvTyBCYXNlIEFkZHJlc3MgU2VsZWN0CisJNy0xMDoJSW50ZXJydXB0IFNlbGVjdAorU1cyCTEtNjoJUmVzZXJ2ZWQgZm9yIEZ1dHVyZSBVc2UKK1NXMwkxLTg6CU5vZGUgSUQgU2VsZWN0CitKUDIJMS00OglFeHRlbmRlZCBUaW1lb3V0IFNlbGVjdAorSlA2CQlTZWxlY3RlZCAtIFN0YXIgVG9wb2xvZ3kJKFBDNTAwIG9ubHkpCisJCURlc2VsZWN0ZWQgLSBCdXMgVG9wb2xvZ3kJKFBDNTAwIG9ubHkpCitDUjMJR3JlZW4JTW9uaXRvcnMgTmV0d29yayBBY3Rpdml0eQorQ1I0CVJlZAlNb25pdG9ycyBCb2FyZCBBY3Rpdml0eQorSjEJCUJOQyBSRzYyL1UgQ29ubmVjdG9yCQkoUEM1MDAgb25seSkKK0oxCQk2LXBvc2l0aW9uIFRlbGVwaG9uZSBKYWNrCShQQzU1MCBvbmx5KQorSjIJCTYtcG9zaXRpb24gVGVsZXBob25lIEphY2sJKFBDNTUwIG9ubHkpCisKK1NldHRpbmcgb25lIG9mIHRoZSBzd2l0Y2hlcyB0byBPZmYvT3BlbiBtZWFucyAiMSIsIE9uL0Nsb3NlZCBtZWFucyAiMCIuCisKKworU2V0dGluZyB0aGUgTm9kZSBJRAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZWlnaHQgc3dpdGNoZXMgaW4gZ3JvdXAgU1czIGFyZSB1c2VkIHRvIHNldCB0aGUgbm9kZSBJRC4gRWFjaCBub2RlCithdHRhY2hlZCB0byB0aGUgbmV0d29yayBtdXN0IGhhdmUgYW4gdW5pcXVlIG5vZGUgSUQgd2hpY2ggbXVzdCBiZSAKK2RpZmZlcmVudCBmcm9tIDAuCitTd2l0Y2ggMSBzZXJ2ZXMgYXMgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCAoTFNCKS4KKworVGhlIG5vZGUgSUQgaXMgdGhlIHN1bSBvZiB0aGUgdmFsdWVzIG9mIGFsbCBzd2l0Y2hlcyBzZXQgdG8gIjEiICAKK1RoZXNlIHZhbHVlcyBhcmU6CisKKyAgICBTd2l0Y2ggfCBWYWx1ZQorICAgIC0tLS0tLS18LS0tLS0tLQorICAgICAgMSAgICB8ICAgMQorICAgICAgMiAgICB8ICAgMgorICAgICAgMyAgICB8ICAgNAorICAgICAgNCAgICB8ICAgOAorICAgICAgNSAgICB8ICAxNgorICAgICAgNiAgICB8ICAzMgorICAgICAgNyAgICB8ICA2NAorICAgICAgOCAgICB8IDEyOAorCitTb21lIEV4YW1wbGVzOgorCisgICAgU3dpdGNoICAgICAgICAgfCBIZXggICAgIHwgRGVjaW1hbCAKKyAgIDggNyA2IDUgNCAzIDIgMSB8IE5vZGUgSUQgfCBOb2RlIElECisgICAtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0KKyAgIDAgMCAwIDAgMCAwIDAgMCB8ICAgIG5vdCBhbGxvd2VkCisgICAwIDAgMCAwIDAgMCAwIDEgfCAgICAxICAgIHwgICAgMSAKKyAgIDAgMCAwIDAgMCAwIDEgMCB8ICAgIDIgICAgfCAgICAyCisgICAwIDAgMCAwIDAgMCAxIDEgfCAgICAzICAgIHwgICAgMworICAgICAgIC4gLiAuICAgICAgIHwgICAgICAgICB8CisgICAwIDEgMCAxIDAgMSAwIDEgfCAgIDU1ICAgIHwgICA4NQorICAgICAgIC4gLiAuICAgICAgIHwgICAgICAgICB8CisgICAxIDAgMSAwIDEgMCAxIDAgfCAgIEFBICAgIHwgIDE3MAorICAgICAgIC4gLiAuICAgICAgIHwgICAgICAgICB8ICAKKyAgIDEgMSAxIDEgMSAxIDAgMSB8ICAgRkQgICAgfCAgMjUzCisgICAxIDEgMSAxIDEgMSAxIDAgfCAgIEZFICAgIHwgIDI1NAorICAgMSAxIDEgMSAxIDEgMSAxIHwgICBGRiAgICB8ICAyNTUgCisKKworU2V0dGluZyB0aGUgSS9PIEJhc2UgQWRkcmVzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZmlyc3Qgc2l4IHN3aXRjaGVzIGluIHN3aXRjaCBncm91cCBTVzEgYXJlIHVzZWQgdG8gc2VsZWN0IG9uZQorb2YgMzIgcG9zc2libGUgSS9PIEJhc2UgYWRkcmVzc2VzIHVzaW5nIHRoZSBmb2xsb3dpbmcgdGFibGUKKworICAgU3dpdGNoICAgICAgIHwgSGV4IEkvTworICAgNiA1ICA0IDMgMiAxIHwgQWRkcmVzcworICAgLS0tLS0tLS0tLS0tLXwtLS0tLS0tLQorICAgMCAxICAwIDAgMCAwIHwgIDIwMAorICAgMCAxICAwIDAgMCAxIHwgIDIxMAorICAgMCAxICAwIDAgMSAwIHwgIDIyMAorICAgMCAxICAwIDAgMSAxIHwgIDIzMAorICAgMCAxICAwIDEgMCAwIHwgIDI0MAorICAgMCAxICAwIDEgMCAxIHwgIDI1MAorICAgMCAxICAwIDEgMSAwIHwgIDI2MAorICAgMCAxICAwIDEgMSAxIHwgIDI3MAorICAgMCAxICAxIDAgMCAwIHwgIDI4MAorICAgMCAxICAxIDAgMCAxIHwgIDI5MAorICAgMCAxICAxIDAgMSAwIHwgIDJBMAorICAgMCAxICAxIDAgMSAxIHwgIDJCMAorICAgMCAxICAxIDEgMCAwIHwgIDJDMAorICAgMCAxICAxIDEgMCAxIHwgIDJEMAorICAgMCAxICAxIDEgMSAwIHwgIDJFMCAoTWFudWZhY3R1cmVyJ3MgZGVmYXVsdCkKKyAgIDAgMSAgMSAxIDEgMSB8ICAyRjAKKyAgIDEgMSAgMCAwIDAgMCB8ICAzMDAKKyAgIDEgMSAgMCAwIDAgMSB8ICAzMTAKKyAgIDEgMSAgMCAwIDEgMCB8ICAzMjAKKyAgIDEgMSAgMCAwIDEgMSB8ICAzMzAKKyAgIDEgMSAgMCAxIDAgMCB8ICAzNDAKKyAgIDEgMSAgMCAxIDAgMSB8ICAzNTAKKyAgIDEgMSAgMCAxIDEgMCB8ICAzNjAKKyAgIDEgMSAgMCAxIDEgMSB8ICAzNzAKKyAgIDEgMSAgMSAwIDAgMCB8ICAzODAKKyAgIDEgMSAgMSAwIDAgMSB8ICAzOTAKKyAgIDEgMSAgMSAwIDEgMCB8ICAzQTAKKyAgIDEgMSAgMSAwIDEgMSB8ICAzQjAKKyAgIDEgMSAgMSAxIDAgMCB8ICAzQzAKKyAgIDEgMSAgMSAxIDAgMSB8ICAzRDAKKyAgIDEgMSAgMSAxIDEgMCB8ICAzRTAKKyAgIDEgMSAgMSAxIDEgMSB8ICAzRjAKKworCitTZXR0aW5nIHRoZSBJbnRlcnJ1cHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTd2l0Y2hlcyBzZXZlbiB0aHJvdWdoIHRlbiBvZiBzd2l0Y2ggZ3JvdXAgU1cxIGFyZSB1c2VkIHRvIHNlbGVjdCB0aGUgCitpbnRlcnJ1cHQgbGV2ZWwuIFRoZSBpbnRlcnJ1cHQgbGV2ZWwgaXMgYmluYXJ5IGNvZGVkLCBzbyBzZWxlY3Rpb25zIAorZnJvbSAwIHRvIDE1IHdvdWxkIGJlIHBvc3NpYmxlLCBidXQgb25seSB0aGUgZm9sbG93aW5nIGVpZ2h0IHZhbHVlcyB3aWxsCitiZSBzdXBwb3J0ZWQ6IDMsIDQsIDUsIDcsIDksIDEwLCAxMSwgMTIuCisKKyAgIFN3aXRjaCAgIHwgSVJRCisgICAxMCA5IDggNyB8IAorICAgLS0tLS0tLS0tfC0tLS0tLS0tIAorICAgIDAgMCAxIDEgfCAgMworICAgIDAgMSAwIDAgfCAgNAorICAgIDAgMSAwIDEgfCAgNQorICAgIDAgMSAxIDEgfCAgNworICAgIDEgMCAwIDEgfCAgOSAoPTIpIChkZWZhdWx0KQorICAgIDEgMCAxIDAgfCAxMAorICAgIDEgMCAxIDEgfCAxMQorICAgIDEgMSAwIDAgfCAxMgorCisKK1NldHRpbmcgdGhlIFRpbWVvdXRzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHR3byBqdW1wZXJzIEpQMiAoMS00KSBhcmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHRpbWVvdXQgcGFyYW1ldGVycy4gCitUaGVzZSB0d28ganVtcGVycyBhcmUgbm9ybWFsbHkgbGVmdCBvcGVuLgorUmVmZXIgdG8gdGhlIENPTTkwMjYgRGF0YSBTaGVldCBmb3IgYWx0ZXJuYXRlIGNvbmZpZ3VyYXRpb25zLgorCisKK0NvbmZpZ3VyaW5nIHRoZSBQQzUwMCBmb3IgU3RhciBvciBCdXMgVG9wb2xvZ3kKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHNpbmdsZSBqdW1wZXIgbGFiZWxlZCBKUDYgaXMgdXNlZCB0byBjb25maWd1cmUgdGhlIFBDNTAwIGJvYXJkIGZvciAKK3N0YXIgb3IgYnVzIHRvcG9sb2d5LgorV2hlbiB0aGUganVtcGVyIGlzIGluc3RhbGxlZCwgdGhlIGJvYXJkIG1heSBiZSB1c2VkIGluIGEgc3RhciBuZXR3b3JrLCB3aGVuIAoraXQgaXMgcmVtb3ZlZCwgdGhlIGJvYXJkIGNhbiBiZSB1c2VkIGluIGEgYnVzIHRvcG9sb2d5LgorCisKK0RpYWdub3N0aWMgTEVEcworLS0tLS0tLS0tLS0tLS0tCisKK1R3byBkaWFnbm9zdGljIExFRHMgYXJlIHZpc2libGUgb24gdGhlIHJlYXIgYnJhY2tldCBvZiB0aGUgYm9hcmQuCitUaGUgZ3JlZW4gTEVEIG1vbml0b3JzIHRoZSBuZXR3b3JrIGFjdGl2aXR5OiB0aGUgcmVkIG9uZSBzaG93cyB0aGUKK2JvYXJkIGFjdGl2aXR5OgorCisgR3JlZW4gIHwgU3RhdHVzICAgICAgICAgICAgICAgUmVkICAgICAgfCBTdGF0dXMKKyAtLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0gICAtLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLQorICBvbiAgICB8IG5vcm1hbCBhY3Rpdml0eSAgICAgIGZsYXNoL29uIHwgZGF0YSB0cmFuc2ZlcgorICBibGluayB8IHJlY29uZmlndXJhdGlvbiAgICAgIG9mZiAgICAgIHwgbm8gZGF0YSB0cmFuc2ZlcjsKKyAgb2ZmICAgfCBkZWZlY3RpdmUgYm9hcmQgb3IgICAgICAgICAgICB8IGluY29ycmVjdCBtZW1vcnkgb3IKKyAgICAgICAgfCBub2RlIElEIGlzIHplcm8gICAgICAgICAgICAgICB8IEkvTyBhZGRyZXNzCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworKiogU01DICoqCitQQzcxMCAoOC1iaXQgY2FyZCkKKy0tLS0tLS0tLS0tLS0tLS0tLQorICAtIGZyb20gSi5TLiB2YW4gT29zdGVuIDxqdm9vc3RlbkBjb21waWxlci50ZGNuZXQubmw+CisgIAorTm90ZTogdGhpcyBkYXRhIGlzIGdhdGhlcmVkIGJ5IGV4cGVyaW1lbnRpbmcgYW5kIGxvb2tpbmcgYXQgaW5mbyBvZiBvdGhlcgorY2FyZHMuIEhvd2V2ZXIsIEknbSBzdXJlIEkgZ290IDk5JSBvZiB0aGUgc2V0dGluZ3MgcmlnaHQuCisKK1RoZSBTTUM3MTAgY2FyZCByZXNlbWJsZXMgdGhlIFBDMjcwIGNhcmQsIGJ1dCBpcyBtdWNoIG1vcmUgYmFzaWMgKGkuZS4gbm8KK0xFRHMsIFJKMTEgamFja3MsIGV0Yy4pIGFuZCA4IGJpdC4gSGVyZSdzIGEgbGl0dGxlIGRyYXdpbmc6CisKKyAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gICAKKyAgIHwgKy0tLS0tLS0tLSsgICstLS0tLS0tLS0rICAgICAgICAgICAgICB8X19fXworICAgfCB8ICAgUzIgICAgfCAgfCAgIFMxICAgIHwgICAgICAgICAgICAgIHwKKyAgIHwgKy0tLS0tLS0tLSsgICstLS0tLS0tLS0rICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgKz09PSsgICAgX18gICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgIHwgUiB8ICAgfCAgfCBYLXRhbCAgICAgICAgICAgICAgICAgIyMjX19fCisgICB8ICB8IE8gfCAgIHxfX3wgICAgICAgICAgICAgICAgICAgICAgIyMjI19fJ3wKKyAgIHwgIHwgTSB8ICAgIHx8ICAgICAgICAgICAgICAgICAgICAgICAgIyMjCisgICB8ICArPT09KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAuLiBKUDEgICArLS0tLS0tLS0tLSsgICAgICAgICAgICAgICB8CisgICB8ICAgLi4gICAgICAgfCBiaWcgY2hpcCB8ICAgICAgICAgICAgICAgfCAgIAorICAgfCAgIC4uICAgICAgIHwgIDkwQzYzICAgfCAgICAgICAgICAgICAgIHwKKyAgIHwgICAuLiAgICAgICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICB8CisgICB8ICAgLi4gICAgICAgKy0tLS0tLS0tLS0rICAgICAgICAgICAgICAgfAorICAgIC0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLQorICAgICAgICAgICB8fHx8fHx8fHx8fHx8fHx8fHx8fHwKKworVGhlIHJvdyBvZiBqdW1wZXJzIGF0IEpQMSBhY3R1YWxseSBjb25zaXN0cyBvZiA4IGp1bXBlcnMsIChzb21ldGltZXMKK2xhYmVsbGVkKSB0aGUgc2FtZSBhcyBvbiB0aGUgUEMyNzAsIGZyb20gdG9wIHRvIGJvdHRvbTogRVhUMiwgRVhUMSwgUk9NLAorSVJRNywgSVJRNSwgSVJRNCwgSVJRMywgSVJRMiAoZ2VlLCB3b25kZXIgd2hhdCB0aGV5IHdvdWxkIGRvPyA6LSkgKQorCitTMSBhbmQgUzIgcGVyZm9ybSB0aGUgc2FtZSBmdW5jdGlvbiBhcyBvbiB0aGUgUEMyNzAsIG9ubHkgdGhlaXIgbnVtYmVycworYXJlIHN3YXBwZWQgKFMxIGlzIHRoZSBub2RlYWRkcmVzcywgUzIgc2V0cyBJTy0gYW5kIFJBTS1hZGRyZXNzKS4KKworSSBrbm93IGl0IHdvcmtzIHdoZW4gY29ubmVjdGVkIHRvIGEgUEMxMTAgdHlwZSBBUkNuZXQgYm9hcmQuCisKKwkKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyoqIFBvc3NpYmx5IFNNQyAqKgorTENTLTg4MzAoLVQpICg4IGFuZCAxNi1iaXQgY2FyZHMpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLSBmcm9tIE1hdGhpYXMgS2F0emVyIDxta2F0emVyQEhSWi5VbmktQmllbGVmZWxkLkRFPgorICAtIE1hcmVrIE1pY2hhbGtpZXdpY3ogPG1hcmVrbUBpMTdsaW51eGIuaXN0cy5wd3Iud3JvYy5wbD4gc2F5cyB0aGUKKyAgICBMQ1MtODgzMCBpcyBzbGlnaHRseSBkaWZmZXJlbnQgZnJvbSBMQ1MtODgzMC1ULiAgVGhlc2UgYXJlIDggYml0LCBCVVMKKyAgICBvbmx5ICh0aGUgSlAwIGp1bXBlciBpcyBoYXJkd2lyZWQpLCBhbmQgQk5DIG9ubHkuCisJCitUaGlzIGlzIGEgTENTLTg4MzAtVCBtYWRlIGJ5IFNNQywgSSB0aGluayAoJ1NNQycgb25seSBhcHBlYXJzIG9uIG9uZSBQTENDLAorbm93aGVyZSBlbHNlLCBub3QgZXZlbiBvbiB0aGUgZmV3IFhlcm94ZWQgc2hlZXRzIGZyb20gdGhlIG1hbnVhbCkuCisKK1NNQyBBUkNuZXQgQm9hcmQgVHlwZSBMQ1MtODgzMC1UCisKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICBKUDMgODggIDggSlAyICAgICAgICAgfAorICB8ICAgICAgICMjIyMjICAgICAgfCBcICAgICAgICAgICAgICAgfAorICB8ICAgICAgICMjIyMjICAgIEVUMSBFVDIgICAgICAgICAgIyMjfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgIyMjfAorICB8ICBVMyAgIFNXIDEgICAgICAgICAgICAgICAgICBKUDAgIyMjfCAgUGhvbmUgSmFja3MKKyAgfCAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjI3wKKyAgfCB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCB8ICB8ICAgU1cyICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCB8ICB8ICAjIyMjIyAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgLS0gICAjIyMjIyAgICAgICAgICAgICAgICAgICAgICAgIyMjIyAgQk5DIENvbm5lY3RvciAKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIworICB8ICAgODg4ODg4IEpQMSAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgMjM0NTY3ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tCisgICAgIHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fAorICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitTVzE6IERJUC1Td2l0Y2hlcyBmb3IgU3RhdGlvbiBBZGRyZXNzCitTVzI6IERJUC1Td2l0Y2hlcyBmb3IgTWVtb3J5IEJhc2UgYW5kIEkvTyBCYXNlIGFkZHJlc3NlcworCitKUDA6IElmIGNsb3NlZCwgaW50ZXJuYWwgdGVybWluYXRpb24gb24gKGRlZmF1bHQgb3BlbikKK0pQMTogSVJRIEp1bXBlcnMKK0pQMjogQm9vdC1ST00gZW5hYmxlZCBpZiBjbG9zZWQKK0pQMzogSnVtcGVycyBmb3IgcmVzcG9uc2UgdGltZW91dAorIAorVTM6IEJvb3QtUk9NIFNvY2tldCAgICAgICAgICAKKworCitFVDEgRVQyICAgICBSZXNwb25zZSBUaW1lICAgICBJZGxlIFRpbWUgICAgUmVjb25maWd1cmF0aW9uIFRpbWUKKworICAgICAgICAgICAgICAgNzggICAgICAgICAgICAgICAgODYgICAgICAgICAgICAgICA4NDAKKyBYICAgICAgICAgICAgMjg1ICAgICAgICAgICAgICAgMzE2ICAgICAgICAgICAgICAxNjgwCisgICAgIFggICAgICAgIDU2MyAgICAgICAgICAgICAgIDYyNCAgICAgICAgICAgICAgMTY4MAorIFggICBYICAgICAgIDExMzAgICAgICAgICAgICAgIDEyMzcgICAgICAgICAgICAgIDE2ODAKKworKFggbWVhbnMgY2xvc2VkIGp1bXBlcikKKworKERJUC1Td2l0Y2ggZG93bndhcmRzIG1lYW5zICIwIikKKworVGhlIHN0YXRpb24gYWRkcmVzcyBpcyBiaW5hcnktY29kZWQgd2l0aCBTVzEuCisKK1RoZSBJL08gYmFzZSBhZGRyZXNzIGlzIGNvZGVkIHdpdGggRElQLVN3aXRjaGVzIDYsNyBhbmQgOCBvZiBTVzI6CisKK1N3aXRjaGVzICAgICAgICBCYXNlCis2NzggICAgICAgICAgICAgQWRkcmVzcworMDAwCQkyNjAtMjZmCisxMDAJCTI5MC0yOWYKKzAxMAkJMmUwLTJlZgorMTEwCQkyZjAtMmZmCiswMDEJCTMwMC0zMGYKKzEwMQkJMzUwLTM1ZgorMDExCQkzODAtMzhmCisxMTEgCQkzZTAtM2VmCisKKworRElQIFN3aXRjaGVzIDEtNSBvZiBTVzIgZW5jb2RlIHRoZSBSQU0gYW5kIFJPTSBBZGRyZXNzIFJhbmdlOgorCitTd2l0Y2hlcyAgICAgICAgUkFNICAgICAgICAgICBST00KKzEyMzQ1ICAgICAgICAgICBBZGRyZXNzIFJhbmdlICBBZGRyZXNzIFJhbmdlCiswMDAwMAkJQzowMDAwLUM6MDdmZglDOjIwMDAtQzozZmZmCisxMDAwMAkJQzowODAwLUM6MGZmZgorMDEwMDAJCUM6MTAwMC1DOjE3ZmYKKzExMDAwCQlDOjE4MDAtQzoxZmZmCiswMDEwMAkJQzo0MDAwLUM6NDdmZglDOjYwMDAtQzo3ZmZmCisxMDEwMAkJQzo0ODAwLUM6NGZmZgorMDExMDAJCUM6NTAwMC1DOjU3ZmYgCisxMTEwMAkJQzo1ODAwLUM6NWZmZgorMDAwMTAJCUM6QzAwMC1DOkM3ZmYJQzpFMDAwLUM6ZmZmZgorMTAwMTAJCUM6QzgwMC1DOkNmZmYKKzAxMDEwCQlDOkQwMDAtQzpEN2ZmCisxMTAxMAkJQzpEODAwLUM6RGZmZgorMDAxMTAJCUQ6MDAwMC1EOjA3ZmYJRDoyMDAwLUQ6M2ZmZgorMTAxMTAJCUQ6MDgwMC1EOjBmZmYKKzAxMTEwCQlEOjEwMDAtRDoxN2ZmCisxMTExMAkJRDoxODAwLUQ6MWZmZgorMDAwMDEJCUQ6NDAwMC1EOjQ3ZmYJRDo2MDAwLUQ6N2ZmZgorMTAwMDEJCUQ6NDgwMC1EOjRmZmYKKzAxMDAxCQlEOjUwMDAtRDo1N2ZmCisxMTAwMQkJRDo1ODAwLUQ6NWZmZgorMDAxMDEJCUQ6ODAwMC1EOjg3ZmYJRDpBMDAwLUQ6YmZmZgorMTAxMDEJCUQ6ODgwMC1EOjhmZmYKKzAxMTAxCQlEOjkwMDAtRDo5N2ZmCisxMTEwMQkJRDo5ODAwLUQ6OWZmZiAKKzAwMDExCQlEOkMwMDAtRDpjN2ZmCUQ6RTAwMC1EOmZmZmYKKzEwMDExCQlEOkM4MDAtRDpjZmZmCiswMTAxMQkJRDpEMDAwLUQ6ZDdmZgorMTEwMTEJCUQ6RDgwMC1EOmRmZmYKKzAwMTExCQlFOjAwMDAtRTowN2ZmCUU6MjAwMC1FOjNmZmYKKzEwMTExCQlFOjA4MDAtRTowZmZmCiswMTExMQkJRToxMDAwLUU6MTdmZgorMTExMTEJCUU6MTgwMC1FOjFmZmYKKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqKiBQdXJlRGF0YSBDb3JwICoqCitQREk1MDcgKDgtYml0IGNhcmQpCistLS0tLS0tLS0tLS0tLS0tLS0tLQorICAtIGZyb20gTWFyayBSZWpob24gPG1kcmVqaG9uQG1hZ2kuY29tPiAoc2xpZ2h0IG1vZGlmaWNhdGlvbnMgYnkgQXZlcnkpCisgIC0gQXZlcnkncyBub3RlOiBJIHRoaW5rIFBESTUwOCBjYXJkcyAoYnV0IGRlZmluaXRlbHkgTk9UIFBESTUwOFBsdXMgY2FyZHMpCisgICAgYXJlIG1vc3RseSB0aGUgc2FtZSBhcyB0aGlzLiAgUERJNTA4UGx1cyBjYXJkcyBhcHBlYXIgdG8gYmUgbWFpbmx5CisgICAgc29mdHdhcmUtY29uZmlndXJlZC4KKworSnVtcGVyczoKKwlUaGVyZSBpcyBhIGp1bXBlciBhcnJheSBhdCB0aGUgYm90dG9tIG9mIHRoZSBjYXJkLCBuZWFyIHRoZSBlZGdlCisgICAgICAgIGNvbm5lY3Rvci4gIFRoaXMgYXJyYXkgaXMgbGFiZWxsZWQgSjEuICBUaGV5IGNvbnRyb2wgdGhlIElSUXMgYW5kCisgICAgICAgIHNvbWV0aGluZyBlbHNlLiAgUHV0IG9ubHkgb25lIGp1bXBlciBvbiB0aGUgSVJRIHBpbnMuCisKKwlFVFMxLCBFVFMyIGFyZSBmb3IgdGltaW5nIG9uIHZlcnkgbG9uZyBkaXN0YW5jZSBuZXR3b3Jrcy4gIFNlZSB0aGUKKwltb3JlIGdlbmVyYWwgaW5mb3JtYXRpb24gbmVhciB0aGUgdG9wIG9mIHRoaXMgZmlsZS4KKworCVRoZXJlIGlzIGEgSjIganVtcGVyIG9uIHR3byBwaW5zLiAgQSBqdW1wZXIgc2hvdWxkIGJlIHB1dCBvbiB0aGVtLAorICAgICAgICBzaW5jZSBpdCB3YXMgYWxyZWFkeSB0aGVyZSB3aGVuIEkgZ290IHRoZSBjYXJkLiAgSSBkb24ndCBrbm93IHdoYXQKKyAgICAgICAgdGhpcyBqdW1wZXIgaXMgZm9yIHRob3VnaC4KKworCVRoZXJlIGlzIGEgdHdvLWp1bXBlciBhcnJheSBmb3IgSjMuICBJIGRvbid0IGtub3cgd2hhdCBpdCBpcyBmb3IsCisgICAgICAgIGJ1dCB0aGVyZSB3ZXJlIGFscmVhZHkgdHdvIGp1bXBlcnMgb24gaXQgd2hlbiBJIGdvdCB0aGUgY2FyZC4gIEl0J3MKKyAgICAgICAgYSBzaXggcGluIGdyaWQgaW4gYSB0d28tYnktdGhyZWUgZmFzaGlvbi4gIFRoZSBqdW1wZXJzIHdlcmUKKyAgICAgICAgY29uZmlndXJlZCBhcyBmb2xsb3dzOgorCisJICAgLi0tLS0tLS0uCisJIG8gfCBvICAgbyB8CisJICAgOi0tLS0tLS06ICAgIC0tLS0tLT4gQWNjZXNzaWJsZSBlbmQgb2YgY2FyZCB3aXRoIGNvbm5lY3RvcnMKKwkgbyB8IG8gICBvIHwgICAgICAgICAgICAgaW4gdGhpcyBkaXJlY3Rpb24gLS0tLS0tLT4KKwkgICBgLS0tLS0tLScKKworQ2FybCBkZSBCaWxseSA8Q0FSTEBjYXJhaW5mby5jb20+IGV4cGxhaW5zIEozIGFuZCBKNDoKKworCUozIERpYWdyYW06CisKKyAgICAgICAgICAgLi0tLS0tLS0uCisgICAgICAgICBvIHwgbyAgIG8gfAorICAgICAgICAgICA6LS0tLS0tLTogICAgVFdJU1QgVGVjaG5vbG9neQorICAgICAgICAgbyB8IG8gICBvIHwKKyAgICAgICAgICAgYC0tLS0tLS0nCisgICAgICAgICAgIC4tLS0tLS0tLgorICAgICAgICAgICB8IG8gICBvIHwgbworICAgICAgICAgICA6LS0tLS0tLTogICAgQ09BWCBUZWNobm9sb2d5CisgICAgICAgICAgIHwgbyAgIG8gfCBvCisgICAgICAgICAgIGAtLS0tLS0tJworCisgIC0gSWYgdXNpbmcgY29heCBjYWJsZSBpbiBhIGJ1cyB0b3BvbG9neSB0aGUgSjQganVtcGVyIG11c3QgYmUgcmVtb3ZlZDsKKyAgICBwbGFjZSBpdCBvbiBvbmUgcGluLgorCisgIC0gSWYgdXNpbmcgYnVzIHRvcG9sb2d5IHdpdGggdHdpc3RlZCBwYWlyIHdpcmluZyBtb3ZlIHRoZSBKMyAKKyAgICBqdW1wZXJzIHNvIHRoZXkgY29ubmVjdCB0aGUgbWlkZGxlIHBpbiBhbmQgdGhlIHBpbnMgY2xvc2VzdCB0byB0aGUgUkoxMQorICAgIENvbm5lY3RvcnMuICBBbHNvIHRoZSBKNCBqdW1wZXIgbXVzdCBiZSByZW1vdmVkOyBwbGFjZSBpdCBvbiBvbmUgcGluIG9mCisgICAgSjQganVtcGVyIGZvciBzdG9yYWdlLgorCisgIC0gSWYgdXNpbmcgIHN0YXIgdG9wb2xvZ3kgd2l0aCB0d2lzdGVkIHBhaXIgd2lyaW5nIG1vdmUgdGhlIEozIAorICAgIGp1bXBlcnMgc28gdGhleSBjb25uZWN0IHRoZSBtaWRkbGUgcGluIGFuZCB0aGUgcGlucyBjbG9zZXN0IHRvIHRoZSBSSjExCisgICAgY29ubmVjdG9ycy4KKworCitESVAgU3dpdGNoZXM6CisKKwlUaGUgRElQIHN3aXRjaGVzIGFjY2Vzc2libGUgb24gdGhlIGFjY2Vzc2libGUgZW5kIG9mIHRoZSBjYXJkIHdoaWxlCisgICAgICAgIGl0IGlzIGluc3RhbGxlZCwgaXMgdXNlZCB0byBzZXQgdGhlIEFSQ25ldCBhZGRyZXNzLiAgVGhlcmUgYXJlIDgKKyAgICAgICAgc3dpdGNoZXMuICBVc2UgYW4gYWRkcmVzcyBmcm9tIDEgdG8gMjU0LgorCisJU3dpdGNoIE5vLgorCTEyMzQ1Njc4CUFSQ25ldCBhZGRyZXNzCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkwMDAwMDAwMAlGRiAgCShEb24ndCB1c2UgdGhpcyEpCisJMDAwMDAwMDEJRkUKKwkwMDAwMDAxMAlGRAorCS4uLi4KKwkxMTExMTEwMQkyCQorCTExMTExMTEwCTEKKwkxMTExMTExMQkwCShEb24ndCB1c2UgdGhpcyEpCisKKwlUaGVyZSBpcyBhbm90aGVyIGFycmF5IG9mIGVpZ2h0IERJUCBzd2l0Y2hlcyBhdCB0aGUgdG9wIG9mIHRoZQorICAgICAgICBjYXJkLiAgVGhlcmUgYXJlIGZpdmUgbGFiZWxsZWQgTVMwLU1TNCB3aGljaCBzZWVtIHRvIGNvbnRyb2wgdGhlCisgICAgICAgIG1lbW9yeSBhZGRyZXNzLCBhbmQgYW5vdGhlciB0aHJlZSBsYWJlbGxlZCBJTzAtSU8yIHdoaWNoIHNlZW0gdG8KKyAgICAgICAgY29udHJvbCB0aGUgYmFzZSBJL08gYWRkcmVzcyBvZiB0aGUgY2FyZC4KKworCVRoaXMgd2FzIGRpZmZpY3VsdCB0byB0ZXN0IGJ5IHRyaWFsIGFuZCBlcnJvciwgYW5kIHRoZSBJL08gYWRkcmVzc2VzCisgICAgICAgIGFyZSBpbiBhIHdlaXJkIG9yZGVyLiAgVGhpcyB3YXMgdGVzdGVkIGJ5IHNldHRpbmcgdGhlIERJUCBzd2l0Y2hlcywKKyAgICAgICAgcmVib290aW5nIHRoZSBjb21wdXRlciwgYW5kIGF0dGVtcHRpbmcgdG8gbG9hZCBBUkNFVEhFUiBhdCB2YXJpb3VzCisgICAgICAgIGFkZHJlc3NlcyAobW9zdGx5IGJldHdlZW4gMHgyMDAgYW5kIDB4NDAwKS4gIFRoZSBhZGRyZXNzIHRoYXQgY2F1c2VkCisgICAgICAgIHRoZSByZWQgdHJhbnNtaXQgTEVEIHRvIGJsaW5rLCBpcyB0aGUgb25lIHRoYXQgSSB0aG91Z2h0IHdvcmtzLgorCisJQWxzbywgdGhlIGFkZHJlc3MgMHgzRDAgc2VlbSB0byBoYXZlIGEgc3BlY2lhbCBtZWFuaW5nLCBzaW5jZSB0aGUKKyAgICAgICAgQVJDRVRIRVIgcGFja2V0IGRyaXZlciBsb2FkZWQgZmluZSwgYnV0IHdpdGhvdXQgdGhlIHJlZCBMRUQKKyAgICAgICAgYmxpbmtpbmcuICBJIGRvbid0IGtub3cgd2hhdCAweDNEMCBpcyBmb3IgdGhvdWdoLiAgSSByZWNvbW1lbmQgdXNpbmcKKyAgICAgICAgYW4gYWRkcmVzcyBvZiAweDMwMCBzaW5jZSBXaW5kb3dzIG1heSBub3QgbGlrZSBhZGRyZXNzZXMgYmVsb3cKKyAgICAgICAgMHgzMDAuCisKKwlJTyBTd2l0Y2ggTm8uCisJMjEwICAgICAgICAgICAgIEkvTyBhZGRyZXNzCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCTExMSAgICAgICAgICAgICAweDI2MAorCTExMCAgICAgICAgICAgICAweDI5MAorCTEwMSAgICAgICAgICAgICAweDJFMAorCTEwMCAgICAgICAgICAgICAweDJGMAorCTAxMSAgICAgICAgICAgICAweDMwMAorCTAxMCAgICAgICAgICAgICAweDM1MAorCTAwMSAgICAgICAgICAgICAweDM4MAorCTAwMCAgICAgICAgICAgICAweDNFMAorCisJVGhlIG1lbW9yeSBzd2l0Y2hlcyBzZXQgYSByZXNlcnZlZCBhZGRyZXNzIHNwYWNlIG9mIDB4MTAwMCBieXRlcworICAgICAgICAoMHgxMDAgc2VnbWVudCB1bml0cywgb3IgNGspLiAgRm9yIGV4YW1wbGUgaWYgSSBzZXQgYW4gYWRkcmVzcyBvZgorICAgICAgICAweEQwMDAsIGl0IHdpbGwgdXNlIHVwIGFkZHJlc3NlcyAweEQwMDAgdG8gMHhEMTAwLgorCisJVGhlIG1lbW9yeSBzd2l0Y2hlcyB3ZXJlIHRlc3RlZCBieSBib290aW5nIHVzaW5nIFFFTU0zODYgc3RlYWx0aCwKKyAgICAgICAgYW5kIHVzaW5nIExPQURISSB0byBzZWUgd2hhdCBhZGRyZXNzIGF1dG9tYXRpY2FsbHkgYmVjYW1lIGV4Y2x1ZGVkCisgICAgICAgIGZyb20gdGhlIHVwcGVyIG1lbW9yeSByZWdpb25zLCBhbmQgdGhlbiBhdHRlbXB0aW5nIHRvIGxvYWQgQVJDRVRIRVIKKyAgICAgICAgdXNpbmcgdGhlc2UgYWRkcmVzc2VzLgorCisJSSByZWNvbW1lbmQgdXNpbmcgYW4gQVJDbmV0IG1lbW9yeSBhZGRyZXNzIG9mIDB4RDAwMCwgYW5kIHB1dHRpbmcKKyAgICAgICAgdGhlIEVNUyBwYWdlIGZyYW1lIGF0IDB4QzAwMCB3aGlsZSB1c2luZyBRRU1NIHN0ZWFsdGggbW9kZS4gIFRoYXQKKyAgICAgICAgd2F5LCB5b3UgZ2V0IGNvbnRpZ3VvdXMgaGlnaCBtZW1vcnkgZnJvbSAweEQxMDAgYWxtb3N0IGFsbCB0aGUgd2F5CisgICAgICAgIHRoZSBlbmQgb2YgdGhlIG1lZ2FieXRlLgorCisJTWVtb3J5IFN3aXRjaCAwIChNUzApIGRpZG4ndCBzZWVtIHRvIHdvcmsgcHJvcGVybHkgd2hlbiBzZXQgdG8gT0ZGCisgICAgICAgIG9uIG15IGNhcmQuICBJdCBjb3VsZCBiZSBtYWxmdW5jdGlvbmluZyBvbiBteSBjYXJkLiAgRXhwZXJpbWVudCB3aXRoCisgICAgICAgIGl0IE9OIGZpcnN0LCBhbmQgaWYgaXQgZG9lc24ndCB3b3JrLCBzZXQgaXQgdG8gT0ZGLiAgKEl0IG1heSBiZSBhCisgICAgICAgIG1vZGlmaWVyIGZvciB0aGUgMHgyMDAgYml0PykKKworCU1TIFN3aXRjaCBOby4KKwk0MzIxMCAgICAgICAgICAgTWVtb3J5IGFkZHJlc3MKKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCTAwMDAxICAgICAgICAgICAweEUxMDAgIChndWVzc2VkIC0gd2FzIG5vdCBkZXRlY3RlZCBieSBRRU1NKQorCTAwMDExICAgICAgICAgICAweEUwMDAgIChndWVzc2VkIC0gd2FzIG5vdCBkZXRlY3RlZCBieSBRRU1NKQorCTAwMTAxICAgICAgICAgICAweEREMDAKKwkwMDExMSAgICAgICAgICAgMHhEQzAwCisJMDEwMDEgICAgICAgICAgIDB4RDkwMAorCTAxMDExICAgICAgICAgICAweEQ4MDAKKwkwMTEwMSAgICAgICAgICAgMHhENTAwCisJMDExMTEgICAgICAgICAgIDB4RDQwMAorCTEwMDAxICAgICAgICAgICAweEQxMDAKKwkxMDAxMSAgICAgICAgICAgMHhEMDAwCisJMTAxMDEgICAgICAgICAgIDB4Q0QwMAorCTEwMTExICAgICAgICAgICAweENDMDAKKwkxMTAwMSAgICAgICAgICAgMHhDOTAwIChndWVzc2VkIC0gY3Jhc2hlcyB0ZXN0ZWQgc3lzdGVtKQorCTExMDExICAgICAgICAgICAweEM4MDAgKGd1ZXNzZWQgLSBjcmFzaGVzIHRlc3RlZCBzeXN0ZW0pCisJMTExMDEgICAgICAgICAgIDB4QzUwMCAoZ3Vlc3NlZCAtIGNyYXNoZXMgdGVzdGVkIHN5c3RlbSkKKwkxMTExMSAgICAgICAgICAgMHhDNDAwIChndWVzc2VkIC0gY3Jhc2hlcyB0ZXN0ZWQgc3lzdGVtKQorCQorCQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworKiogQ05ldCBUZWNobm9sb2d5IEluYy4gKioKKzEyMCBTZXJpZXMgKDgtYml0IGNhcmRzKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC0gZnJvbSBKdWVyZ2VuIFNlaWZlcnQgPHNlaWZlcnRAaHR3bS5kZT4KKworCitDTkVUIFRFQ0hOT0xPR1kgSU5DLiAoQ05ldCkgQVJDTkVUIDEyMEEgU0VSSUVTCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZGVzY3JpcHRpb24gaGFzIGJlZW4gd3JpdHRlbiBieSBKdWVyZ2VuIFNlaWZlcnQgPHNlaWZlcnRAaHR3bS5kZT4KK3VzaW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIGZvbGxvd2luZyBPcmlnaW5hbCBDTmV0IE1hbnVhbCAKKworICAgICAgICAgICAgICAiQVJDTkVUCisgICAgICAgICAgICBVU0VSJ1MgTUFOVUFMIAorICAgICAgICAgICAgICAgIGZvcgorICAgICAgICAgICAgICAgQ04xMjBBCisgICAgICAgICAgICAgICBDTjEyMEFCCisgICAgICAgICAgICAgICBDTjEyMFRQCisgICAgICAgICAgICAgICBDTjEyMFNUCisgICAgICAgICAgICAgICBDTjEyMFNCVAorICAgICAgICAgICAgIFAvTjoxMi0wMS0wMDA3CisgICAgICAgICAgICAgUmV2aXNpb24gMy4wMCIKKworQVJDTkVUIGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgdGhlIERhdGFwb2ludCBDb3Jwb3JhdGlvbgorCitQL04gMTIwQSAgIEFSQ05FVCA4IGJpdCBYVC9BVCBTdGFyCitQL04gMTIwQUIgIEFSQ05FVCA4IGJpdCBYVC9BVCBCdXMKK1AvTiAxMjBUUCAgQVJDTkVUIDggYml0IFhUL0FUIFR3aXN0ZWQgUGFpcgorUC9OIDEyMFNUICBBUkNORVQgOCBiaXQgWFQvQVQgU3RhciwgVHdpc3RlZCBQYWlyCitQL04gMTIwU0JUIEFSQ05FVCA4IGJpdCBYVC9BVCBTdGFyLCBCdXMsIFR3aXN0ZWQgUGFpcgorCisgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX3wKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTEVEIHxfX198CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ffAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE4gfCAgIHwgSUQ3CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyB8ICAgfCBJRDYKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkIHwgUyB8IElENQorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgfCBXIHwgSUQ0CisgICB8ICAgICAgICAgICAgICAgICAgICAgX19fX19fX19fX19fX19fX19fXyAgICAgICAgICAgICAgICAgICAgQSB8IDIgfCBJRDMKKyAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICBkIHwgICB8IElEMgorICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAxIDIgMyA0IDUgNiA3IDggIGQgfCAgIHwgSUQxCisgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgX19fX19fX19fX19fX19fX18gciB8X19ffCBJRDAKKyAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICA5MEM2NSAgICAgICAgfHwgICAgICAgU1cxICAgICAgIHwgIF9fX198CisgICB8ICBKUCA4IDcgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHx8X19fX19fX19fX19fX19fX198IHwgICAgfAorICAgfCAgICB8b3xvfCAgSlAxICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8IEoyIHwKKyAgIHwgICAgfG98b3wgIHxvb3wgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIEpQIDEgMSAxICAgfCAgICB8CisgICB8ICAgX19fX19fX19fX19fX18gICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAwIDEgMiAgIHxfX19ffAorICAgfCAgfCAgUFJPTSAgICAgICAgfCAgfF9fX19fX19fX19fX19fX19fX198ICAgICAgICAgICB8b3xvfG98ICBfX19fX3wKKyAgIHwgID4gIFNPQ0tFVCAgICAgIHwgIEpQIDYgNSA0IDMgMiAgICAgICAgICAgICAgICAgICAgfG98b3xvfCB8IEoxICB8CisgICB8ICB8X19fX19fX19fX19fX198ICAgIHxvfG98b3xvfG98ICAgICAgICAgICAgICAgICAgIHxvfG98b3wgfF9fX19ffAorICAgfF9fX19fICAgICAgICAgICAgICAgICB8b3xvfG98b3xvfCAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX19fX3wKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICB8X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19ffAorCitMZWdlbmQ6CisKKzkwQzY1ICAgICAgIEFSQ05FVCBQcm9iZQorUzEgIDEtNTogICAgQmFzZSBNZW1vcnkgQWRkcmVzcyBTZWxlY3QKKyAgICA2LTg6ICAgIEJhc2UgSS9PIEFkZHJlc3MgU2VsZWN0CitTMiAgMS04OiAgICBOb2RlIElEIFNlbGVjdCAoSUQwLUlENykKK0pQMSAgICAgUk9NIEVuYWJsZSBTZWxlY3QKK0pQMiAgICAgSVJRMgorSlAzICAgICBJUlEzCitKUDQgICAgIElSUTQKK0pQNSAgICAgSVJRNQorSlA2ICAgICBJUlE3CitKUDcvSlA4ICAgICBFVDEsIEVUMiBUaW1lb3V0IFBhcmFtZXRlcnMKK0pQMTAvSlAxMSAgIENvYXggLyBUd2lzdGVkIFBhaXIgU2VsZWN0ICAoQ04xMjBTVC9TQlQgb25seSkKK0pQMTIgICAgICAgIFRlcm1pbmF0b3IgU2VsZWN0ICAgICAgIChDTjEyMEFCL1NUL1NCVCBvbmx5KQorSjEgICAgICBCTkMgUkc2Mi9VIENvbm5lY3RvciAgICAgICAgKGFsbCBleGNlcHQgQ04xMjBUUCkKK0oyICAgICAgVHdvIDYtcG9zaXRpb24gVGVsZXBob25lIEphY2sgICAoQ04xMjBUUC9TVC9TQlQgb25seSkKKworU2V0dGluZyBvbmUgb2YgdGhlIHN3aXRjaGVzIHRvIE9mZiBtZWFucyAiMSIsIE9uIG1lYW5zICIwIi4KKworCitTZXR0aW5nIHRoZSBOb2RlIElECistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBlaWdodCBzd2l0Y2hlcyBpbiBTVzIgYXJlIHVzZWQgdG8gc2V0IHRoZSBub2RlIElELiBFYWNoIG5vZGUgYXR0YWNoZWQKK3RvIHRoZSBuZXR3b3JrIG11c3QgaGF2ZSBhbiB1bmlxdWUgbm9kZSBJRCB3aGljaCBtdXN0IGJlIGRpZmZlcmVudCBmcm9tIDAuCitTd2l0Y2ggMSAoSUQwKSBzZXJ2ZXMgYXMgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCAoTFNCKS4KKworVGhlIG5vZGUgSUQgaXMgdGhlIHN1bSBvZiB0aGUgdmFsdWVzIG9mIGFsbCBzd2l0Y2hlcyBzZXQgdG8gIjEiICAKK1RoZXNlIHZhbHVlcyBhcmU6CisKKyAgIFN3aXRjaCB8IExhYmVsIHwgVmFsdWUKKyAgIC0tLS0tLS18LS0tLS0tLXwtLS0tLS0tCisgICAgIDEgICAgfCBJRDAgICB8ICAgMQorICAgICAyICAgIHwgSUQxICAgfCAgIDIKKyAgICAgMyAgICB8IElEMiAgIHwgICA0CisgICAgIDQgICAgfCBJRDMgICB8ICAgOAorICAgICA1ICAgIHwgSUQ0ICAgfCAgMTYKKyAgICAgNiAgICB8IElENSAgIHwgIDMyCisgICAgIDcgICAgfCBJRDYgICB8ICA2NAorICAgICA4ICAgIHwgSUQ3ICAgfCAxMjgKKworU29tZSBFeGFtcGxlczoKKworICAgIFN3aXRjaCAgICAgICAgIHwgSGV4ICAgICB8IERlY2ltYWwgCisgICA4IDcgNiA1IDQgMyAyIDEgfCBOb2RlIElEIHwgTm9kZSBJRAorICAgLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tCisgICAwIDAgMCAwIDAgMCAwIDAgfCAgICBub3QgYWxsb3dlZAorICAgMCAwIDAgMCAwIDAgMCAxIHwgICAgMSAgICB8ICAgIDEgCisgICAwIDAgMCAwIDAgMCAxIDAgfCAgICAyICAgIHwgICAgMgorICAgMCAwIDAgMCAwIDAgMSAxIHwgICAgMyAgICB8ICAgIDMKKyAgICAgICAuIC4gLiAgICAgICB8ICAgICAgICAgfAorICAgMCAxIDAgMSAwIDEgMCAxIHwgICA1NSAgICB8ICAgODUKKyAgICAgICAuIC4gLiAgICAgICB8ICAgICAgICAgfAorICAgMSAwIDEgMCAxIDAgMSAwIHwgICBBQSAgICB8ICAxNzAKKyAgICAgICAuIC4gLiAgICAgICB8ICAgICAgICAgfCAgCisgICAxIDEgMSAxIDEgMSAwIDEgfCAgIEZEICAgIHwgIDI1MworICAgMSAxIDEgMSAxIDEgMSAwIHwgICBGRSAgICB8ICAyNTQKKyAgIDEgMSAxIDEgMSAxIDEgMSB8ICAgRkYgICAgfCAgMjU1CisKKworU2V0dGluZyB0aGUgSS9PIEJhc2UgQWRkcmVzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbGFzdCB0aHJlZSBzd2l0Y2hlcyBpbiBzd2l0Y2ggYmxvY2sgU1cxIGFyZSB1c2VkIHRvIHNlbGVjdCBvbmUKK29mIGVpZ2h0IHBvc3NpYmxlIEkvTyBCYXNlIGFkZHJlc3NlcyB1c2luZyB0aGUgZm9sbG93aW5nIHRhYmxlCisKKworICAgU3dpdGNoICAgICAgfCBIZXggSS9PCisgICAgNiAgIDcgICA4ICB8IEFkZHJlc3MKKyAgIC0tLS0tLS0tLS0tLXwtLS0tLS0tLQorICAgT04gIE9OICBPTiAgfCAgMjYwCisgICBPRkYgT04gIE9OICB8ICAyOTAKKyAgIE9OICBPRkYgT04gIHwgIDJFMCAgKE1hbnVmYWN0dXJlcidzIGRlZmF1bHQpCisgICBPRkYgT0ZGIE9OICB8ICAyRjAKKyAgIE9OICBPTiAgT0ZGIHwgIDMwMAorICAgT0ZGIE9OICBPRkYgfCAgMzUwCisgICBPTiAgT0ZGIE9GRiB8ICAzODAKKyAgIE9GRiBPRkYgT0ZGIHwgIDNFMAorCisKK1NldHRpbmcgdGhlIEJhc2UgTWVtb3J5IChSQU0pIGJ1ZmZlciBBZGRyZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbWVtb3J5IGJ1ZmZlciAoUkFNKSByZXF1aXJlcyAySy4gVGhlIGJhc2Ugb2YgdGhpcyBidWZmZXIgY2FuIGJlIAorbG9jYXRlZCBpbiBhbnkgb2YgZWlnaHQgcG9zaXRpb25zLiBUaGUgYWRkcmVzcyBvZiB0aGUgQm9vdCBQcm9tIGlzCittZW1vcnkgYmFzZSArIDhLIG9yIG1lbW9yeSBiYXNlICsgMHgyMDAwLgorU3dpdGNoZXMgMS01IG9mIHN3aXRjaCBibG9jayBTVzEgc2VsZWN0IHRoZSBNZW1vcnkgQmFzZSBhZGRyZXNzLgorCisgICBTd2l0Y2ggICAgICAgICAgICAgIHwgSGV4IFJBTSB8IEhleCBST00KKyAgICAxICAgMiAgIDMgICA0ICAgNSAgfCBBZGRyZXNzIHwgQWRkcmVzcyAqKQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tCisgICBPTiAgT04gIE9OICBPTiAgT04gIHwgIEMwMDAwICB8ICBDMjAwMAorICAgT04gIE9OICBPRkYgT04gIE9OICB8ICBDNDAwMCAgfCAgQzYwMDAKKyAgIE9OICBPTiAgT04gIE9GRiBPTiAgfCAgQ0MwMDAgIHwgIENFMDAwCisgICBPTiAgT04gIE9GRiBPRkYgT04gIHwgIEQwMDAwICB8ICBEMjAwMCAgKE1hbnVmYWN0dXJlcidzIGRlZmF1bHQpCisgICBPTiAgT04gIE9OICBPTiAgT0ZGIHwgIEQ0MDAwICB8ICBENjAwMAorICAgT04gIE9OICBPRkYgT04gIE9GRiB8ICBEODAwMCAgfCAgREEwMDAKKyAgIE9OICBPTiAgT04gIE9GRiBPRkYgfCAgREMwMDAgIHwgIERFMDAwCisgICBPTiAgT04gIE9GRiBPRkYgT0ZGIHwgIEUwMDAwICB8ICBFMjAwMAorICAKKyopIFRvIGVuYWJsZSB0aGUgQm9vdCBST00gaW5zdGFsbCB0aGUganVtcGVyIEpQMQorCitOb3RlOiBTaW5jZSB0aGUgc3dpdGNoZXMgMSBhbmQgMiBhcmUgYWx3YXlzIHNldCB0byBPTiBpdCBtYXkgYmUgcG9zc2libGUKKyAgICAgIHRoYXQgdGhleSBjYW4gYmUgdXNlZCB0byBhZGQgYW4gb2Zmc2V0IG9mIDJLLCA0SyBvciA2SyB0byB0aGUgYmFzZQorICAgICAgYWRkcmVzcywgYnV0IHRoaXMgZmVhdHVyZSBpcyBub3QgZG9jdW1lbnRlZCBpbiB0aGUgbWFudWFsIGFuZCBJCisgICAgICBoYXZlbid0IHRlc3RlZCBpdCB5ZXQuCisKKworU2V0dGluZyB0aGUgSW50ZXJydXB0IExpbmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIHNlbGVjdCBhIGhhcmR3YXJlIGludGVycnVwdCBsZXZlbCBpbnN0YWxsIG9uZSAob25seSBvbmUhKSBvZiB0aGUganVtcGVycworSlAyLCBKUDMsIEpQNCwgSlA1LCBKUDYuIEpQMiBpcyB0aGUgZGVmYXVsdC4KKworICAgSnVtcGVyIHwgSVJRICAgICAKKyAgIC0tLS0tLS18LS0tLS0KKyAgICAgMiAgICB8ICAyCisgICAgIDMgICAgfCAgMworICAgICA0ICAgIHwgIDQKKyAgICAgNSAgICB8ICA1CisgICAgIDYgICAgfCAgNworCisKK1NldHRpbmcgdGhlIEludGVybmFsIFRlcm1pbmF0b3Igb24gQ04xMjBBQi9UUC9TQlQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBqdW1wZXIgSlAxMiBpcyB1c2VkIHRvIGVuYWJsZSB0aGUgaW50ZXJuYWwgdGVybWluYXRvci4gCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLQorICAgICAgIDAgICAgICAgICAgICAgICAgfCAgMCAgfCAgICAgCisgICAgIC0tLS0tICAgT04gICAgICAgICB8ICAgICB8ICBPTgorICAgIHwgIDAgIHwgICAgICAgICAgICAgfCAgMCAgfAorICAgIHwgICAgIHwgIE9GRiAgICAgICAgIC0tLS0tICAgT0ZGCisgICAgfCAgMCAgfCAgICAgICAgICAgICAgICAwCisgICAgIC0tLS0tCisgICBUZXJtaW5hdG9yICAgICAgICAgIFRlcm1pbmF0b3IgCisgICAgZGlzYWJsZWQgICAgICAgICAgICBlbmFibGVkCisgIAorCitTZWxlY3RpbmcgdGhlIENvbm5lY3RvciBUeXBlIG9uIENOMTIwU1QvU0JUCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgSlAxMCAgICBKUDExICAgICAgICBKUDEwICAgIEpQMTEKKyAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLSAgIC0tLS0tCisgICAgICAgMCAgICAgICAwICAgICAgICB8ICAwICB8IHwgIDAgIHwgICAgICAgCisgICAgIC0tLS0tICAgLS0tLS0gICAgICB8ICAgICB8IHwgICAgIHwKKyAgICB8ICAwICB8IHwgIDAgIHwgICAgIHwgIDAgIHwgfCAgMCAgfAorICAgIHwgICAgIHwgfCAgICAgfCAgICAgIC0tLS0tICAgLS0tLS0KKyAgICB8ICAwICB8IHwgIDAgIHwgICAgICAgIDAgICAgICAgMCAKKyAgICAgLS0tLS0gICAtLS0tLQorICAgICBDb2F4aWFsIENhYmxlICAgICAgIFR3aXN0ZWQgUGFpciBDYWJsZSAKKyAgICAgICAoRGVmYXVsdCkKKworCitTZXR0aW5nIHRoZSBUaW1lb3V0IFBhcmFtZXRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUganVtcGVycyBsYWJlbGVkIEVYVDEgYW5kIEVYVDIgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSB0aW1lb3V0IAorcGFyYW1ldGVycy4gVGhlc2UgdHdvIGp1bXBlcnMgYXJlIG5vcm1hbGx5IGxlZnQgb3Blbi4KKworCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyoqIENOZXQgVGVjaG5vbG9neSBJbmMuICoqCisxNjAgU2VyaWVzICgxNi1iaXQgY2FyZHMpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC0gZnJvbSBKdWVyZ2VuIFNlaWZlcnQgPHNlaWZlcnRAaHR3bS5kZT4KKworQ05FVCBURUNITk9MT0dZIElOQy4gKENOZXQpIEFSQ05FVCAxNjBBIFNFUklFUworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGRlc2NyaXB0aW9uIGhhcyBiZWVuIHdyaXR0ZW4gYnkgSnVlcmdlbiBTZWlmZXJ0IDxzZWlmZXJ0QGh0d20uZGU+Cit1c2luZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBmb2xsb3dpbmcgT3JpZ2luYWwgQ05ldCBNYW51YWwgCisKKyAgICAgICAgICAgICAgIkFSQ05FVAorICAgICAgICAgICAgVVNFUidTIE1BTlVBTCAKKyAgICAgICAgICAgICAgICBmb3IKKyAgICAgICAgICAgICAgIENOMTYwQQorICAgICAgICAgICAgICAgQ04xNjBBQgorICAgICAgICAgICAgICAgQ04xNjBUUAorICAgICAgICAgICAgIFAvTjoxMi0wMS0wMDA2CisgICAgICAgICAgICAgUmV2aXNpb24gMy4wMCIKKworQVJDTkVUIGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgdGhlIERhdGFwb2ludCBDb3Jwb3JhdGlvbgorCitQL04gMTYwQSAgIEFSQ05FVCAxNiBiaXQgWFQvQVQgU3RhcgorUC9OIDE2MEFCICBBUkNORVQgMTYgYml0IFhUL0FUIEJ1cworUC9OIDE2MFRQICBBUkNORVQgMTYgYml0IFhUL0FUIFR3aXN0ZWQgUGFpcgorCisgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgIDwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX18gICAgICAgICAgX19ffAorICA+ICAgICAgICAgICAgICAgfG9vfCBKUDIgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICBMRUQgfF9fX3wKKyAgPCAgICAgICAgICAgICAgIHxvb3wgSlAxICAgICB8ICAgICAgICA5MDI2ICAgICAgICAgICAgIHwgICAgTEVEIHxfX198CisgID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfF9fX19fX19fX19fX19fX19fX19fX19fX198ICAgICAgICAgX19ffAorICA8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE4gfCAgIHwgSUQ3CisgID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgICAgbyB8ICAgfCBJRDYKKyAgPCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgMiAzIDQgNSA2IDcgOCA5IDAgICAgICBkIHwgUyB8IElENQorICA+ICAgICAgICAgX19fX19fX19fX19fX19fICAgICAgICAgICBfX19fX19fX19fX19fX19fX19fX18gICAgIGUgfCBXIHwgSUQ0CisgIDwgICAgICAgIHwgICAgIFBST00gICAgICB8ICAgICAgICAgfCAgICAgICAgIFNXMSAgICAgICAgIHwgICAgQSB8IDIgfCBJRDMKKyAgPiAgICAgICAgPiAgICBTT0NLRVQgICAgIHwgICAgICAgICB8X19fX19fX19fX19fX19fX19fX19ffCAgICBkIHwgICB8IElEMgorICA8ICAgICAgICB8X19fX19fX19fX19fX19ffCAgICAgICAgICB8IElPLUJhc2UgICB8IE1FTSAgIHwgICAgIGQgfCAgIHwgSUQxCisgID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciB8X19ffCBJRDAKKyAgPCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX198CisgID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgfAorICA8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEoxIHwKKyAgPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICB8CisgIDwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxfX19ffAorICA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgMSAxIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgPCAgMyA0IDUgNiA3ICAgICAgSlAgICAgIDggOSAwIDEgMiAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgID4gfG98b3xvfG98b3wgICAgICAgICAgIHxvfG98b3xvfG98b3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICA8IHxvfG98b3xvfG98IF9fICAgICAgICB8b3xvfG98b3xvfG98ICAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX3wKKyAgPiAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIDxfX19fX19fX19fX198ICB8X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19ffAorCitMZWdlbmQ6CisKKzkwMjYgICAgICAgICAgICBBUkNORVQgUHJvYmUKK1NXMSAxLTY6ICAgIEJhc2UgSS9PIEFkZHJlc3MgU2VsZWN0CisgICAgNy0xMDogICBCYXNlIE1lbW9yeSBBZGRyZXNzIFNlbGVjdAorU1cyIDEtODogICAgTm9kZSBJRCBTZWxlY3QgKElEMC1JRDcpCitKUDEvSlAyICAgICBFVDEsIEVUMiBUaW1lb3V0IFBhcmFtZXRlcnMKK0pQMy1KUDEzICAgIEludGVycnVwdCBTZWxlY3QKK0oxICAgICAgQk5DIFJHNjIvVSBDb25uZWN0b3IgICAgICAgIChDTjE2MEEvQUIgb25seSkKK0oxICAgICAgVHdvIDYtcG9zaXRpb24gVGVsZXBob25lIEphY2sgICAoQ04xNjBUUCBvbmx5KQorTEVECisKK1NldHRpbmcgb25lIG9mIHRoZSBzd2l0Y2hlcyB0byBPZmYgbWVhbnMgIjEiLCBPbiBtZWFucyAiMCIuCisKKworU2V0dGluZyB0aGUgTm9kZSBJRAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZWlnaHQgc3dpdGNoZXMgaW4gU1cyIGFyZSB1c2VkIHRvIHNldCB0aGUgbm9kZSBJRC4gRWFjaCBub2RlIGF0dGFjaGVkCit0byB0aGUgbmV0d29yayBtdXN0IGhhdmUgYW4gdW5pcXVlIG5vZGUgSUQgd2hpY2ggbXVzdCBiZSBkaWZmZXJlbnQgZnJvbSAwLgorU3dpdGNoIDEgKElEMCkgc2VydmVzIGFzIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgKExTQikuCisKK1RoZSBub2RlIElEIGlzIHRoZSBzdW0gb2YgdGhlIHZhbHVlcyBvZiBhbGwgc3dpdGNoZXMgc2V0IHRvICIxIiAgCitUaGVzZSB2YWx1ZXMgYXJlOgorCisgICBTd2l0Y2ggfCBMYWJlbCB8IFZhbHVlCisgICAtLS0tLS0tfC0tLS0tLS18LS0tLS0tLQorICAgICAxICAgIHwgSUQwICAgfCAgIDEKKyAgICAgMiAgICB8IElEMSAgIHwgICAyCisgICAgIDMgICAgfCBJRDIgICB8ICAgNAorICAgICA0ICAgIHwgSUQzICAgfCAgIDgKKyAgICAgNSAgICB8IElENCAgIHwgIDE2CisgICAgIDYgICAgfCBJRDUgICB8ICAzMgorICAgICA3ICAgIHwgSUQ2ICAgfCAgNjQKKyAgICAgOCAgICB8IElENyAgIHwgMTI4CisKK1NvbWUgRXhhbXBsZXM6CisKKyAgICBTd2l0Y2ggICAgICAgICB8IEhleCAgICAgfCBEZWNpbWFsIAorICAgOCA3IDYgNSA0IDMgMiAxIHwgTm9kZSBJRCB8IE5vZGUgSUQKKyAgIC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLQorICAgMCAwIDAgMCAwIDAgMCAwIHwgICAgbm90IGFsbG93ZWQKKyAgIDAgMCAwIDAgMCAwIDAgMSB8ICAgIDEgICAgfCAgICAxIAorICAgMCAwIDAgMCAwIDAgMSAwIHwgICAgMiAgICB8ICAgIDIKKyAgIDAgMCAwIDAgMCAwIDEgMSB8ICAgIDMgICAgfCAgICAzCisgICAgICAgLiAuIC4gICAgICAgfCAgICAgICAgIHwKKyAgIDAgMSAwIDEgMCAxIDAgMSB8ICAgNTUgICAgfCAgIDg1CisgICAgICAgLiAuIC4gICAgICAgfCAgICAgICAgIHwKKyAgIDEgMCAxIDAgMSAwIDEgMCB8ICAgQUEgICAgfCAgMTcwCisgICAgICAgLiAuIC4gICAgICAgfCAgICAgICAgIHwgIAorICAgMSAxIDEgMSAxIDEgMCAxIHwgICBGRCAgICB8ICAyNTMKKyAgIDEgMSAxIDEgMSAxIDEgMCB8ICAgRkUgICAgfCAgMjU0CisgICAxIDEgMSAxIDEgMSAxIDEgfCAgIEZGICAgIHwgIDI1NQorCisKK1NldHRpbmcgdGhlIEkvTyBCYXNlIEFkZHJlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZpcnN0IHNpeCBzd2l0Y2hlcyBpbiBzd2l0Y2ggYmxvY2sgU1cxIGFyZSB1c2VkIHRvIHNlbGVjdCB0aGUgSS9PIEJhc2UKK2FkZHJlc3MgdXNpbmcgdGhlIGZvbGxvd2luZyB0YWJsZToKKworICAgICAgICAgICAgIFN3aXRjaCAgICAgICAgfCBIZXggSS9PCisgICAgMSAgIDIgICAzICAgNCAgIDUgICA2ICB8IEFkZHJlc3MKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLQorICAgT0ZGIE9OICBPTiAgT0ZGIE9GRiBPTiAgfCAgMjYwCisgICBPRkYgT04gIE9GRiBPTiAgT04gIE9GRiB8ICAyOTAKKyAgIE9GRiBPTiAgT0ZGIE9GRiBPRkYgT04gIHwgIDJFMCAgKE1hbnVmYWN0dXJlcidzIGRlZmF1bHQpCisgICBPRkYgT04gIE9GRiBPRkYgT0ZGIE9GRiB8ICAyRjAKKyAgIE9GRiBPRkYgT04gIE9OICBPTiAgT04gIHwgIDMwMAorICAgT0ZGIE9GRiBPTiAgT0ZGIE9OICBPRkYgfCAgMzUwCisgICBPRkYgT0ZGIE9GRiBPTiAgT04gIE9OICB8ICAzODAKKyAgIE9GRiBPRkYgT0ZGIE9GRiBPRkYgT04gIHwgIDNFMAorCitOb3RlOiBPdGhlciBJTy1CYXNlIGFkZHJlc3NlcyBzZWVtIHRvIGJlIHNlbGVjdGFibGUsIGJ1dCBvbmx5IHRoZSBhYm92ZQorICAgICAgY29tYmluYXRpb25zIGFyZSBkb2N1bWVudGVkLgorCisKK1NldHRpbmcgdGhlIEJhc2UgTWVtb3J5IChSQU0pIGJ1ZmZlciBBZGRyZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgc3dpdGNoZXMgNy0xMCBvZiBzd2l0Y2ggYmxvY2sgU1cxIGFyZSB1c2VkIHRvIHNlbGVjdCB0aGUgTWVtb3J5CitCYXNlIGFkZHJlc3Mgb2YgdGhlIFJBTSAoMkspIGFuZCB0aGUgUFJPTS4KKworICAgU3dpdGNoICAgICAgICAgIHwgSGV4IFJBTSB8IEhleCBST00KKyAgICA3ICAgOCAgIDkgIDEwICB8IEFkZHJlc3MgfCBBZGRyZXNzCisgICAtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLQorICAgT0ZGIE9GRiBPTiAgT04gIHwgIEMwMDAwICB8ICBDODAwMAorICAgT0ZGIE9GRiBPTiAgT0ZGIHwgIEQwMDAwICB8ICBEODAwMCAoRGVmYXVsdCkKKyAgIE9GRiBPRkYgT0ZGIE9OICB8ICBFMDAwMCAgfCAgRTgwMDAKKworTm90ZTogT3RoZXIgTUVNLUJhc2UgYWRkcmVzc2VzIHNlZW0gdG8gYmUgc2VsZWN0YWJsZSwgYnV0IG9ubHkgdGhlIGFib3ZlCisgICAgICBjb21iaW5hdGlvbnMgYXJlIGRvY3VtZW50ZWQuCisKKworU2V0dGluZyB0aGUgSW50ZXJydXB0IExpbmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIHNlbGVjdCBhIGhhcmR3YXJlIGludGVycnVwdCBsZXZlbCBpbnN0YWxsIG9uZSAob25seSBvbmUhKSBvZiB0aGUganVtcGVycworSlAzIHRocm91Z2ggSlAxMyB1c2luZyB0aGUgZm9sbG93aW5nIHRhYmxlOgorCisgICBKdW1wZXIgfCBJUlEgICAgIAorICAgLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLQorICAgICAzICAgIHwgIDE0CisgICAgIDQgICAgfCAgMTUKKyAgICAgNSAgICB8ICAxMgorICAgICA2ICAgIHwgIDExCisgICAgIDcgICAgfCAgMTAKKyAgICAgOCAgICB8ICAgMworICAgICA5ICAgIHwgICA0CisgICAgMTAgICAgfCAgIDUKKyAgICAxMSAgICB8ICAgNgorICAgIDEyICAgIHwgICA3CisgICAgMTMgICAgfCAgIDIgKD05KSBEZWZhdWx0IQorCitOb3RlOiAgLSBEbyBub3QgdXNlIEpQMTE9SVJRNiwgaXQgbWF5IGNvbmZsaWN0IHdpdGggeW91ciBGbG9wcHkgRGlzaworICAgICAgICAgQ29udHJvbGxlcgorICAgICAgIC0gVXNlIEpQMz1JUlExNCBvbmx5LCBpZiB5b3UgZG9uJ3QgaGF2ZSBhbiBJREUtLCBNRk0tLCBvciBSTEwtCisgICAgICAgICBIYXJkIERpc2ssIGl0IG1heSBjb25mbGljdCB3aXRoIHRoZWlyIGNvbnRyb2xsZXJzCisKKworU2V0dGluZyB0aGUgVGltZW91dCBQYXJhbWV0ZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGp1bXBlcnMgbGFiZWxlZCBKUDEgYW5kIEpQMiBhcmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHRpbWVvdXQKK3BhcmFtZXRlcnMuIFRoZXNlIHR3byBqdW1wZXJzIGFyZSBub3JtYWxseSBsZWZ0IG9wZW4uCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworKiogTGFudGVjaCAqKgorOC1iaXQgY2FyZCwgdW5rbm93biBtb2RlbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAtIGZyb20gVmxhZCBMdW5ndSA8dmx1bmd1QHVnYWwucm8+IC0gaGlzIGUtbWFpbCBhZGRyZXNzIHNlZW1lZCBicm9rZW4gYXQKKyAgICB0aGUgdGltZSBJIHRyaWVkIHRvIHJlYWNoIGhpbS4gIFNvcnJ5IFZsYWQsIGlmIHlvdSBkaWRuJ3QgZ2V0IG15IHJlcGx5LgorCisgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICB8ICAgMSAgICAgICAgIDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgIF9fX19fX19fX19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3wKKyAgIHwgICB8ICAgU1cxICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExFRCB8X198CisgICB8ICAgfF9fX19fX19fX198ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX3wKKyAgIHwgICAgICAgICAgICAgICAgX19fX19fX19fX19fX19fX19fX19fICAgICAgICAgICAgICAgICAgICAgICB8UyB8IDgKKyAgIHwgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8VyB8CisgICB8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfDIgfAorICAgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxfX3wgMQorICAgfCAgICAgICAgICAgICAgICB8ICAgICAgVU05MDY1TCAgICAgIHwgICAgIHxvfCAgSlA0ICAgICAgICAgX19fX3xfX19fCisgICB8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgfG98ICAgICAgICAgICAgICB8ICBDTiAgICB8CisgICB8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICB8X19fX19fX198CisgICB8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICB8X19fX19fX19fX19fX19fX19fX3wgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgIF9fX19fX19fX19fX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgICAgfCAgICBQUk9NICAgIHwgICAgICAgIHxvb29vb3wgIEpQNiAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgIHxfX19fX19fX19fX198ICAgICAgICB8b29vb298ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHxfX19fX19fX19fX19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXyAgIF98CisgICAgICAgICAgICAgICAgfF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19ffCB8X198CisKKworVU05MDY1TCA6IEFSQ25ldCBDb250cm9sbGVyCisKK1NXIDEgICAgOiBTaGFyZWQgTWVtb3J5IEFkZHJlc3MgYW5kIEkvTyBCYXNlCisKKyAgICAgICAgT049MAorCisgICAgICAgIDEyMzQ1fE1lbW9yeSBBZGRyZXNzCisgICAgICAgIC0tLS0tfC0tLS0tLS0tLS0tLS0tCisgICAgICAgIDAwMDAxfCAgRDQwMDAKKyAgICAgICAgMDAwMTB8ICBDQzAwMAorICAgICAgICAwMDExMHwgIEQwMDAwCisgICAgICAgIDAxMTEwfCAgRDEwMDAKKyAgICAgICAgMDExMDF8ICBEOTAwMAorICAgICAgICAxMDAxMHwgIENDODAwCisgICAgICAgIDEwMDExfCAgREM4MDAKKyAgICAgICAgMTExMTB8ICBEMTgwMAorCitJdCBzZWVtcyB0aGF0IHRoZSBiaXRzIGFyZSBjb25zaWRlcmVkIGluIHJldmVyc2Ugb3JkZXIuICBBbHNvLCB5b3UgbXVzdAorb2JzZXJ2ZSB0aGF0IHNvbWUgb2YgdGhvc2UgYWRkcmVzc2VzIGFyZSB1bnVzdWFsIGFuZCBJIGRpZG4ndCBwcm9iZSB0aGVtOyBJCit1c2VkIGEgbWVtb3J5IGR1bXAgaW4gRE9TIHRvIGlkZW50aWZ5IHRoZW0uICBGb3IgdGhlIDAwMDAwIGNvbmZpZ3VyYXRpb24gYW5kCitzb21lIG90aGVycyB0aGF0IEkgZGlkbid0IHdyaXRlIGhlcmUgdGhlIGNhcmQgc2VlbXMgdG8gY29uZmxpY3Qgd2l0aCB0aGUKK3ZpZGVvIGNhcmQgKGFuIFMzIEdFTkRBQykuIEkgbGVhdmUgdGhlIGZ1bGwgZGVjb2Rpbmcgb2YgdGhvc2UgYWRkcmVzc2VzIHRvCit5b3UuCisKKyAgICAgICAgNjc4fCBJL08gQWRkcmVzcworICAgICAgICAtLS18LS0tLS0tLS0tLS0tCisgICAgICAgIDAwMHwgICAgMjYwCisgICAgICAgIDAwMXwgICAgZmFpbGVkIHByb2JlCisgICAgICAgIDAxMHwgICAgMkUwCisgICAgICAgIDAxMXwgICAgMzgwCisgICAgICAgIDEwMHwgICAgMjkwCisgICAgICAgIDEwMXwgICAgMzUwCisgICAgICAgIDExMHwgICAgZmFpbGVkIHByb2JlCisgICAgICAgIDExMXwgICAgM0UwCisKK1NXIDIgIDogTm9kZSBJRCAoYmluYXJ5IGNvZGVkKQorCitKUCA0ICA6IEJvb3QgUFJPTSBlbmFibGUgICBDTE9TRSAtIGVuYWJsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE9QRU4gIC0gZGlzYWJsZWQKKworSlAgNiAgOiBJUlEgc2V0IChPTkxZIE9ORSBqdW1wZXIgb24gMS01IGZvciBJUlEgMi02KQorCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyoqIEFjZXIgKioKKzgtYml0IGNhcmQsIE1vZGVsIDUyMTAtMDAzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAtIGZyb20gVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4gdXNpbmcgcG9ydGlvbnMgb2YgdGhlIGV4aXN0aW5nCisgICAgYXJjbmV0LWhhcmR3YXJlIGZpbGUuCisKK1RoaXMgaXMgYSA5MEMyNiBiYXNlZCBjYXJkLiAgSXRzIGNvbmZpZ3VyYXRpb24gc2VlbXMgc2ltaWxhciB0byB0aGUgU01DCitQQzEwMCwgYnV0IGhhcyBzb21lIGFkZGl0aW9uYWwganVtcGVycyBJIGRvbid0IGtub3cgdGhlIG1lYW5pbmcgb2YuCisKKyAgICAgICAgICAgICAgIF9fCisgICAgICAgICAgICAgIHwgIHwKKyAgIF9fX19fX19fX19ffF9ffF9fX19fX19fX19fX19fX19fX19fX19fX18KKyAgfCAgICAgICAgIHwgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICB8IEJOQyAgfCAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgfF9fX19fX3wgICAgICAgICAgICAgICAgICAgIF9fX3wKKyAgfCAgX19fX19fX19fX19fX19fX19fX19fICAgICAgICAgICAgIHxfX18gIAorICB8IHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIHwKKyAgfCB8IEh5YnJpZCBJQyAgICAgICAgICAgfCAgICAgICAgICAgICAgICB8CisgIHwgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgb3xvIEoxICAgfAorICB8IHxfX19fX19fX19fX19fX19fX19fX198ICAgICAgIDh8OCAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4fDggSjUgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3xvICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDh8OCAgICAgIHwKKyAgfF9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4fDggICAgICB8CisgKHxfX3wgTEVEICAgICAgICAgICAgICAgICAgICAgICAgb3xvICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDh8OCAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4fDggSjE1ICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICBfX19fXyAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICB8ICAgICB8ICAgX19fX18gICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgfCAgICAgfCAgX19ffAorICB8ICAgICAgICAgICAgICAgICAgIHwgICAgIHwgIHwgICAgIHwgfCAgICAKKyAgfCAgX19fX18gICAgICAgICAgICB8IFJPTSB8ICB8IFVGUyB8IHwgICAgCisgIHwgfCAgICAgfCAgICAgICAgICAgfCAgICAgfCAgfCAgICAgfCB8ICAgCisgIHwgfCAgICAgfCAgICAgX19fICAgfCAgICAgfCAgfCAgICAgfCB8ICAgCisgIHwgfCAgICAgfCAgICB8ICAgfCAgfF9fLl9ffCAgfF9fLl9ffCB8ICAgCisgIHwgfCBOQ1IgfCAgICB8WFRMfCAgIF9fX19fICAgIF9fX19fICB8ICAgCisgIHwgfCAgICAgfCAgICB8X19ffCAgfCAgICAgfCAgfCAgICAgfCB8ICAgCisgIHwgfDkwQzI2fCAgICAgICAgICAgfCAgICAgfCAgfCAgICAgfCB8ICAgCisgIHwgfCAgICAgfCAgICAgICAgICAgfCBSQU0gfCAgfCBVRlMgfCB8ICAgCisgIHwgfCAgICAgfCBKMTcgb3xvICAgfCAgICAgfCAgfCAgICAgfCB8ICAgCisgIHwgfCAgICAgfCBKMTYgb3xvICAgfCAgICAgfCAgfCAgICAgfCB8ICAgCisgIHwgfF9fLl9ffCAgICAgICAgICAgfF9fLl9ffCAgfF9fLl9ffCB8ICAgCisgIHwgIF9fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgCisgIHwgfCAgIHw4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgCisgIHwgfFNXMnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgCisgIHwgfCAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgCisgIHwgfF9fX3wxICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgCisgIHwgIF9fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgCisgIHwgfCAgIHwxMCAgICAgICAgICAgSjE4IG98byAgICAgICAgICB8ICAgCisgIHwgfCAgIHwgICAgICAgICAgICAgICAgIG98byAgICAgICAgICB8ICAgCisgIHwgfFNXMXwgICAgICAgICAgICAgICAgIG98byAgICAgICAgICB8ICAgCisgIHwgfCAgIHwgICAgICAgICAgICAgSjIxIG98byAgICAgICAgICB8ICAgCisgIHwgfF9fX3wxICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgCisgIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX198ICAgCisKKworTGVnZW5kOgorCis5MEMyNiAgICAgICBBUkNORVQgQ2hpcAorWFRMICAgICAgICAgMjAgTUh6IENyeXN0YWwKK1NXMSAxLTYgICAgIEJhc2UgSS9PIEFkZHJlc3MgU2VsZWN0CisgICAgNy0xMCAgICBNZW1vcnkgQWRkcmVzcyBTZWxlY3QKK1NXMiAxLTggICAgIE5vZGUgSUQgU2VsZWN0IChJRDAtSUQ3KQorSjEtSjUgICAgICAgSVJRIFNlbGVjdAorSjYtSjIxICAgICAgVW5rbm93biAoUHJvYmFibHkgZXh0cmEgdGltZW91dHMgJiBST00gZW5hYmxlIC4uLikKK0xFRDEgICAgICAgIEFjdGl2aXR5IExFRCAKK0JOQyAgICAgICAgIENvYXggY29ubmVjdG9yIChTVEFSIEFSQ25ldCkKK1JBTSAgICAgICAgIDJrIG9mIFNSQU0KK1JPTSAgICAgICAgIEJvb3QgUk9NIHNvY2tldAorVUZTICAgICAgICAgVW5pZGVudGlmaWVkIEZseWluZyBTb2NrZXRzCisKKworU2V0dGluZyB0aGUgTm9kZSBJRAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZWlnaHQgc3dpdGNoZXMgaW4gU1cyIGFyZSB1c2VkIHRvIHNldCB0aGUgbm9kZSBJRC4gRWFjaCBub2RlIGF0dGFjaGVkCit0byB0aGUgbmV0d29yayBtdXN0IGhhdmUgYW4gdW5pcXVlIG5vZGUgSUQgd2hpY2ggbXVzdCBub3QgYmUgMC4KK1N3aXRjaCAxIChJRDApIHNlcnZlcyBhcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IChMU0IpLgorCitTZXR0aW5nIG9uZSBvZiB0aGUgc3dpdGNoZXMgdG8gT0ZGIG1lYW5zICIxIiwgT04gbWVhbnMgIjAiLgorCitUaGUgbm9kZSBJRCBpcyB0aGUgc3VtIG9mIHRoZSB2YWx1ZXMgb2YgYWxsIHN3aXRjaGVzIHNldCB0byAiMSIKK1RoZXNlIHZhbHVlcyBhcmU6CisKKyAgIFN3aXRjaCB8IFZhbHVlCisgICAtLS0tLS0tfC0tLS0tLS0KKyAgICAgMSAgICB8ICAgMQorICAgICAyICAgIHwgICAyCisgICAgIDMgICAgfCAgIDQKKyAgICAgNCAgICB8ICAgOAorICAgICA1ICAgIHwgIDE2CisgICAgIDYgICAgfCAgMzIKKyAgICAgNyAgICB8ICA2NAorICAgICA4ICAgIHwgMTI4CisKK0Rvbid0IHNldCB0aGlzIHRvIDAgb3IgMjU1OyB0aGVzZSB2YWx1ZXMgYXJlIHJlc2VydmVkLgorCisKK1NldHRpbmcgdGhlIEkvTyBCYXNlIEFkZHJlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHN3aXRjaGVzIDEgdG8gNiBvZiBzd2l0Y2ggYmxvY2sgU1cxIGFyZSB1c2VkIHRvIHNlbGVjdCBvbmUKK29mIDMyIHBvc3NpYmxlIEkvTyBCYXNlIGFkZHJlc3NlcyB1c2luZyB0aGUgZm9sbG93aW5nIHRhYmxlcworICAgCisgICAgICAgICAgfCBIZXgKKyAgIFN3aXRjaCB8IFZhbHVlCisgICAtLS0tLS0tfC0tLS0tLS0KKyAgICAgMSAgICB8IDIwMCAgCisgICAgIDIgICAgfCAxMDAgIAorICAgICAzICAgIHwgIDgwICAKKyAgICAgNCAgICB8ICA0MCAgCisgICAgIDUgICAgfCAgMjAgIAorICAgICA2ICAgIHwgIDEwIAorCitUaGUgSS9PIGFkZHJlc3MgaXMgc3VtIG9mIGFsbCBzd2l0Y2hlcyBzZXQgdG8gIjEiLiBSZW1lbWJlciB0aGF0Cit0aGUgSS9PIGFkZHJlc3Mgc3BhY2UgYmVsbG93IDB4MjAwIGlzIFJFU0VSVkVEIGZvciBtYWluYm9hcmQsIHNvCitzd2l0Y2ggMSBzaG91bGQgYmUgQUxXQVlTIFNFVCBUTyBPRkYuIAorCisKK1NldHRpbmcgdGhlIEJhc2UgTWVtb3J5IChSQU0pIGJ1ZmZlciBBZGRyZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbWVtb3J5IGJ1ZmZlciAoUkFNKSByZXF1aXJlcyAySy4gVGhlIGJhc2Ugb2YgdGhpcyBidWZmZXIgY2FuIGJlCitsb2NhdGVkIGluIGFueSBvZiBzaXh0ZWVuIHBvc2l0aW9ucy4gSG93ZXZlciwgdGhlIGFkZHJlc3NlcyBiZWxvdworQTAwMDAgYXJlIGxpa2VseSB0byBjYXVzZSBzeXN0ZW0gaGFuZyBiZWNhdXNlIHRoZXJlJ3MgbWFpbiBSQU0uCisKK0p1bXBlcnMgNy0xMCBvZiBzd2l0Y2ggYmxvY2sgU1cxIHNlbGVjdCB0aGUgTWVtb3J5IEJhc2UgYWRkcmVzcy4KKworICAgU3dpdGNoICAgICAgICAgIHwgSGV4IFJBTQorICAgIDcgICA4ICAgOSAgMTAgIHwgQWRkcmVzcworICAgLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0KKyAgIE9GRiBPRkYgT0ZGIE9GRiB8ICBGMDAwMCAoY29uZmxpY3RzIHdpdGggbWFpbiBCSU9TKQorICAgT0ZGIE9GRiBPRkYgT04gIHwgIEUwMDAwIAorICAgT0ZGIE9GRiBPTiAgT0ZGIHwgIEQwMDAwCisgICBPRkYgT0ZGIE9OICBPTiAgfCAgQzAwMDAgKGNvbmZsaWN0cyB3aXRoIHZpZGVvIEJJT1MpCisgICBPRkYgT04gIE9GRiBPRkYgfCAgQjAwMDAgKGNvbmZsaWN0cyB3aXRoIG1vbm8gdmlkZW8pCisgICBPRkYgT04gIE9GRiBPTiAgfCAgQTAwMDAgKGNvbmZsaWN0cyB3aXRoIGdyYXBoaWNzKQorCisKK1NldHRpbmcgdGhlIEludGVycnVwdCBMaW5lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitKdW1wZXJzIDEtNSBvZiB0aGUganVtcGVyIGJsb2NrIEoxIGNvbnRyb2wgdGhlIElSUSBsZXZlbC4gT04gbWVhbnMgCitzaG9ydGVkLCBPRkYgbWVhbnMgb3Blbi4KKworICAgIEp1bXBlciAgICAgICAgICAgICAgfCAgSVJRCisgICAgMSAgIDIgICAzICAgNCAgIDUgICB8CisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgT04gIE9GRiBPRkYgT0ZGIE9GRiB8ICA3CisgICAgT0ZGIE9OICBPRkYgT0ZGIE9GRiB8ICA1CisgICAgT0ZGIE9GRiBPTiAgT0ZGIE9GRiB8ICA0CisgICAgT0ZGIE9GRiBPRkYgT04gIE9GRiB8ICAzCisgICAgT0ZGIE9GRiBPRkYgT0ZGIE9OICB8ICAyCisKKworVW5rbm93biBqdW1wZXJzICYgc29ja2V0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJIGtub3cgbm90aGluZyBhYm91dCB0aGVzZS4gSSBqdXN0IGd1ZXNzIHRoYXQgSjE2JkoxNyBhcmUgdGltZW91dAoranVtcGVycyBhbmQgbWF5YmUgb25lIG9mIEoxOC1KMjEgc2VsZWN0cyBST00uIEFsc28gSjYtSjEwIGFuZAorSjExLUoxNSBhcmUgY29ubmVjdGluZyBJUlEyLTcgdG8gc29tZSBwaW5zIG9uIHRoZSBVRlNzLiBJIGNhbid0CitndWVzcyB0aGUgcHVycG9zZS4KKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqKiBEYXRhcG9pbnQ/ICoqCitMQU4tQVJDLTgsIGFuIDgtYml0IGNhcmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAtIGZyb20gVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAc3VzZS5jej4KKworVGhpcyBpcyBhbm90aGVyIFNNQyA5MEM2NS1iYXNlZCBBUkNuZXQgY2FyZC4gSSBjb3VsZG4ndCBpZGVudGlmeSB0aGUKK21hbnVmYWN0dXJlciwgYnV0IGl0IG1pZ2h0IGJlIERhdGFQb2ludCwgYmVjYXVzZSB0aGUgY2FyZCBoYXMgdGhlCitvcmlnaW5hbCBhcmNOZXQgbG9nbyBpbiBpdHMgdXBwZXIgcmlnaHQgY29ybmVyLgorCisgICAgICAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICBfX19fX19fX18gICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIFNXMiAgIHwgT04gICAgICBhcmNOZXQgICAgIHwKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICB8X19fX19fX19ffCBPRkYgICAgICAgICAgICAgX19ffAorICAgICAgICAgfCAgX19fX19fX19fX19fXyAgICAgICAgIDEgX19fX19fICA4ICAgICAgICAgICAgICAgIHwgICB8IDggIAorICAgICAgICAgfCB8ICAgICAgICAgICAgIHwgU1cxICAgICB8IFhUQUwgfCBfX19fX19fX19fX18gICAgIHwgUyB8ICAgIAorICAgICAgICAgfCA+IFJBTSAoMmspICAgIHwgICAgICAgICB8X19fX19ffHwgICAgICAgICAgICB8ICAgIHwgVyB8ICAgIAorICAgICAgICAgfCB8X19fX19fX19fX19fX3wgICAgICAgICAgICAgICAgIHwgICAgICBIICAgICB8ICAgIHwgMyB8ICAgIAorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX3xfX19fXyB5ICAgICB8ICAgIHxfX198IDEgIAorICAgICAgICAgfCAgX19fX19fX19fICAgICAgICAgICAgfCAgICAgICAgIHwgICAgIHxiICAgICB8ICAgICAgICB8ICAgIAorICAgICAgICAgfCB8X19fX19fX19ffCAgICAgICAgICAgfCAgICAgICAgIHwgICAgIHxyICAgICB8ICAgICAgICB8ICAgIAorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgU01DIHwgICAgIHxpICAgICB8ICAgICAgICB8ICAgIAorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICA5MEM2NXwgICAgIHxkICAgICB8ICAgICAgICB8ICAgICAgCisgICAgICAgICB8ICBfX19fX19fX18gICAgICAgICAgICB8ICAgICAgICAgfCAgICAgfCAgICAgIHwgICAgICAgIHwKKyAgICAgICAgIHwgfCAgIFNXMSAgIHwgT04gICAgICAgIHwgICAgICAgICB8ICAgICB8SSAgICAgfCAgICAgICAgfAorICAgICAgICAgfCB8X19fX19fX19ffCBPRkYgICAgICAgfF9fX19fX19fX3xfX19fXy9DICAgICB8ICAgX19fX198CisgICAgICAgICB8ICAxICAgICAgIDggICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgIHwgICAgIHxfX18KKyAgICAgICAgIHwgIF9fX19fX19fX19fX19fICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgfCBCTkMgfF9fX3wKKyAgICAgICAgIHwgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICB8X19fX19fX19fX19ffCAgfF9fX19ffAorICAgICAgICAgfCA+IEVQUk9NIFNPQ0tFVCB8ICAgICAgICAgICAgICBfX19fX19fX19fX19fICAgICAgICAgICB8CisgICAgICAgICB8IHxfX19fX19fX19fX19fX3wgICAgICAgICAgICAgfF9fX19fX19fX19fX198ICAgICAgICAgIHwKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19fX19ffAorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IAorICAgICAgICAgfF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX198CisKK0xlZ2VuZDoKKworOTBDNjUgICAgICAgQVJDTkVUIENoaXAgCitTVzEgMS01OiAgICBCYXNlIE1lbW9yeSBBZGRyZXNzIFNlbGVjdAorICAgIDYtODogICAgQmFzZSBJL08gQWRkcmVzcyBTZWxlY3QKK1NXMiAxLTg6ICAgIE5vZGUgSUQgU2VsZWN0CitTVzMgMS01OiAgICBJUlEgU2VsZWN0ICAgCisgICAgNi03OiAgICBFeHRyYSBUaW1lb3V0CisgICAgOCAgOiAgICBST00gRW5hYmxlICAgCitCTkMgICAgICAgICBDb2F4IGNvbm5lY3RvcgorWFRBTCAgICAgICAgMjAgTUh6IENyeXN0YWwKKworCitTZXR0aW5nIHRoZSBOb2RlIElECistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBlaWdodCBzd2l0Y2hlcyBpbiBTVzMgYXJlIHVzZWQgdG8gc2V0IHRoZSBub2RlIElELiBFYWNoIG5vZGUgYXR0YWNoZWQKK3RvIHRoZSBuZXR3b3JrIG11c3QgaGF2ZSBhbiB1bmlxdWUgbm9kZSBJRCB3aGljaCBtdXN0IG5vdCBiZSAwLgorU3dpdGNoIDEgc2VydmVzIGFzIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgKExTQikuCisKK1NldHRpbmcgb25lIG9mIHRoZSBzd2l0Y2hlcyB0byBPZmYgbWVhbnMgIjEiLCBPbiBtZWFucyAiMCIuCisKK1RoZSBub2RlIElEIGlzIHRoZSBzdW0gb2YgdGhlIHZhbHVlcyBvZiBhbGwgc3dpdGNoZXMgc2V0IHRvICIxIiAgCitUaGVzZSB2YWx1ZXMgYXJlOgorCisgICBTd2l0Y2ggfCBWYWx1ZQorICAgLS0tLS0tLXwtLS0tLS0tCisgICAgIDEgICAgfCAgIDEKKyAgICAgMiAgICB8ICAgMgorICAgICAzICAgIHwgICA0CisgICAgIDQgICAgfCAgIDgKKyAgICAgNSAgICB8ICAxNgorICAgICA2ICAgIHwgIDMyCisgICAgIDcgICAgfCAgNjQKKyAgICAgOCAgICB8IDEyOAorCisKK1NldHRpbmcgdGhlIEkvTyBCYXNlIEFkZHJlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGxhc3QgdGhyZWUgc3dpdGNoZXMgaW4gc3dpdGNoIGJsb2NrIFNXMSBhcmUgdXNlZCB0byBzZWxlY3Qgb25lCitvZiBlaWdodCBwb3NzaWJsZSBJL08gQmFzZSBhZGRyZXNzZXMgdXNpbmcgdGhlIGZvbGxvd2luZyB0YWJsZQorCisKKyAgIFN3aXRjaCAgICAgIHwgSGV4IEkvTworICAgIDYgICA3ICAgOCAgfCBBZGRyZXNzCisgICAtLS0tLS0tLS0tLS18LS0tLS0tLS0KKyAgIE9OICBPTiAgT04gIHwgIDI2MAorICAgT0ZGIE9OICBPTiAgfCAgMjkwCisgICBPTiAgT0ZGIE9OICB8ICAyRTAgIChNYW51ZmFjdHVyZXIncyBkZWZhdWx0KQorICAgT0ZGIE9GRiBPTiAgfCAgMkYwCisgICBPTiAgT04gIE9GRiB8ICAzMDAKKyAgIE9GRiBPTiAgT0ZGIHwgIDM1MAorICAgT04gIE9GRiBPRkYgfCAgMzgwCisgICBPRkYgT0ZGIE9GRiB8ICAzRTAKKworCitTZXR0aW5nIHRoZSBCYXNlIE1lbW9yeSAoUkFNKSBidWZmZXIgQWRkcmVzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG1lbW9yeSBidWZmZXIgKFJBTSkgcmVxdWlyZXMgMksuIFRoZSBiYXNlIG9mIHRoaXMgYnVmZmVyIGNhbiBiZSAKK2xvY2F0ZWQgaW4gYW55IG9mIGVpZ2h0IHBvc2l0aW9ucy4gVGhlIGFkZHJlc3Mgb2YgdGhlIEJvb3QgUHJvbSBpcworbWVtb3J5IGJhc2UgKyAweDIwMDAuCitKdW1wZXJzIDMtNSBvZiBzd2l0Y2ggYmxvY2sgU1cxIHNlbGVjdCB0aGUgTWVtb3J5IEJhc2UgYWRkcmVzcy4KKworICAgU3dpdGNoICAgICAgICAgICAgICB8IEhleCBSQU0gfCBIZXggUk9NCisgICAgMSAgIDIgICAzICAgNCAgIDUgIHwgQWRkcmVzcyB8IEFkZHJlc3MgKikKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLQorICAgT04gIE9OICBPTiAgT04gIE9OICB8ICBDMDAwMCAgfCAgQzIwMDAKKyAgIE9OICBPTiAgT0ZGIE9OICBPTiAgfCAgQzQwMDAgIHwgIEM2MDAwCisgICBPTiAgT04gIE9OICBPRkYgT04gIHwgIENDMDAwICB8ICBDRTAwMAorICAgT04gIE9OICBPRkYgT0ZGIE9OICB8ICBEMDAwMCAgfCAgRDIwMDAgIChNYW51ZmFjdHVyZXIncyBkZWZhdWx0KQorICAgT04gIE9OICBPTiAgT04gIE9GRiB8ICBENDAwMCAgfCAgRDYwMDAKKyAgIE9OICBPTiAgT0ZGIE9OICBPRkYgfCAgRDgwMDAgIHwgIERBMDAwCisgICBPTiAgT04gIE9OICBPRkYgT0ZGIHwgIERDMDAwICB8ICBERTAwMAorICAgT04gIE9OICBPRkYgT0ZGIE9GRiB8ICBFMDAwMCAgfCAgRTIwMDAKKyAgCisqKSBUbyBlbmFibGUgdGhlIEJvb3QgUk9NIHNldCB0aGUgc3dpdGNoIDggb2Ygc3dpdGNoIGJsb2NrIFNXMyB0byBwb3NpdGlvbiBPTi4KKworVGhlIHN3aXRjaGVzIDEgYW5kIDIgcHJvYmFibHkgYWRkIDB4MDgwMCBhbmQgMHgxMDAwIHRvIFJBTSBiYXNlIGFkZHJlc3MuCisKKworU2V0dGluZyB0aGUgSW50ZXJydXB0IExpbmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1N3aXRjaGVzIDEtNSBvZiB0aGUgc3dpdGNoIGJsb2NrIFNXMyBjb250cm9sIHRoZSBJUlEgbGV2ZWwuCisKKyAgICBKdW1wZXIgICAgICAgICAgICAgIHwgIElSUQorICAgIDEgICAyICAgMyAgIDQgICA1ICAgfAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIE9OICBPRkYgT0ZGIE9GRiBPRkYgfCAgMworICAgIE9GRiBPTiAgT0ZGIE9GRiBPRkYgfCAgNAorICAgIE9GRiBPRkYgT04gIE9GRiBPRkYgfCAgNQorICAgIE9GRiBPRkYgT0ZGIE9OICBPRkYgfCAgNworICAgIE9GRiBPRkYgT0ZGIE9GRiBPTiAgfCAgMgorCisKK1NldHRpbmcgdGhlIFRpbWVvdXQgUGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBzd2l0Y2hlcyA2LTcgb2YgdGhlIHN3aXRjaCBibG9jayBTVzMgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSB0aW1lb3V0CitwYXJhbWV0ZXJzLiAgVGhlc2UgdHdvIHN3aXRjaGVzIGFyZSBub3JtYWxseSBsZWZ0IGluIHRoZSBPRkYgcG9zaXRpb24uCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworKiogVG9wd2FyZSAqKgorOC1iaXQgY2FyZCwgVEEtQVJDLzEwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC0gZnJvbSBWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEBzdXNlLmN6PgorCitUaGlzIGlzIGFub3RoZXIgdmVyeSBzaW1pbGFyIDkwQzY1IGNhcmQuIE1vc3Qgb2YgdGhlIHN3aXRjaGVzIGFuZCBqdW1wZXJzCithcmUgdGhlIHNhbWUgYXMgb24gb3RoZXIgY2xvbmVzLgorCisgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCit8ICBfX19fX19fX19fXyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIF9fX19fXyAgICAgICAgfAorfCB8U1cyIE5PREUgSUR8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwgWFRBTCB8ICAgICAgIHwKK3wgfF9fX19fX19fX19ffCAgfCAgSHlicmlkIElDICAgICAgICAgICAgICB8ICAgICAgICAgICB8X19fX19ffCAgICAgICB8Cit8ICBfX19fX19fX19fXyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIF9ffCAgICAKK3wgfFNXMSBNRU0rSS9PfCAgfF9fX19fX19fX19fX19fX19fX19fX19fX198ICAgICAgICAgICAgICAgICAgIExFRDF8X198KSAgIAorfCB8X19fX19fX19fX198ICAgICAgICAgICAxIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIAorfCAgICAgICAgICAgICAgICAgICAgIEozIHxvfG98IFRJTUVPVVQgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX3wgICAgCit8ICAgICBfX19fX19fX19fX19fXyAgICAgfG98b3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgfCAgICAKK3wgICAgfCAgICAgICAgICAgICAgfCAgX19fX19fX19fX19fX19fX19fXyAgICAgICAgICAgICAgICAgICAgIHwgUkogICB8ICAgIAorfCAgICA+IEVQUk9NIFNPQ0tFVCB8IHwgICAgICAgICAgICAgICAgICAgXCAgICAgICAgICAgICAgICAgICAgfC0tLS0tLXwgICAgIAorfEoyICB8X19fX19fX19fX19fX198IHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgIHwgICAgCit8fG98ICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8X19fX19ffAorfHxvfCBST00gRU5BQkxFICAgICAgIHwgICAgICAgIFNNQyAgICAgICAgIHwgICAgX19fX19fX19fICAgICAgICAgICAgIHwKK3wgICAgIF9fX19fX19fX19fX18gICB8ICAgICAgIDkwQzY1ICAgICAgICB8ICAgfF9fX19fX19fX3wgICAgICAgX19fX198ICAgIAorfCAgICB8ICAgICAgICAgICAgIHwgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgIHxfX18gCit8ICAgID4gUkFNICgyaykgICAgfCAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCBCTkMgfF9fX3wKK3wgICAgfF9fX19fX19fX19fX198ICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8X19fX198ICAgIAorfCAgICAgICAgICAgICAgICAgICAgIHxfX19fX19fX19fX19fX19fX19fX3wgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgCit8IF9fX19fX19fIElSUSAyIDMgNCA1IDcgICAgICAgICAgICAgICAgICBfX19fX19fX19fXyAgICAgICAgICAgICAgICAgfAorfHxfX19fX19fX3wgICB8b3xvfG98b3xvfCAgICAgICAgICAgICAgICB8X19fX19fX19fX198ICAgICAgICAgICAgICAgIHwKK3xfX19fX19fXyAgIEoxfG98b3xvfG98b3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19fX19fX19fX19fX198CisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgfF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKKworTGVnZW5kOgorCis5MEM2NSAgICAgICBBUkNORVQgQ2hpcAorWFRBTCAgICAgICAgMjAgTUh6IENyeXN0YWwKK1NXMSAxLTUgICAgIEJhc2UgTWVtb3J5IEFkZHJlc3MgU2VsZWN0CisgICAgNi04ICAgICBCYXNlIEkvTyBBZGRyZXNzIFNlbGVjdAorU1cyIDEtOCAgICAgTm9kZSBJRCBTZWxlY3QgKElEMC1JRDcpCitKMSAgICAgICAgICBJUlEgU2VsZWN0CitKMiAgICAgICAgICBST00gRW5hYmxlCitKMyAgICAgICAgICBFeHRyYSBUaW1lb3V0CitMRUQxICAgICAgICBBY3Rpdml0eSBMRUQgCitCTkMgICAgICAgICBDb2F4IGNvbm5lY3RvciAoQlVTIEFSQ25ldCkKK1JKICAgICAgICAgIFR3aXN0ZWQgUGFpciBDb25uZWN0b3IgKGRhaXN5IGNoYWluKQorCisKK1NldHRpbmcgdGhlIE5vZGUgSUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGVpZ2h0IHN3aXRjaGVzIGluIFNXMiBhcmUgdXNlZCB0byBzZXQgdGhlIG5vZGUgSUQuIEVhY2ggbm9kZSBhdHRhY2hlZCB0bwordGhlIG5ldHdvcmsgbXVzdCBoYXZlIGFuIHVuaXF1ZSBub2RlIElEIHdoaWNoIG11c3Qgbm90IGJlIDAuICBTd2l0Y2ggMSAoSUQwKQorc2VydmVzIGFzIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgKExTQikuCisKK1NldHRpbmcgb25lIG9mIHRoZSBzd2l0Y2hlcyB0byBPZmYgbWVhbnMgIjEiLCBPbiBtZWFucyAiMCIuCisKK1RoZSBub2RlIElEIGlzIHRoZSBzdW0gb2YgdGhlIHZhbHVlcyBvZiBhbGwgc3dpdGNoZXMgc2V0IHRvICIxIgorVGhlc2UgdmFsdWVzIGFyZToKKworICAgU3dpdGNoIHwgTGFiZWwgfCBWYWx1ZQorICAgLS0tLS0tLXwtLS0tLS0tfC0tLS0tLS0KKyAgICAgMSAgICB8IElEMCAgIHwgICAxCisgICAgIDIgICAgfCBJRDEgICB8ICAgMgorICAgICAzICAgIHwgSUQyICAgfCAgIDQKKyAgICAgNCAgICB8IElEMyAgIHwgICA4CisgICAgIDUgICAgfCBJRDQgICB8ICAxNgorICAgICA2ICAgIHwgSUQ1ICAgfCAgMzIKKyAgICAgNyAgICB8IElENiAgIHwgIDY0CisgICAgIDggICAgfCBJRDcgICB8IDEyOAorCitTZXR0aW5nIHRoZSBJL08gQmFzZSBBZGRyZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBsYXN0IHRocmVlIHN3aXRjaGVzIGluIHN3aXRjaCBibG9jayBTVzEgYXJlIHVzZWQgdG8gc2VsZWN0IG9uZQorb2YgZWlnaHQgcG9zc2libGUgSS9PIEJhc2UgYWRkcmVzc2VzIHVzaW5nIHRoZSBmb2xsb3dpbmcgdGFibGU6CisKKworICAgU3dpdGNoICAgICAgfCBIZXggSS9PCisgICAgNiAgIDcgICA4ICB8IEFkZHJlc3MKKyAgIC0tLS0tLS0tLS0tLXwtLS0tLS0tLQorICAgT04gIE9OICBPTiAgfCAgMjYwICAoTWFudWZhY3R1cmVyJ3MgZGVmYXVsdCkKKyAgIE9GRiBPTiAgT04gIHwgIDI5MAorICAgT04gIE9GRiBPTiAgfCAgMkUwICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgT0ZGIE9GRiBPTiAgfCAgMkYwCisgICBPTiAgT04gIE9GRiB8ICAzMDAKKyAgIE9GRiBPTiAgT0ZGIHwgIDM1MAorICAgT04gIE9GRiBPRkYgfCAgMzgwCisgICBPRkYgT0ZGIE9GRiB8ICAzRTAKKworCitTZXR0aW5nIHRoZSBCYXNlIE1lbW9yeSAoUkFNKSBidWZmZXIgQWRkcmVzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG1lbW9yeSBidWZmZXIgKFJBTSkgcmVxdWlyZXMgMksuIFRoZSBiYXNlIG9mIHRoaXMgYnVmZmVyIGNhbiBiZQorbG9jYXRlZCBpbiBhbnkgb2YgZWlnaHQgcG9zaXRpb25zLiBUaGUgYWRkcmVzcyBvZiB0aGUgQm9vdCBQcm9tIGlzCittZW1vcnkgYmFzZSArIDB4MjAwMC4KK0p1bXBlcnMgMy01IG9mIHN3aXRjaCBibG9jayBTVzEgc2VsZWN0IHRoZSBNZW1vcnkgQmFzZSBhZGRyZXNzLgorCisgICBTd2l0Y2ggICAgICAgICAgICAgIHwgSGV4IFJBTSB8IEhleCBST00KKyAgICAxICAgMiAgIDMgICA0ICAgNSAgfCBBZGRyZXNzIHwgQWRkcmVzcyAqKQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tCisgICBPTiAgT04gIE9OICBPTiAgT04gIHwgIEMwMDAwICB8ICBDMjAwMAorICAgT04gIE9OICBPRkYgT04gIE9OICB8ICBDNDAwMCAgfCAgQzYwMDAgIChNYW51ZmFjdHVyZXIncyBkZWZhdWx0KSAKKyAgIE9OICBPTiAgT04gIE9GRiBPTiAgfCAgQ0MwMDAgIHwgIENFMDAwCisgICBPTiAgT04gIE9GRiBPRkYgT04gIHwgIEQwMDAwICB8ICBEMjAwMCAgCisgICBPTiAgT04gIE9OICBPTiAgT0ZGIHwgIEQ0MDAwICB8ICBENjAwMAorICAgT04gIE9OICBPRkYgT04gIE9GRiB8ICBEODAwMCAgfCAgREEwMDAKKyAgIE9OICBPTiAgT04gIE9GRiBPRkYgfCAgREMwMDAgIHwgIERFMDAwCisgICBPTiAgT04gIE9GRiBPRkYgT0ZGIHwgIEUwMDAwICB8ICBFMjAwMAorCisqKSBUbyBlbmFibGUgdGhlIEJvb3QgUk9NIHNob3J0IHRoZSBqdW1wZXIgSjIuCisKK1RoZSBqdW1wZXJzIDEgYW5kIDIgcHJvYmFibHkgYWRkIDB4MDgwMCBhbmQgMHgxMDAwIHRvIFJBTSBhZGRyZXNzLgorCisKK1NldHRpbmcgdGhlIEludGVycnVwdCBMaW5lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitKdW1wZXJzIDEtNSBvZiB0aGUganVtcGVyIGJsb2NrIEoxIGNvbnRyb2wgdGhlIElSUSBsZXZlbC4gIE9OIG1lYW5zCitzaG9ydGVkLCBPRkYgbWVhbnMgb3Blbi4KKworICAgIEp1bXBlciAgICAgICAgICAgICAgfCAgSVJRCisgICAgMSAgIDIgICAzICAgNCAgIDUgICB8CisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgT04gIE9GRiBPRkYgT0ZGIE9GRiB8ICAyCisgICAgT0ZGIE9OICBPRkYgT0ZGIE9GRiB8ICAzCisgICAgT0ZGIE9GRiBPTiAgT0ZGIE9GRiB8ICA0CisgICAgT0ZGIE9GRiBPRkYgT04gIE9GRiB8ICA1CisgICAgT0ZGIE9GRiBPRkYgT0ZGIE9OICB8ICA3CisKKworU2V0dGluZyB0aGUgVGltZW91dCBQYXJhbWV0ZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGp1bXBlcnMgSjMgYXJlIHVzZWQgdG8gc2V0IHRoZSB0aW1lb3V0IHBhcmFtZXRlcnMuIFRoZXNlIHR3byAKK2p1bXBlcnMgYXJlIG5vcm1hbGx5IGxlZnQgb3Blbi4KKworICAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyoqIFRob21hcy1Db25yYWQgKioKK01vZGVsICM1MDAtNjI0Mi0wMDk3IFJFViBBICg4LWJpdCBjYXJkKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC0gZnJvbSBMYXJzIEthcmxzc29uIDwxMDA2MTcuMzQ3M0Bjb21wdXNlcnZlLmNvbT4KKworICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgfCAgICAgICAgICBfX19fX19fXyAgIF9fX19fX19fICAgICAgICAgICAgICAgICAgICAgICAgICAgfF9fX19fCisgICB8ICAgICAgICAgfC4uLi4uLi4ufCB8Li4uLi4uLi58ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICB8X19fX19fX198IHxfX19fX19fX3wgICAgICAgICAgICAgICAgICAgICAgICAgX19ffAorICAgfCAgICAgICAgICAgIFNXIDMgICAgICAgU1cgMSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8CisgICB8ICAgICAgICAgQmFzZSBJL08gICBCYXNlIEFkZHIuICAgICAgICAgICAgICAgIFN0YXRpb24gfCAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcyB8ICAgfAorICAgfCAgICBfX19fX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggIHwgICB8CisgICB8ICAgfCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwKKyAgIHwgICB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8X19ffCAgICAKKyAgIHwgICB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fXyAgICAgICAgfF9fXy5fCisgICB8ICAgfF9fX19fX3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxfX19fX198ICAgICAgICAgX19fX3wgQk5DCisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKdW1wZXItICAgICAgICBfX19fX3wgQ29ubmVjdG9yCisgICB8ICAgTWFpbiBjaGlwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jayAgXyAgICBfX3wgICAnICAKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCAgfCAgICBSSiBDb25uZWN0b3IKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxffCAgfCAgICB3aXRoIDExMCBPaG0KKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfF9fICBUZXJtaW5hdG9yCisgICB8ICAgIF9fX19fX19fX19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3wKKyAgIHwgICB8Li4uLi4uLi4uLi58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICBSSi1qYWNrCisgICB8ICAgfC4uLi4uLi4uLi4ufCAgICBfX19fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgKHVudXNlZCkKKyAgIHwgICB8X19fX19fX19fX198ICAgfF9fX19ffCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfF9fCisgICB8ICBCb290IFBST00gc29ja2V0IElSUS1qdW1wZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxfICBEaWFnbm9zdGljCisgICB8X19fX19fX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfXyAgICAgICAgICBffCBMRUQgKHJlZCkKKyAgICAgICAgICAgIHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCAgfCAgICAgICAgfAorICAgICAgICAgICAgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8IHwgfCB8ICB8X19fX19fX198CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCitBbmQgaGVyZSBhcmUgdGhlIHNldHRpbmdzIGZvciBzb21lIG9mIHRoZSBzd2l0Y2hlcyBhbmQganVtcGVycyBvbiB0aGUgY2FyZHMuCisKKworICAgICAgICAgIEkvTworCisgICAgICAgICAxIDIgMyA0IDUgNiA3IDgKKworMkUwLS0tLS0gMCAwIDAgMSAwIDAgMCAxCisyRjAtLS0tLSAwIDAgMCAxIDAgMCAwIDAKKzMwMC0tLS0tIDAgMCAwIDAgMSAxIDEgMQorMzUwLS0tLS0gMCAwIDAgMCAxIDEgMSAwCisKKyIwIiBpbiB0aGUgYWJvdmUgZXhhbXBsZSBtZWFucyBzd2l0Y2ggaXMgb2ZmICIxIiBtZWFucyB0aGF0IGl0IGlzIG9uLgorCisKKyAgICBTaE1lbSBhZGRyZXNzLgorCisgICAgICAxIDIgMyA0IDUgNiA3IDgKKworQ1gwMC0tMCAwIDEgMSB8IHwgICB8CitEWDAwLS0wIDAgMSAwICAgICAgIHwKK1gwMDAtLS0tLS0tLS0gMSAxICAgfAorWDQwMC0tLS0tLS0tLSAxIDAgICB8CitYODAwLS0tLS0tLS0tIDAgMSAgIHwKK1hDMDAtLS0tLS0tLS0gMCAwICAgCitFTkhBTkNFRC0tLS0tLS0tLS0tIDEKK0NPTVBBVElCTEUtLS0tLS0tLS0gMAorCisKKyAgICAgICBJUlEKKworCisgICAzIDQgNSA3IDIKKyAgIC4gLiAuIC4gLgorICAgLiAuIC4gLiAuCisKKworVGhlcmUgaXMgYSBESVAtc3dpdGNoIHdpdGggOCBzd2l0Y2hlcywgdXNlZCB0byBzZXQgdGhlIHNoYXJlZCBtZW1vcnkgYWRkcmVzcwordG8gYmUgdXNlZC4gVGhlIGZpcnN0IDYgc3dpdGNoZXMgc2V0IHRoZSBhZGRyZXNzLCB0aGUgN3RoIGRvZXNuJ3QgaGF2ZSBhbnkKK2Z1bmN0aW9uLCBhbmQgdGhlIDh0aCBzd2l0Y2ggaXMgdXNlZCB0byBzZWxlY3QgImNvbXBhdGlibGUiIG9yICJlbmhhbmNlZCIuCitXaGVuIEkgZ290IG15IHR3byBjYXJkcywgb25lIG9mIHRoZW0gaGFkIHRoaXMgc3dpdGNoIHNldCB0byAiZW5oYW5jZWQiLiBUaGF0CitjYXJkIGRpZG4ndCB3b3JrIGF0IGFsbCwgaXQgd2Fzbid0IGV2ZW4gcmVjb2duaXplZCBieSB0aGUgZHJpdmVyLiBUaGUgb3RoZXIKK2NhcmQgaGFkIHRoaXMgc3dpdGNoIHNldCB0byAiY29tcGF0aWJsZSIgYW5kIGl0IGJlaGF2ZWQgYWJzb2x1dGVseSBub3JtYWxseS4gSQorZ3Vlc3MgdGhhdCB0aGUgc3dpdGNoIG9uIG9uZSBvZiB0aGUgY2FyZHMsIG11c3QgaGF2ZSBiZWVuIGNoYW5nZWQgYWNjaWRlbnRhbGx5Cit3aGVuIHRoZSBjYXJkIHdhcyB0YWtlbiBvdXQgb2YgaXRzIGZvcm1lciBob3N0LiBUaGUgcXVlc3Rpb24gcmVtYWlucwordW5hbnN3ZXJlZCwgd2hhdCBpcyB0aGUgcHVycG9zZSBvZiB0aGUgImVuaGFuY2VkIiBwb3NpdGlvbj8KKworW0F2ZXJ5J3Mgbm90ZTogImVuaGFuY2VkIiBwcm9iYWJseSBlaXRoZXIgZGlzYWJsZXMgc2hhcmVkIG1lbW9yeSAodXNlIElPCitwb3J0cyBpbnN0ZWFkKSBvciBkaXNhYmxlcyBJTyBwb3J0cyAodXNlIG1lbW9yeSBhZGRyZXNzZXMgaW5zdGVhZCkuICBUaGlzCit2YXJpZXMgYnkgdGhlIHR5cGUgb2YgY2FyZCBpbnZvbHZlZC4gIEkgZmFpbCB0byBzZWUgaG93IGVpdGhlciBvZiB0aGVzZQorZW5oYW5jZSBhbnl0aGluZy4gIFNlbmQgbWUgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIG1vZGUsIG9yCitqdXN0IHVzZSAiY29tcGF0aWJsZSIgbW9kZSBpbnN0ZWFkLl0KKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqKiBXYXRlcmxvbyBNaWNyb3N5c3RlbXMgSW5jLiA/PyAqKgorOC1iaXQgY2FyZCAoQykgMTk4NQorLS0tLS0tLS0tLS0tLS0tLS0tLQorICAtIGZyb20gUm9iZXJ0IE1pY2hhZWwgQmVzdCA8cm1iMTE3QGNzLnVzYXNrLmNhPgorCitbQXZlcnkncyBub3RlOiB0aGVzZSBkb24ndCB3b3JrIHdpdGggbXkgZHJpdmVyIGZvciBzb21lIHJlYXNvbi4gIFRoZXNlIGNhcmRzCitTRUVNIHRvIGhhdmUgc2V0dGluZ3Mgc2ltaWxhciB0byB0aGUgUERJNTA4UGx1cywgd2hpY2ggaXMKK3NvZnR3YXJlLWNvbmZpZ3VyZWQgYW5kIGRvZXNuJ3Qgd29yayB3aXRoIG15IGRyaXZlciBlaXRoZXIuICBUaGUgIldhdGVybG9vCitjaGlwIiBpcyBhIGJvb3QgUFJPTSwgcHJvYmFibHkgZGVzaWduZWQgc3BlY2lmaWNhbGx5IGZvciB0aGUgVW5pdmVyc2l0eSBvZgorV2F0ZXJsb28uICBJZiB5b3UgaGF2ZSBhbnkgZnVydGhlciBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGNhcmQsIHBsZWFzZQorZS1tYWlsIG1lLl0KKworVGhlIHByb2JlIGhhcyBub3QgYmVlbiBhYmxlIHRvIGRldGVjdCB0aGUgY2FyZCBvbiBhbnkgb2YgdGhlIEoyIHNldHRpbmdzLAorYW5kIEkgdHJpZWQgdGhlbSBhZ2FpbiB3aXRoIHRoZSAiV2F0ZXJsb28iIGNoaXAgcmVtb3ZlZC4KKyAKKyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KK3wgXC8gIFwvICAgICAgICAgICAgICBfX18gIF9fIF9fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IEM0ICBDNCAgICAgfF58ICAgICB8IE0gfHwgIF4gIHx8XnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAtLSAgLS0gICAgIHxffCAgICAgfCA1IHx8ICAgICB8fCB8IEMzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgXC8gIFwvICAgICAgQzEwICAgIHxfX198fCAgICAgfHxffCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IAorfCBDNCAgQzQgICAgICAgICAgICAgXyAgXyB8ICAgICB8ICAgICAgICAgICAgICAgICA/PyAgICAgICAgICAgICAgICAgIHwgCit8IC0tICAtLSAgICAgICAgICAgIHwgXC8gfHwgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAKK3wgICAgICAgICAgICAgICAgICAgfCAgICB8fCAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IAorfCAgICAgICAgICAgICAgICAgICB8ICAgIHx8ICBDMSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgCit8ICAgICAgICAgICAgICAgICAgIHwgICAgfHwgICAgIHwgIFwvICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19ffCAgICAKK3wgICAgICAgICAgICAgICAgICAgfCBDNiB8fCAgICAgfCAgQzkgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8X19fIAorfCAgICAgICAgICAgICAgICAgICB8ICAgIHx8ICAgICB8ICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQk5DIHxfX198IAorfCAgICAgICAgICAgICAgICAgICB8ICAgIHx8ICAgICB8ICAgICAgICAgID5DN3wgICAgICAgICAgICAgICAgIHxfX19fX3wKK3wgICAgICAgICAgICAgICAgICAgfCAgICB8fCAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IF9fIF9fICAgICAgICAgICAgIHxfX19ffHxfX19fX3wgICAgICAgMSAyIDMgICAgIDYgICAgICAgICAgICAgICAgICAgfAorfHwgIF4gIHwgICAgID5DNHwgICAgICAgICAgICAgICAgICAgICAgfG98b3xvfG98b3xvfCBKMiAgICA+QzR8ICAgICAgIHwKK3x8ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxvfG98b3xvfG98b3wgICAgICAgICAgICAgICAgICB8Cit8fCBDMiAgfCAgICAgPkM0fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5DNHwgICAgICAgfAorfHwgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5DOHwgICAgICAgICAgICAgICAgICAgICAgIHwKK3x8ICAgICB8ICAgICAgIDIgMyA0IDUgNiA3ICBJUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAgPkM0fCAgICAgICB8Cit8fF9fX19ffCAgICAgIHxvfG98b3xvfG98b3wgSjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfF9fX19fX18gICAgICB8b3xvfG98b3xvfG98ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19fX19fX3wKKyAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgfF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKKworQzEgLS0gIkNPTTkwMjYKKyAgICAgICBTTUMgODYzOCIKKyAgICAgIEluIGEgY2hpcCBzb2NrZXQuCisKK0MyIC0tICJAQ29weXJpZ2h0CisgICAgICAgV2F0ZXJsb28gTWljcm9zeXN0ZW1zIEluYy4KKyAgICAgICAxOTg1IgorICAgICAgSW4gYSBjaGlwIFNvY2tldCB3aXRoIGluZm8gcHJpbnRlZCBvbiBhIGxhYmVsIGNvdmVyaW5nIGEgcm91bmQgd2luZG93CisgICAgICBzaG93aW5nIHRoZSBjaXJjdWl0IGluc2lkZS4gKFRoZSB3aW5kb3cgaW5kaWNhdGVzIGl0IGlzIGFuIEVQUk9NIGNoaXAuKQorCitDMyAtLSAiQ09NOTAzMgorICAgICAgIFNNQyA4NjQzIgorICAgICAgSW4gYSBjaGlwIHNvY2tldC4KKworQzQgLS0gIjc0TFMiCisgICAgICA5IHRvdGFsIG5vIHNvY2tldHMuCisKK001IC0tICI1MDAwNi0xMzYKKyAgICAgICAyMC4wMDAwMDAgTUhaCisgICAgICAgTVRRLVQxLVMzCisgICAgICAgMCBNLVRST04gODYtNDAiCisgICAgICBNZXRhbGxpYyBjYXNlIHdpdGggNCBwaW5zLCBubyBzb2NrZXQuCisKK0M2IC0tICJNT1NURUtAVEM4NjQzCisgICAgICAgTUs2MTE2Ti0yMAorICAgICAgIE1BTEFZU0lBIgorICAgICAgTm8gc29ja2V0LgorCitDNyAtLSBObyBzdGFtcCBvciBsYWJlbCBidXQgaW4gYSAyMCBwaW4gY2hpcCBzb2NrZXQuCisKK0M4IC0tICJQQUwxMEw4Q04KKyAgICAgICA4NjIzIgorICAgICAgSW4gYSAyMCBwaW4gc29ja2V0LgorCitDOSAtLSAiUEFsMTZSNEEtMkNOCisgICAgICAgODY0MSIKKyAgICAgIEluIGEgMjAgcGluIHNvY2tldC4KKworQzEwIC0tICJNODY0MAorICAgICAgICAgIE5NQworICAgICAgICA5MzA2TiIKKyAgICAgICBJbiBhbiA4IHBpbiBzb2NrZXQuCisKKz8/IC0tIFNvbWUgY29tcG9uZW50cyBvbiBhIHNtYWxsZXIgYm9hcmQgYW5kIGF0dGFjaGVkIHdpdGggMjAgcGlucyBhbGwgCisgICAgICBhbG9uZyB0aGUgc2lkZSBjbG9zZXN0IHRvIHRoZSBCTkMgY29ubmVjdG9yLiAgVGhlIGFyZSBjb2F0ZWQgaW4gYSBkYXJrIAorICAgICAgcmVzaW4uCisKK09uIHRoZSBib2FyZCB0aGVyZSBhcmUgdHdvIGp1bXBlciBiYW5rcyBsYWJlbGVkIEoyIGFuZCBKMy4gVGhlIAorbWFudWZhY3R1cmVyIGRpZG4ndCBwdXQgYSBKMSBvbiB0aGUgYm9hcmQuIFRoZSB0d28gYm9hcmRzIEkgaGF2ZSBib3RoIAorY2FtZSB3aXRoIGEganVtcGVyIGJveCBmb3IgZWFjaCBiYW5rLgorCitKMiAtLSBOdW1iZXJlZCAxIDIgMyA0IDUgNi4gCisgICAgICA0IGFuZCA1IGFyZSBub3Qgc3RhbXBlZCBkdWUgdG8gc29sZGVyIHBvaW50cy4KKyAgICAgICAKK0ozIC0tIElSUSAyIDMgNCA1IDYgNworCitUaGUgYm9hcmQgaXRzZWxmIGhhcyBhIG1hcGxlIGxlYWYgc3RhbXBlZCBqdXN0IGFib3ZlIHRoZSBpcnEganVtcGVycyAKK2FuZCAiLTIgNDYtODYiIGJlc2lkZSBDMi4gQmV0d2VlbiBDMSBhbmQgQzYgIkFTUyAnWSAzMDAxNjMiIGFuZCAiQDE5ODYgCitDT1JNQU4gQ1VTVE9NIEVMRUNUUk9OSUNTIENPUlAuIiBzdGFtcGVkIGp1c3QgYmVsb3cgdGhlIEJOQyBjb25uZWN0b3IuCitCZWxvdyB0aGF0ICJNQURFIElOIENBTkFEQSIKKworICAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyoqIE5vIE5hbWUgKioKKzgtYml0IGNhcmRzLCAxNi1iaXQgY2FyZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLSBmcm9tIEp1ZXJnZW4gU2VpZmVydCA8c2VpZmVydEBodHdtLmRlPgorICAKK05PTkFNRSA4LUJJVCBBUkNORVQKKz09PT09PT09PT09PT09PT09PT0KKworSSBoYXZlIG5hbWVkIHRoaXMgQVJDbmV0IGNhcmQgIk5PTkFNRSIsIHNpbmNlIHRoZXJlIGlzIG5vIG5hbWUgb2YgYW55CittYW51ZmFjdHVyZXIgb24gdGhlIEluc3RhbGxhdGlvbiBtYW51YWwgbm9yIG9uIHRoZSBzaGlwcGluZyBib3guIFRoZSBvbmx5CitoaW50IHRvIHRoZSBleGlzdGVuY2Ugb2YgYSBtYW51ZmFjdHVyZXIgYXQgYWxsIGlzIHdyaXR0ZW4gaW4gY29wcGVyLAoraXQgaXMgIk1hZGUgaW4gVGFpd2FuIgorCitUaGlzIGRlc2NyaXB0aW9uIGhhcyBiZWVuIHdyaXR0ZW4gYnkgSnVlcmdlbiBTZWlmZXJ0IDxzZWlmZXJ0QGh0d20uZGU+Cit1c2luZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBPcmlnaW5hbAorICAgICAgICAgICAgICAgICAgICAiQVJDbmV0IEluc3RhbGxhdGlvbiBNYW51YWwiCisKKworICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgIHwgfFNUQVJ8IEJVU3wgVC9QfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCB8X19fX3xfX19ffF9fX198ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19fX19fX19fX19fXyAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICBTTUMgICAgICAgICAgfCAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICBDT005MEM2NSAgICAgIHwgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfF9fX19fX19fX18tX19fX19fX19fX3wgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19ffAorICAgfCAgICAgIF9fX19fX19fX19fX19fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBDTiB8CisgICB8ICAgICB8IFBST00gICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxfX19fX3wKKyAgIHwgICAgID4gU09DS0VUICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgfF9fX19fX19fX19fX19fX3wgICAgICAgICAxIDIgMyA0IDUgNiA3IDggIDEgMiAzIDQgNSA2IDcgOCB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19fX19fXyAgX19fX19fX19fX19fX19fIHwKKyAgIHwgICAgICAgICAgIHxvfG98b3xvfG98b3xvfG98ICB8ICAgICAgU1cxICAgICAgfHwgICAgICBTVzIgICAgICB8fAorICAgfCAgICAgICAgICAgfG98b3xvfG98b3xvfG98b3wgIHxfX19fX19fX19fX19fX198fF9fX19fX19fX19fX19fX3x8CisgICB8X19fICAgICAgICAgMiAzIDQgNSA3IEUgRSBSICAgICAgICBOb2RlIElEICAgICAgIElPQl9ffF9fTUVNX19fX3wKKyAgICAgICB8ICAgICAgICBcIElSUSAgIC8gVCBUIE8gICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgIHxfX19fX19fX19fX19fX19fX18xXzJfTV9fX19fX19fX19fX19fX19fX19fX198CisKK0xlZ2VuZDoKKworQ09NOTBDNjU6ICAgICAgIEFSQ25ldCBQcm9iZQorUzEgIDEtODogICAgTm9kZSBJRCBTZWxlY3QKK1MyICAxLTM6ICAgIEkvTyBCYXNlIEFkZHJlc3MgU2VsZWN0CisgICAgNC02OiAgICBNZW1vcnkgQmFzZSBBZGRyZXNzIFNlbGVjdAorICAgIDctODogICAgUkFNIE9mZnNldCBTZWxlY3QKK0VUMSwgRVQyICAgIEV4dGVuZGVkIFRpbWVvdXQgU2VsZWN0CitST00gICAgIFJPTSBFbmFibGUgU2VsZWN0CitDTiAgICAgICAgICAgICAgUkc2MiBDb2F4IENvbm5lY3RvcgorU1RBUnwgQlVTIHwgVC9QIFRocmVlIGZpZWxkcyBmb3IgcGxhY2luZyBhIHNpZ24gKGNvbG9yZWQgY2lyY2xlKQorICAgICAgICAgICAgICAgIGluZGljYXRpbmcgdGhlIHRvcG9sb2d5IG9mIHRoZSBjYXJkCisKK1NldHRpbmcgb25lIG9mIHRoZSBzd2l0Y2hlcyB0byBPZmYgbWVhbnMgIjEiLCBPbiBtZWFucyAiMCIuCisKKworU2V0dGluZyB0aGUgTm9kZSBJRAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZWlnaHQgc3dpdGNoZXMgaW4gZ3JvdXAgU1cxIGFyZSB1c2VkIHRvIHNldCB0aGUgbm9kZSBJRC4KK0VhY2ggbm9kZSBhdHRhY2hlZCB0byB0aGUgbmV0d29yayBtdXN0IGhhdmUgYW4gdW5pcXVlIG5vZGUgSUQgd2hpY2gKK211c3QgYmUgZGlmZmVyZW50IGZyb20gMC4KK1N3aXRjaCA4IHNlcnZlcyBhcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IChMU0IpLgorCitUaGUgbm9kZSBJRCBpcyB0aGUgc3VtIG9mIHRoZSB2YWx1ZXMgb2YgYWxsIHN3aXRjaGVzIHNldCB0byAiMSIgIAorVGhlc2UgdmFsdWVzIGFyZToKKworICAgIFN3aXRjaCB8IFZhbHVlCisgICAgLS0tLS0tLXwtLS0tLS0tCisgICAgICA4ICAgIHwgICAxCisgICAgICA3ICAgIHwgICAyCisgICAgICA2ICAgIHwgICA0CisgICAgICA1ICAgIHwgICA4CisgICAgICA0ICAgIHwgIDE2CisgICAgICAzICAgIHwgIDMyCisgICAgICAyICAgIHwgIDY0CisgICAgICAxICAgIHwgMTI4CisKK1NvbWUgRXhhbXBsZXM6CisKKyAgICBTd2l0Y2ggICAgICAgICB8IEhleCAgICAgfCBEZWNpbWFsIAorICAgMSAyIDMgNCA1IDYgNyA4IHwgTm9kZSBJRCB8IE5vZGUgSUQKKyAgIC0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLQorICAgMCAwIDAgMCAwIDAgMCAwIHwgICAgbm90IGFsbG93ZWQKKyAgIDAgMCAwIDAgMCAwIDAgMSB8ICAgIDEgICAgfCAgICAxIAorICAgMCAwIDAgMCAwIDAgMSAwIHwgICAgMiAgICB8ICAgIDIKKyAgIDAgMCAwIDAgMCAwIDEgMSB8ICAgIDMgICAgfCAgICAzCisgICAgICAgLiAuIC4gICAgICAgfCAgICAgICAgIHwKKyAgIDAgMSAwIDEgMCAxIDAgMSB8ICAgNTUgICAgfCAgIDg1CisgICAgICAgLiAuIC4gICAgICAgfCAgICAgICAgIHwKKyAgIDEgMCAxIDAgMSAwIDEgMCB8ICAgQUEgICAgfCAgMTcwCisgICAgICAgLiAuIC4gICAgICAgfCAgICAgICAgIHwgIAorICAgMSAxIDEgMSAxIDEgMCAxIHwgICBGRCAgICB8ICAyNTMKKyAgIDEgMSAxIDEgMSAxIDEgMCB8ICAgRkUgICAgfCAgMjU0CisgICAxIDEgMSAxIDEgMSAxIDEgfCAgIEZGICAgIHwgIDI1NQorCisKK1NldHRpbmcgdGhlIEkvTyBCYXNlIEFkZHJlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZpcnN0IHRocmVlIHN3aXRjaGVzIGluIHN3aXRjaCBncm91cCBTVzIgYXJlIHVzZWQgdG8gc2VsZWN0IG9uZQorb2YgZWlnaHQgcG9zc2libGUgSS9PIEJhc2UgYWRkcmVzc2VzIHVzaW5nIHRoZSBmb2xsb3dpbmcgdGFibGUKKworICAgU3dpdGNoICAgICAgfCBIZXggSS9PCisgICAgMSAgIDIgICAzICB8IEFkZHJlc3MKKyAgIC0tLS0tLS0tLS0tLXwtLS0tLS0tLQorICAgT04gIE9OICBPTiAgfCAgMjYwCisgICBPTiAgT04gIE9GRiB8ICAyOTAKKyAgIE9OICBPRkYgT04gIHwgIDJFMCAgKE1hbnVmYWN0dXJlcidzIGRlZmF1bHQpCisgICBPTiAgT0ZGIE9GRiB8ICAyRjAKKyAgIE9GRiBPTiAgT04gIHwgIDMwMAorICAgT0ZGIE9OICBPRkYgfCAgMzUwCisgICBPRkYgT0ZGIE9OICB8ICAzODAKKyAgIE9GRiBPRkYgT0ZGIHwgIDNFMAorCisKK1NldHRpbmcgdGhlIEJhc2UgTWVtb3J5IChSQU0pIGJ1ZmZlciBBZGRyZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbWVtb3J5IGJ1ZmZlciByZXF1aXJlcyAySyBvZiBhIDE2SyBibG9jayBvZiBSQU0uIFRoZSBiYXNlIG9mIHRoaXMKKzE2SyBibG9jayBjYW4gYmUgbG9jYXRlZCBpbiBhbnkgb2YgZWlnaHQgcG9zaXRpb25zLgorU3dpdGNoZXMgNC02IG9mIHN3aXRjaCBncm91cCBTVzIgc2VsZWN0IHRoZSBCYXNlIG9mIHRoZSAxNksgYmxvY2suCitXaXRoaW4gdGhhdCAxNksgYWRkcmVzcyBzcGFjZSwgdGhlIGJ1ZmZlciBtYXkgYmUgYXNzaWduZWQgYW55IG9uZSBvZiBmb3VyCitwb3NpdGlvbnMsIGRldGVybWluZWQgYnkgdGhlIG9mZnNldCwgc3dpdGNoZXMgNyBhbmQgOCBvZiBncm91cCBTVzIuCisKKyAgIFN3aXRjaCAgICAgfCBIZXggUkFNIHwgSGV4IFJPTQorICAgNCA1IDYgIDcgOCB8IEFkZHJlc3MgfCBBZGRyZXNzICopCisgICAtLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0KKyAgIDAgMCAwICAwIDAgfCAgQzAwMDAgIHwgIEMyMDAwCisgICAwIDAgMCAgMCAxIHwgIEMwODAwICB8ICBDMjAwMAorICAgMCAwIDAgIDEgMCB8ICBDMTAwMCAgfCAgQzIwMDAKKyAgIDAgMCAwICAxIDEgfCAgQzE4MDAgIHwgIEMyMDAwCisgICAgICAgICAgICAgIHwgICAgICAgICB8CisgICAwIDAgMSAgMCAwIHwgIEM0MDAwICB8ICBDNjAwMAorICAgMCAwIDEgIDAgMSB8ICBDNDgwMCAgfCAgQzYwMDAKKyAgIDAgMCAxICAxIDAgfCAgQzUwMDAgIHwgIEM2MDAwCisgICAwIDAgMSAgMSAxIHwgIEM1ODAwICB8ICBDNjAwMAorICAgICAgICAgICAgICB8ICAgICAgICAgfAorICAgMCAxIDAgIDAgMCB8ICBDQzAwMCAgfCAgQ0UwMDAKKyAgIDAgMSAwICAwIDEgfCAgQ0M4MDAgIHwgIENFMDAwCisgICAwIDEgMCAgMSAwIHwgIENEMDAwICB8ICBDRTAwMAorICAgMCAxIDAgIDEgMSB8ICBDRDgwMCAgfCAgQ0UwMDAKKyAgICAgICAgICAgICAgfCAgICAgICAgIHwKKyAgIDAgMSAxICAwIDAgfCAgRDAwMDAgIHwgIEQyMDAwICAoTWFudWZhY3R1cmVyJ3MgZGVmYXVsdCkKKyAgIDAgMSAxICAwIDEgfCAgRDA4MDAgIHwgIEQyMDAwCisgICAwIDEgMSAgMSAwIHwgIEQxMDAwICB8ICBEMjAwMAorICAgMCAxIDEgIDEgMSB8ICBEMTgwMCAgfCAgRDIwMDAKKyAgICAgICAgICAgICAgfCAgICAgICAgIHwKKyAgIDEgMCAwICAwIDAgfCAgRDQwMDAgIHwgIEQ2MDAwCisgICAxIDAgMCAgMCAxIHwgIEQ0ODAwICB8ICBENjAwMAorICAgMSAwIDAgIDEgMCB8ICBENTAwMCAgfCAgRDYwMDAKKyAgIDEgMCAwICAxIDEgfCAgRDU4MDAgIHwgIEQ2MDAwCisgICAgICAgICAgICAgIHwgICAgICAgICB8CisgICAxIDAgMSAgMCAwIHwgIEQ4MDAwICB8ICBEQTAwMAorICAgMSAwIDEgIDAgMSB8ICBEODgwMCAgfCAgREEwMDAKKyAgIDEgMCAxICAxIDAgfCAgRDkwMDAgIHwgIERBMDAwCisgICAxIDAgMSAgMSAxIHwgIEQ5ODAwICB8ICBEQTAwMAorICAgICAgICAgICAgICB8ICAgICAgICAgfAorICAgMSAxIDAgIDAgMCB8ICBEQzAwMCAgfCAgREUwMDAKKyAgIDEgMSAwICAwIDEgfCAgREM4MDAgIHwgIERFMDAwCisgICAxIDEgMCAgMSAwIHwgIEREMDAwICB8ICBERTAwMAorICAgMSAxIDAgIDEgMSB8ICBERDgwMCAgfCAgREUwMDAKKyAgICAgICAgICAgICAgfCAgICAgICAgIHwKKyAgIDEgMSAxICAwIDAgfCAgRTAwMDAgIHwgIEUyMDAwCisgICAxIDEgMSAgMCAxIHwgIEUwODAwICB8ICBFMjAwMAorICAgMSAxIDEgIDEgMCB8ICBFMTAwMCAgfCAgRTIwMDAKKyAgIDEgMSAxICAxIDEgfCAgRTE4MDAgIHwgIEUyMDAwCisgIAorKikgVG8gZW5hYmxlIHRoZSA4SyBCb290IFBST00gaW5zdGFsbCB0aGUganVtcGVyIFJPTS4KKyAgIFRoZSBkZWZhdWx0IGlzIGp1bXBlciBST00gbm90IGluc3RhbGxlZC4KKworCitTZXR0aW5nIEludGVycnVwdCBSZXF1ZXN0IExpbmVzIChJUlEpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIHNlbGVjdCBhIGhhcmR3YXJlIGludGVycnVwdCBsZXZlbCBzZXQgb25lIChvbmx5IG9uZSEpIG9mIHRoZSBqdW1wZXJzCitJUlEyLCBJUlEzLCBJUlE0LCBJUlE1IG9yIElSUTcuIFRoZSBtYW51ZmFjdHVyZXIncyBkZWZhdWx0IGlzIElSUTIuCisgCisKK1NldHRpbmcgdGhlIFRpbWVvdXRzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgdHdvIGp1bXBlcnMgbGFiZWxlZCBFVDEgYW5kIEVUMiBhcmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHRpbWVvdXQKK3BhcmFtZXRlcnMgKHJlc3BvbnNlIGFuZCByZWNvbmZpZ3VyYXRpb24gdGltZSkuIEV2ZXJ5IG5vZGUgaW4gYSBuZXR3b3JrCittdXN0IGJlIHNldCB0byB0aGUgc2FtZSB0aW1lb3V0IHZhbHVlcy4KKworICAgRVQxIEVUMiB8IFJlc3BvbnNlIFRpbWUgKHVzKSB8IFJlY29uZmlndXJhdGlvbiBUaW1lIChtcykKKyAgIC0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBPZmYgT2ZmIHwgICAgICAgIDc4ICAgICAgICAgIHwgICAgICAgICAgODQwICAgKERlZmF1bHQpCisgICBPZmYgT24gIHwgICAgICAgMjg1ICAgICAgICAgIHwgICAgICAgICAxNjgwCisgICBPbiAgT2ZmIHwgICAgICAgNTYzICAgICAgICAgIHwgICAgICAgICAxNjgwCisgICBPbiAgT24gIHwgICAgICAxMTMwICAgICAgICAgIHwgICAgICAgICAxNjgwCisKK09uIG1lYW5zIGp1bXBlciBpbnN0YWxsZWQsIE9mZiBtZWFucyBqdW1wZXIgbm90IGluc3RhbGxlZAorCisKK05PTkFNRSAxNi1CSVQgQVJDTkVUCis9PT09PT09PT09PT09PT09PT09PQorCitUaGUgbWFudWFsIG9mIG15IDgtQml0IE5PTkFNRSBBUkNuZXQgQ2FyZCBjb250YWlucyBhbm90aGVyIGRlc2NyaXB0aW9uCitvZiBhIDE2LUJpdCBDb2F4IC8gVHdpc3RlZCBQYWlyIENhcmQuIFRoaXMgZGVzY3JpcHRpb24gaXMgaW5jb21wbGV0ZSwKK2JlY2F1c2UgdGhlcmUgYXJlIG1pc3NpbmcgdHdvIHBhZ2VzIGluIHRoZSBtYW51YWwgYm9va2xldC4gKFRoZSB0YWJsZQorb2YgY29udGVudHMgcmVwb3J0cyBwYWdlcyAuLi4gMi05LCAyLTExLCAyLTEyLCAzLTEsIC4uLiBidXQgaW5zaWRlCit0aGUgYm9va2xldCB0aGVyZSBpcyBhIGRpZmZlcmVudCB3YXkgb2YgY291bnRpbmcgLi4uIDItOSwgMi0xMCwgQS0xLAorKGVtcHR5IHBhZ2UpLCAzLTEsIC4uLiwgMy0xOCwgQS0xIChhZ2FpbiksIEEtMikKK0Fsc28gdGhlIHBpY3R1cmUgb2YgdGhlIGJvYXJkIGxheW91dCBpcyBub3QgYXMgZ29vZCBhcyB0aGUgcGljdHVyZSBvZgorOC1CaXQgY2FyZCwgYmVjYXVzZSB0aGVyZSBpc24ndCBhbnkgbGV0dGVyIGxpa2UgIlNXMSIgd3JpdHRlbiB0byB0aGUKK3BpY3R1cmUuCitTaG91bGQgc29tZWJvZHkgaGF2ZSBzdWNoIGEgYm9hcmQsIHBsZWFzZSBmZWVsIGZyZWUgdG8gY29tcGxldGUgdGhpcworZGVzY3JpcHRpb24gb3IgdG8gc2VuZCBhIG1haWwgdG8gbWUhCisKK1RoaXMgZGVzY3JpcHRpb24gaGFzIGJlZW4gd3JpdHRlbiBieSBKdWVyZ2VuIFNlaWZlcnQgPHNlaWZlcnRAaHR3bS5kZT4KK3VzaW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIE9yaWdpbmFsCisgICAgICAgICAgICAgICAgICAgICJBUkNuZXQgSW5zdGFsbGF0aW9uIE1hbnVhbCIKKworCisgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgIDwgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19fX19fX19fICBfX19fX19fX19fX19fX19fXyAgICAgICAgICAgfAorICA+ICAgICAgICAgICAgICAgICAgIHwgICAgICAgU1c/ICAgICAgIHx8ICAgICAgU1c/ICAgICAgICB8ICAgICAgICAgIHwKKyAgPCAgICAgICAgICAgICAgICAgICB8X19fX19fX19fX19fX19fX198fF9fX19fX19fX19fX19fX19ffCAgICAgICAgICB8CisgID4gICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19fX19fX19fX19fICAgICAgICAgICAgICAgICAgICAgICAgfAorICA8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgPiAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgIDwgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfAorICA+ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgPCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8CisgID4gICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfAorICA8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgPiAgICAgICAgICAgICAgICAgICAgICB8X19fX19fX19fX19fX19fX19fX198ICAgICAgICAgICAgICAgICAgICAgICB8CisgIDwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19ffAorICA+ICAgICAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX19fX19fX19fXyAgICAgICAgICAgICAgICAgICB8ICAgIHwKKyAgPCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCBKMSB8CisgID4gICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgPCAgICAgICAgICAgICAgICAgIHwgICAgfAorICA8ICAgICAgICAgICAgICAgICAgICAgIHxfX19fX19fX19fX19fX19fX19fX3wgID8gPyA/ID8gPyA/ICAgICB8X19fX3wKKyAgPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxvfG98b3xvfG98b3wgICAgICAgICB8CisgIDwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8b3xvfG98b3xvfG98ICAgICAgICAgfAorICA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgPCAgICAgICAgICAgICBfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19fX19fX19fX198CisgID4gICAgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICA8X19fX19fX19fX19ffCAgfF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKKworCitTZXR0aW5nIG9uZSBvZiB0aGUgc3dpdGNoZXMgdG8gT2ZmIG1lYW5zICIxIiwgT24gbWVhbnMgIjAiLgorCisKK1NldHRpbmcgdGhlIE5vZGUgSUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGVpZ2h0IHN3aXRjaGVzIGluIGdyb3VwIFNXMiBhcmUgdXNlZCB0byBzZXQgdGhlIG5vZGUgSUQuCitFYWNoIG5vZGUgYXR0YWNoZWQgdG8gdGhlIG5ldHdvcmsgbXVzdCBoYXZlIGFuIHVuaXF1ZSBub2RlIElEIHdoaWNoCittdXN0IGJlIGRpZmZlcmVudCBmcm9tIDAuCitTd2l0Y2ggOCBzZXJ2ZXMgYXMgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCAoTFNCKS4KKworVGhlIG5vZGUgSUQgaXMgdGhlIHN1bSBvZiB0aGUgdmFsdWVzIG9mIGFsbCBzd2l0Y2hlcyBzZXQgdG8gIjEiICAKK1RoZXNlIHZhbHVlcyBhcmU6CisKKyAgICBTd2l0Y2ggfCBWYWx1ZQorICAgIC0tLS0tLS18LS0tLS0tLQorICAgICAgOCAgICB8ICAgMQorICAgICAgNyAgICB8ICAgMgorICAgICAgNiAgICB8ICAgNAorICAgICAgNSAgICB8ICAgOAorICAgICAgNCAgICB8ICAxNgorICAgICAgMyAgICB8ICAzMgorICAgICAgMiAgICB8ICA2NAorICAgICAgMSAgICB8IDEyOAorCitTb21lIEV4YW1wbGVzOgorCisgICAgU3dpdGNoICAgICAgICAgfCBIZXggICAgIHwgRGVjaW1hbCAKKyAgIDEgMiAzIDQgNSA2IDcgOCB8IE5vZGUgSUQgfCBOb2RlIElECisgICAtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0KKyAgIDAgMCAwIDAgMCAwIDAgMCB8ICAgIG5vdCBhbGxvd2VkCisgICAwIDAgMCAwIDAgMCAwIDEgfCAgICAxICAgIHwgICAgMSAKKyAgIDAgMCAwIDAgMCAwIDEgMCB8ICAgIDIgICAgfCAgICAyCisgICAwIDAgMCAwIDAgMCAxIDEgfCAgICAzICAgIHwgICAgMworICAgICAgIC4gLiAuICAgICAgIHwgICAgICAgICB8CisgICAwIDEgMCAxIDAgMSAwIDEgfCAgIDU1ICAgIHwgICA4NQorICAgICAgIC4gLiAuICAgICAgIHwgICAgICAgICB8CisgICAxIDAgMSAwIDEgMCAxIDAgfCAgIEFBICAgIHwgIDE3MAorICAgICAgIC4gLiAuICAgICAgIHwgICAgICAgICB8ICAKKyAgIDEgMSAxIDEgMSAxIDAgMSB8ICAgRkQgICAgfCAgMjUzCisgICAxIDEgMSAxIDEgMSAxIDAgfCAgIEZFICAgIHwgIDI1NAorICAgMSAxIDEgMSAxIDEgMSAxIHwgICBGRiAgICB8ICAyNTUKKworCitTZXR0aW5nIHRoZSBJL08gQmFzZSBBZGRyZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmaXJzdCB0aHJlZSBzd2l0Y2hlcyBpbiBzd2l0Y2ggZ3JvdXAgU1cxIGFyZSB1c2VkIHRvIHNlbGVjdCBvbmUKK29mIGVpZ2h0IHBvc3NpYmxlIEkvTyBCYXNlIGFkZHJlc3NlcyB1c2luZyB0aGUgZm9sbG93aW5nIHRhYmxlCisKKyAgIFN3aXRjaCAgICAgIHwgSGV4IEkvTworICAgIDMgICAyICAgMSAgfCBBZGRyZXNzCisgICAtLS0tLS0tLS0tLS18LS0tLS0tLS0KKyAgIE9OICBPTiAgT04gIHwgIDI2MAorICAgT04gIE9OICBPRkYgfCAgMjkwCisgICBPTiAgT0ZGIE9OICB8ICAyRTAgIChNYW51ZmFjdHVyZXIncyBkZWZhdWx0KQorICAgT04gIE9GRiBPRkYgfCAgMkYwCisgICBPRkYgT04gIE9OICB8ICAzMDAKKyAgIE9GRiBPTiAgT0ZGIHwgIDM1MAorICAgT0ZGIE9GRiBPTiAgfCAgMzgwCisgICBPRkYgT0ZGIE9GRiB8ICAzRTAKKworCitTZXR0aW5nIHRoZSBCYXNlIE1lbW9yeSAoUkFNKSBidWZmZXIgQWRkcmVzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG1lbW9yeSBidWZmZXIgcmVxdWlyZXMgMksgb2YgYSAxNksgYmxvY2sgb2YgUkFNLiBUaGUgYmFzZSBvZiB0aGlzCisxNksgYmxvY2sgY2FuIGJlIGxvY2F0ZWQgaW4gYW55IG9mIGVpZ2h0IHBvc2l0aW9ucy4KK1N3aXRjaGVzIDYtOCBvZiBzd2l0Y2ggZ3JvdXAgU1cxIHNlbGVjdCB0aGUgQmFzZSBvZiB0aGUgMTZLIGJsb2NrLgorV2l0aGluIHRoYXQgMTZLIGFkZHJlc3Mgc3BhY2UsIHRoZSBidWZmZXIgbWF5IGJlIGFzc2lnbmVkIGFueSBvbmUgb2YgZm91cgorcG9zaXRpb25zLCBkZXRlcm1pbmVkIGJ5IHRoZSBvZmZzZXQsIHN3aXRjaGVzIDQgYW5kIDUgb2YgZ3JvdXAgU1cxLgorCisgICBTd2l0Y2ggICAgIHwgSGV4IFJBTSB8IEhleCBST00KKyAgIDggNyA2ICA1IDQgfCBBZGRyZXNzIHwgQWRkcmVzcworICAgLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tCisgICAwIDAgMCAgMCAwIHwgIEMwMDAwICB8ICBDMjAwMAorICAgMCAwIDAgIDAgMSB8ICBDMDgwMCAgfCAgQzIwMDAKKyAgIDAgMCAwICAxIDAgfCAgQzEwMDAgIHwgIEMyMDAwCisgICAwIDAgMCAgMSAxIHwgIEMxODAwICB8ICBDMjAwMAorICAgICAgICAgICAgICB8ICAgICAgICAgfAorICAgMCAwIDEgIDAgMCB8ICBDNDAwMCAgfCAgQzYwMDAKKyAgIDAgMCAxICAwIDEgfCAgQzQ4MDAgIHwgIEM2MDAwCisgICAwIDAgMSAgMSAwIHwgIEM1MDAwICB8ICBDNjAwMAorICAgMCAwIDEgIDEgMSB8ICBDNTgwMCAgfCAgQzYwMDAKKyAgICAgICAgICAgICAgfCAgICAgICAgIHwKKyAgIDAgMSAwICAwIDAgfCAgQ0MwMDAgIHwgIENFMDAwCisgICAwIDEgMCAgMCAxIHwgIENDODAwICB8ICBDRTAwMAorICAgMCAxIDAgIDEgMCB8ICBDRDAwMCAgfCAgQ0UwMDAKKyAgIDAgMSAwICAxIDEgfCAgQ0Q4MDAgIHwgIENFMDAwCisgICAgICAgICAgICAgIHwgICAgICAgICB8CisgICAwIDEgMSAgMCAwIHwgIEQwMDAwICB8ICBEMjAwMCAgKE1hbnVmYWN0dXJlcidzIGRlZmF1bHQpCisgICAwIDEgMSAgMCAxIHwgIEQwODAwICB8ICBEMjAwMAorICAgMCAxIDEgIDEgMCB8ICBEMTAwMCAgfCAgRDIwMDAKKyAgIDAgMSAxICAxIDEgfCAgRDE4MDAgIHwgIEQyMDAwCisgICAgICAgICAgICAgIHwgICAgICAgICB8CisgICAxIDAgMCAgMCAwIHwgIEQ0MDAwICB8ICBENjAwMAorICAgMSAwIDAgIDAgMSB8ICBENDgwMCAgfCAgRDYwMDAKKyAgIDEgMCAwICAxIDAgfCAgRDUwMDAgIHwgIEQ2MDAwCisgICAxIDAgMCAgMSAxIHwgIEQ1ODAwICB8ICBENjAwMAorICAgICAgICAgICAgICB8ICAgICAgICAgfAorICAgMSAwIDEgIDAgMCB8ICBEODAwMCAgfCAgREEwMDAKKyAgIDEgMCAxICAwIDEgfCAgRDg4MDAgIHwgIERBMDAwCisgICAxIDAgMSAgMSAwIHwgIEQ5MDAwICB8ICBEQTAwMAorICAgMSAwIDEgIDEgMSB8ICBEOTgwMCAgfCAgREEwMDAKKyAgICAgICAgICAgICAgfCAgICAgICAgIHwKKyAgIDEgMSAwICAwIDAgfCAgREMwMDAgIHwgIERFMDAwCisgICAxIDEgMCAgMCAxIHwgIERDODAwICB8ICBERTAwMAorICAgMSAxIDAgIDEgMCB8ICBERDAwMCAgfCAgREUwMDAKKyAgIDEgMSAwICAxIDEgfCAgREQ4MDAgIHwgIERFMDAwCisgICAgICAgICAgICAgIHwgICAgICAgICB8CisgICAxIDEgMSAgMCAwIHwgIEUwMDAwICB8ICBFMjAwMAorICAgMSAxIDEgIDAgMSB8ICBFMDgwMCAgfCAgRTIwMDAKKyAgIDEgMSAxICAxIDAgfCAgRTEwMDAgIHwgIEUyMDAwCisgICAxIDEgMSAgMSAxIHwgIEUxODAwICB8ICBFMjAwMAorICAKKworU2V0dGluZyBJbnRlcnJ1cHQgUmVxdWVzdCBMaW5lcyAoSVJRKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/PworCisKK1NldHRpbmcgdGhlIFRpbWVvdXRzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCis/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/PworCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyoqIE5vIE5hbWUgKioKKzgtYml0IGNhcmRzICgiTWFkZSBpbiBUYWl3YW4gUi5PLkMuIikKKy0tLS0tLS0tLS0tCisgIC0gZnJvbSBWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEBzdXNlLmN6PgorCitJIGhhdmUgbmFtZWQgdGhpcyBBUkNuZXQgY2FyZCAiTk9OQU1FIiwgc2luY2UgSSBnb3Qgb25seSB0aGUgY2FyZCB3aXRoCitubyBtYW51YWwgYXQgYWxsIGFuZCB0aGUgb25seSB0ZXh0IGlkZW50aWZ5aW5nIHRoZSBtYW51ZmFjdHVyZXIgaXMgCisiTUFERSBJTiBUQUlXQU4gUi5PLkMiIHByaW50ZWQgb24gdGhlIGNhcmQuCisKKyAgICAgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgICAgICAgIHwgICAgICAgICAgICAgICAgIDEgMiAzIDQgNSA2IDcgOCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICB8IHxvfG98IEpQMSAgICAgICBvfG98b3xvfG98b3xvfG98IE9OICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgfCAgKyAgICAgICAgICAgICAgb3xvfG98b3xvfG98b3xvfCAgICAgICAgICAgICAgICAgICAgICAgIF9fX3wKKyAgICAgICAgIHwgIF9fX19fX19fX19fX18gIG98b3xvfG98b3xvfG98b3wgT0ZGICAgICAgICAgX19fX18gICAgIHwgICB8IElENworICAgICAgICAgfCB8ICAgICAgICAgICAgIHwgU1cxICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgICAgfCAgIHwgSUQ2CisgICAgICAgICB8ID4gUkFNICgyaykgICAgfCAgICAgICAgX19fX19fX19fX19fX19fX19fX18gfCAgSCAgfCAgICB8IFMgfCBJRDUKKyAgICAgICAgIHwgfF9fX19fX19fX19fX198ICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8ICB5ICB8ICAgIHwgVyB8IElENAorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwgIGIgIHwgICAgfCAyIHwgSUQzCisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fCAgciAgfCAgICB8ICAgfCBJRDIKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8ICBpICB8ICAgIHwgICB8IElEMQorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICA5MEM2NSAgICAgICAgfHwgIGQgIHwgICAgfF9fX3wgSUQwCisgICAgICAgICB8ICAgICAgU1czICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fCAgICAgfCAgICAgICAgfCAgICAgIAorICAgICAgICAgfCB8b3xvfG98b3xvfG98b3xvfCBPTiAgfCAgICAgICAgICAgICAgICAgICAgfHwgIEkgIHwgICAgICAgIHwKKyAgICAgICAgIHwgfG98b3xvfG98b3xvfG98b3wgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8ICBDICB8ICAgICAgICB8CisgICAgICAgICB8IHxvfG98b3xvfG98b3xvfG98IE9GRiB8X19fX19fX19fX19fX19fX19fX198fCAgICAgfCAgIF9fX19ffAorICAgICAgICAgfCAgMSAyIDMgNCA1IDYgNyA4ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgIHwgICAgIHxfX18KKyAgICAgICAgIHwgIF9fX19fX19fX19fX19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8ICB8IEJOQyB8X19ffAorICAgICAgICAgfCB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxfX19fX3wgIHxfX19fX3wKKyAgICAgICAgIHwgPiBFUFJPTSBTT0NLRVQgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICB8IHxfX19fX19fX19fX19fX3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX19fX3wKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICB8X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19ffAorCitMZWdlbmQ6CisKKzkwQzY1ICAgICAgIEFSQ05FVCBDaGlwIAorU1cxIDEtNTogICAgQmFzZSBNZW1vcnkgQWRkcmVzcyBTZWxlY3QKKyAgICA2LTg6ICAgIEJhc2UgSS9PIEFkZHJlc3MgU2VsZWN0CitTVzIgMS04OiAgICBOb2RlIElEIFNlbGVjdCAoSUQwLUlENykKK1NXMyAxLTU6ICAgIElSUSBTZWxlY3QgICAKKyAgICA2LTc6ICAgIEV4dHJhIFRpbWVvdXQKKyAgICA4ICA6ICAgIFJPTSBFbmFibGUgICAKK0pQMSAgICAgICAgIExlZCBjb25uZWN0b3IKK0JOQyAgICAgICAgIENvYXggY29ubmVjdG9yCisKK0FsdGhvdWdoIHRoZSBqdW1wZXJzIFNXMSBhbmQgU1czIGFyZSBtYXJrZWQgU1csIG5vdCBKUCwgdGhleSBhcmUganVtcGVycywgbm90IAorc3dpdGNoZXMuCisKK1NldHRpbmcgdGhlIGp1bXBlcnMgdG8gT04gbWVhbnMgY29ubmVjdGluZyB0aGUgdXBwZXIgdHdvIHBpbnMsIG9mZiB0aGUgYm90dG9tIAordHdvIC0gb3IgLSBpbiBjYXNlIG9mIElSUSBzZXR0aW5nLCBjb25uZWN0aW5nIG5vbmUgb2YgdGhlbSBhdCBhbGwuCisKK1NldHRpbmcgdGhlIE5vZGUgSUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGVpZ2h0IHN3aXRjaGVzIGluIFNXMiBhcmUgdXNlZCB0byBzZXQgdGhlIG5vZGUgSUQuIEVhY2ggbm9kZSBhdHRhY2hlZAordG8gdGhlIG5ldHdvcmsgbXVzdCBoYXZlIGFuIHVuaXF1ZSBub2RlIElEIHdoaWNoIG11c3Qgbm90IGJlIDAuCitTd2l0Y2ggMSAoSUQwKSBzZXJ2ZXMgYXMgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCAoTFNCKS4KKworU2V0dGluZyBvbmUgb2YgdGhlIHN3aXRjaGVzIHRvIE9mZiBtZWFucyAiMSIsIE9uIG1lYW5zICIwIi4KKworVGhlIG5vZGUgSUQgaXMgdGhlIHN1bSBvZiB0aGUgdmFsdWVzIG9mIGFsbCBzd2l0Y2hlcyBzZXQgdG8gIjEiICAKK1RoZXNlIHZhbHVlcyBhcmU6CisKKyAgIFN3aXRjaCB8IExhYmVsIHwgVmFsdWUKKyAgIC0tLS0tLS18LS0tLS0tLXwtLS0tLS0tCisgICAgIDEgICAgfCBJRDAgICB8ICAgMQorICAgICAyICAgIHwgSUQxICAgfCAgIDIKKyAgICAgMyAgICB8IElEMiAgIHwgICA0CisgICAgIDQgICAgfCBJRDMgICB8ICAgOAorICAgICA1ICAgIHwgSUQ0ICAgfCAgMTYKKyAgICAgNiAgICB8IElENSAgIHwgIDMyCisgICAgIDcgICAgfCBJRDYgICB8ICA2NAorICAgICA4ICAgIHwgSUQ3ICAgfCAxMjgKKworU29tZSBFeGFtcGxlczoKKworICAgIFN3aXRjaCAgICAgICAgIHwgSGV4ICAgICB8IERlY2ltYWwgCisgICA4IDcgNiA1IDQgMyAyIDEgfCBOb2RlIElEIHwgTm9kZSBJRAorICAgLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tCisgICAwIDAgMCAwIDAgMCAwIDAgfCAgICBub3QgYWxsb3dlZAorICAgMCAwIDAgMCAwIDAgMCAxIHwgICAgMSAgICB8ICAgIDEgCisgICAwIDAgMCAwIDAgMCAxIDAgfCAgICAyICAgIHwgICAgMgorICAgMCAwIDAgMCAwIDAgMSAxIHwgICAgMyAgICB8ICAgIDMKKyAgICAgICAuIC4gLiAgICAgICB8ICAgICAgICAgfAorICAgMCAxIDAgMSAwIDEgMCAxIHwgICA1NSAgICB8ICAgODUKKyAgICAgICAuIC4gLiAgICAgICB8ICAgICAgICAgfAorICAgMSAwIDEgMCAxIDAgMSAwIHwgICBBQSAgICB8ICAxNzAKKyAgICAgICAuIC4gLiAgICAgICB8ICAgICAgICAgfCAgCisgICAxIDEgMSAxIDEgMSAwIDEgfCAgIEZEICAgIHwgIDI1MworICAgMSAxIDEgMSAxIDEgMSAwIHwgICBGRSAgICB8ICAyNTQKKyAgIDEgMSAxIDEgMSAxIDEgMSB8ICAgRkYgICAgfCAgMjU1CisKKworU2V0dGluZyB0aGUgSS9PIEJhc2UgQWRkcmVzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbGFzdCB0aHJlZSBzd2l0Y2hlcyBpbiBzd2l0Y2ggYmxvY2sgU1cxIGFyZSB1c2VkIHRvIHNlbGVjdCBvbmUKK29mIGVpZ2h0IHBvc3NpYmxlIEkvTyBCYXNlIGFkZHJlc3NlcyB1c2luZyB0aGUgZm9sbG93aW5nIHRhYmxlCisKKworICAgU3dpdGNoICAgICAgfCBIZXggSS9PCisgICAgNiAgIDcgICA4ICB8IEFkZHJlc3MKKyAgIC0tLS0tLS0tLS0tLXwtLS0tLS0tLQorICAgT04gIE9OICBPTiAgfCAgMjYwCisgICBPRkYgT04gIE9OICB8ICAyOTAKKyAgIE9OICBPRkYgT04gIHwgIDJFMCAgKE1hbnVmYWN0dXJlcidzIGRlZmF1bHQpCisgICBPRkYgT0ZGIE9OICB8ICAyRjAKKyAgIE9OICBPTiAgT0ZGIHwgIDMwMAorICAgT0ZGIE9OICBPRkYgfCAgMzUwCisgICBPTiAgT0ZGIE9GRiB8ICAzODAKKyAgIE9GRiBPRkYgT0ZGIHwgIDNFMAorCisKK1NldHRpbmcgdGhlIEJhc2UgTWVtb3J5IChSQU0pIGJ1ZmZlciBBZGRyZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbWVtb3J5IGJ1ZmZlciAoUkFNKSByZXF1aXJlcyAySy4gVGhlIGJhc2Ugb2YgdGhpcyBidWZmZXIgY2FuIGJlIAorbG9jYXRlZCBpbiBhbnkgb2YgZWlnaHQgcG9zaXRpb25zLiBUaGUgYWRkcmVzcyBvZiB0aGUgQm9vdCBQcm9tIGlzCittZW1vcnkgYmFzZSArIDB4MjAwMC4KK0p1bXBlcnMgMy01IG9mIGp1bXBlciBibG9jayBTVzEgc2VsZWN0IHRoZSBNZW1vcnkgQmFzZSBhZGRyZXNzLgorCisgICBTd2l0Y2ggICAgICAgICAgICAgIHwgSGV4IFJBTSB8IEhleCBST00KKyAgICAxICAgMiAgIDMgICA0ICAgNSAgfCBBZGRyZXNzIHwgQWRkcmVzcyAqKQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tCisgICBPTiAgT04gIE9OICBPTiAgT04gIHwgIEMwMDAwICB8ICBDMjAwMAorICAgT04gIE9OICBPRkYgT04gIE9OICB8ICBDNDAwMCAgfCAgQzYwMDAKKyAgIE9OICBPTiAgT04gIE9GRiBPTiAgfCAgQ0MwMDAgIHwgIENFMDAwCisgICBPTiAgT04gIE9GRiBPRkYgT04gIHwgIEQwMDAwICB8ICBEMjAwMCAgKE1hbnVmYWN0dXJlcidzIGRlZmF1bHQpCisgICBPTiAgT04gIE9OICBPTiAgT0ZGIHwgIEQ0MDAwICB8ICBENjAwMAorICAgT04gIE9OICBPRkYgT04gIE9GRiB8ICBEODAwMCAgfCAgREEwMDAKKyAgIE9OICBPTiAgT04gIE9GRiBPRkYgfCAgREMwMDAgIHwgIERFMDAwCisgICBPTiAgT04gIE9GRiBPRkYgT0ZGIHwgIEUwMDAwICB8ICBFMjAwMAorICAKKyopIFRvIGVuYWJsZSB0aGUgQm9vdCBST00gc2V0IHRoZSBqdW1wZXIgOCBvZiBqdW1wZXIgYmxvY2sgU1czIHRvIHBvc2l0aW9uIE9OLgorCitUaGUganVtcGVycyAxIGFuZCAyIHByb2JhYmx5IGFkZCAweDA4MDAsIDB4MTAwMCBhbmQgMHgxODAwIHRvIFJBTSBhZGRlcnMuCisKK1NldHRpbmcgdGhlIEludGVycnVwdCBMaW5lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitKdW1wZXJzIDEtNSBvZiB0aGUganVtcGVyIGJsb2NrIFNXMyBjb250cm9sIHRoZSBJUlEgbGV2ZWwuCisKKyAgICBKdW1wZXIgICAgICAgICAgICAgIHwgIElSUQorICAgIDEgICAyICAgMyAgIDQgICA1ICAgfAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIE9OICBPRkYgT0ZGIE9GRiBPRkYgfCAgMgorICAgIE9GRiBPTiAgT0ZGIE9GRiBPRkYgfCAgMworICAgIE9GRiBPRkYgT04gIE9GRiBPRkYgfCAgNAorICAgIE9GRiBPRkYgT0ZGIE9OICBPRkYgfCAgNQorICAgIE9GRiBPRkYgT0ZGIE9GRiBPTiAgfCAgNworCisKK1NldHRpbmcgdGhlIFRpbWVvdXQgUGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBqdW1wZXJzIDYtNyBvZiB0aGUganVtcGVyIGJsb2NrIFNXMyBhcmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHRpbWVvdXQgCitwYXJhbWV0ZXJzLiBUaGVzZSB0d28ganVtcGVycyBhcmUgbm9ybWFsbHkgbGVmdCBpbiB0aGUgT0ZGIHBvc2l0aW9uLgorCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyoqIE5vIE5hbWUgKioKKyhHZW5lcmljIE1vZGVsIDkwNTgpCistLS0tLS0tLS0tLS0tLS0tLS0tLQorICAtIGZyb20gQW5kcmV3IEouIEtyb2xsIDxhZzc4NEBmcmVlbmV0LmJ1ZmZhbG8uZWR1PgorICAtIFNvcnJ5IHRoaXMgc2F0IGluIG15IHRvLWRvIGJveCBmb3Igc28gbG9uZywgQW5kcmV3ISAoeWlrZXMgLSBvdmVyIGEKKyAgICB5ZWFyISkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IC4tLS0nCisgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyB8IHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICBTVzIgICAgIHwgICAgICAgICAgICAgICAgICAgICAgfCAgfAorICAgfCAgIF9fX19fX19fX19fICAgICAgICAgICAgIHxfX19fX19fX19fX19ffCAgICAgICAgICAgICAgICAgICAgICB8ICB8CisgICB8ICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAxIDIgMyA0IDUgNiAgICAgICAgICAgICAgICAgICAgIF9fX3wgIHwKKyAgIHwgID4gIDYxMTYgUkFNIHwgICAgICAgICBfX19fX19fX18gICAgICAgICAgICAgICAgICAgICAgICAgOCB8ICAgfCAgfAorICAgfCAgfF9fX19fX19fX19ffCAgICAgICAgfDIwTUh6WHRhbHwgICAgICAgICAgICAgICAgICAgICAgICA3IHwgICB8ICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICB8X19fX19fX19ffCAgICAgICBfX19fX19fX19fICAgICAgIDYgfCBTIHwgIHwKKyAgIHwgICAgNzRMUzM3MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8LSAgICAgNSB8IFcgfCAgfAorICAgfCAgIF9fX19fX19fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgRSAgIHwtICAgICA0IHwgICB8ICB8CisgICB8ICAgPl9fX19fX198ICAgICAgICAgICAgICBfX19fX19fX19fX19fX3wuLi4uLiBQICAgfC0gICAgIDMgfCAzIHwgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICA6IE8gICB8LSAgICAgMiB8ICAgfCAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgIDogWCAgIHwtICAgICAxIHxfX198ICB8CisgICB8ICAgX19fX19fX19fX19fX19fXyAgICAgIHwgICAgICAgICAgICAgIHwgICAgOiBZICAgfC0gICAgICAgICAgIHwgIHwKKyAgIHwgIHwgICAgICBTVzEgICAgICAgfCAgICAgfCAgICAgIFNMOTBDNjUgfCAgICA6ICAgICB8LSAgICAgICAgICAgfCAgfAorICAgfCAgfF9fX19fX19fX19fX19fX198ICAgICB8ICAgICAgICAgICAgICB8ICAgIDogQiAgIHwtICAgICAgICAgICB8ICB8CisgICB8ICAgIDEgMiAzIDQgNSA2IDcgOCAgICAgIHwgICAgICAgICAgICAgIHwgICAgOiBPICAgfC0gICAgICAgICAgIHwgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfF9fX19fX19fX29fX19ffC4uLi4vIEEgICB8LSAgICBfX19fX19ffCAgfAorICAgfCAgICBfX19fX19fX19fX19fX19fX19fXyAgICAgICAgICAgICAgICB8ICAgICAgUiAgIHwtICAgfCAgICAgICB8LS0tLS0tLCAgIAorICAgfCAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8ICAgICAgRCAgIHwtICAgfCAgQk5DICB8ICAgIyAgfAorICAgfCAgID4gMjc2NCBQUk9NIFNPQ0tFVCAgIHwgICAgICAgICAgICAgICB8X19fX19fX19fX3wtICAgfF9fX19fX198LS0tLS0tJworICAgfCAgIHxfX19fX19fX19fX19fX19fX19fX3wgICAgICAgICAgICAgIF9fX19fX19fXyAgICAgICAgICAgICAgICB8ICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPl9fX19fX19ffCA8LSA3NExTMjQ1ICAgIHwgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgfAorICAgfF9fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19fX19fX19fX19fX198ICB8CisgICAgICAgfEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSCBIIEggSHwgICAgICAgICAgICAgICB8IHwKKyAgICAgICB8VV9VX1VfVV9VX1VfVV9VX1VfVV9VX1VfVV9VX1VfVV9VX1VfVV9VX1VfVV9VfCAgICAgICAgICAgICAgIHwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFx8CitMZWdlbmQ6CisKK1NMOTBDNjUgCUFSQ05FVCBDb250cm9sbGVyIC8gVHJhbnNjZWl2ZXIgL0xvZ2ljCitTVzEJMS01OglJUlEgU2VsZWN0CisJICA2OglFVDEKKwkgIDc6CUVUMgorCSAgODoJUk9NIEVOQUJMRSAKK1NXMgkxLTM6ICAgIE1lbW9yeSBCdWZmZXIvUFJPTSBBZGRyZXNzCisJMy02OglJL08gQWRkcmVzcyBNYXAKK1NXMwkxLTg6CU5vZGUgSUQgU2VsZWN0CitCTkMJCUJOQyBSRzYyL1UgQ29ubmVjdGlvbiAKKwkJKkkqIGhhdmUgaGFkIHN1Y2Nlc3MgdXNpbmcgUkc1OUIvVSB3aXRoICpOTyogdGVybWluYXRvcnMhCisJCVdoYXQgZ2l2ZXM/IQorCitTVzE6IFRpbWVvdXRzLCBJbnRlcnJ1cHQgYW5kIFJPTQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIHNlbGVjdCBhIGhhcmR3YXJlIGludGVycnVwdCBsZXZlbCBzZXQgb25lIChvbmx5IG9uZSEpIG9mIHRoZSBkaXAgc3dpdGNoZXMKK3VwIChvbikgU1cxLi4uKHN3aXRjaGVzIDEtNSkKK0lSUTMsIElSUTQsIElSUTUsIElSUTcsIElSUTIuIFRoZSBNYW51ZmFjdHVyZXIncyBkZWZhdWx0IGlzIElSUTIuCisKK1RoZSBzd2l0Y2hlcyBvbiBTVzEgbGFiZWxlZCBFWFQxIChzd2l0Y2ggNikgYW5kIEVYVDIgKHN3aXRjaCA3KQorYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSB0aW1lb3V0IHBhcmFtZXRlcnMuIFRoZXNlIHR3byBkaXAgc3dpdGNoZXMKK2FyZSBub3JtYWxseSBsZWZ0IG9mZiAoZG93bikuCisKKyAgIFRvIGVuYWJsZSB0aGUgOEsgQm9vdCBQUk9NIHBvc2l0aW9uIFNXMSBzd2l0Y2ggOCBvbiAoVVApIGxhYmVsZWQgUk9NLgorICAgVGhlIGRlZmF1bHQgaXMganVtcGVyIFJPTSBub3QgaW5zdGFsbGVkLgorCisKK1NldHRpbmcgdGhlIEkvTyBCYXNlIEFkZHJlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGxhc3QgdGhyZWUgc3dpdGNoZXMgaW4gc3dpdGNoIGdyb3VwIFNXMiBhcmUgdXNlZCB0byBzZWxlY3Qgb25lCitvZiBlaWdodCBwb3NzaWJsZSBJL08gQmFzZSBhZGRyZXNzZXMgdXNpbmcgdGhlIGZvbGxvd2luZyB0YWJsZQorCisKKyAgIFN3aXRjaCB8IEhleCBJL08KKyAgIDQgNSA2ICB8IEFkZHJlc3MKKyAgIC0tLS0tLS18LS0tLS0tLS0KKyAgIDAgMCAwICB8ICAyNjAKKyAgIDAgMCAxICB8ICAyOTAKKyAgIDAgMSAwICB8ICAyRTAgIChNYW51ZmFjdHVyZXIncyBkZWZhdWx0KQorICAgMCAxIDEgIHwgIDJGMAorICAgMSAwIDAgIHwgIDMwMAorICAgMSAwIDEgIHwgIDM1MAorICAgMSAxIDAgIHwgIDM4MAorICAgMSAxIDEgIHwgIDNFMAorCisKK1NldHRpbmcgdGhlIEJhc2UgTWVtb3J5IEFkZHJlc3MgKFJBTSAmIFJPTSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG1lbW9yeSBidWZmZXIgcmVxdWlyZXMgMksgb2YgYSAxNksgYmxvY2sgb2YgUkFNLiBUaGUgYmFzZSBvZiB0aGlzCisxNksgYmxvY2sgY2FuIGJlIGxvY2F0ZWQgaW4gYW55IG9mIGVpZ2h0IHBvc2l0aW9ucy4KK1N3aXRjaGVzIDEtMyBvZiBzd2l0Y2ggZ3JvdXAgU1cyIHNlbGVjdCB0aGUgQmFzZSBvZiB0aGUgMTZLIGJsb2NrLgorKDAgPSBET1dOLCAxID0gVVApCitJIGNvdWxkLCBob3dldmVyLCBvbmx5IHZlcmlmeSB0d28gc2V0dGluZ3MuLi4KKworICAgU3dpdGNofCBIZXggUkFNIHwgSGV4IFJPTQorICAgMSAyIDMgfCBBZGRyZXNzIHwgQWRkcmVzcworICAgLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLQorICAgMCAwIDAgfCAgRTAwMDAgIHwgIEUyMDAwCisgICAwIDAgMSB8ICBEMDAwMCAgfCAgRDIwMDAgIChNYW51ZmFjdHVyZXIncyBkZWZhdWx0KQorICAgMCAxIDAgfCAgPz8/Pz8gIHwgID8/Pz8/CisgICAwIDEgMSB8ICA/Pz8/PyAgfCAgPz8/Pz8gIAorICAgMSAwIDAgfCAgPz8/Pz8gIHwgID8/Pz8/CisgICAxIDAgMSB8ICA/Pz8/PyAgfCAgPz8/Pz8KKyAgIDEgMSAwIHwgID8/Pz8/ICB8ICA/Pz8/PworICAgMSAxIDEgfCAgPz8/Pz8gIHwgID8/Pz8/CisKKworU2V0dGluZyB0aGUgTm9kZSBJRAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZWlnaHQgc3dpdGNoZXMgaW4gZ3JvdXAgU1czIGFyZSB1c2VkIHRvIHNldCB0aGUgbm9kZSBJRC4KK0VhY2ggbm9kZSBhdHRhY2hlZCB0byB0aGUgbmV0d29yayBtdXN0IGhhdmUgYW4gdW5pcXVlIG5vZGUgSUQgd2hpY2gKK211c3QgYmUgZGlmZmVyZW50IGZyb20gMC4KK1N3aXRjaCAxIHNlcnZlcyBhcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IChMU0IpLgorc3dpdGNoZXMgaW4gdGhlIERPV04gcG9zaXRpb24gYXJlIE9GRiAoMCkgYW5kIGluIHRoZSBVUCBwb3NpdGlvbiBhcmUgT04gKDEpCisKK1RoZSBub2RlIElEIGlzIHRoZSBzdW0gb2YgdGhlIHZhbHVlcyBvZiBhbGwgc3dpdGNoZXMgc2V0IHRvICIxIiAgCitUaGVzZSB2YWx1ZXMgYXJlOgorICAgIFN3aXRjaCB8IFZhbHVlCisgICAgLS0tLS0tLXwtLS0tLS0tCisgICAgICAxICAgIHwgICAxCisgICAgICAyICAgIHwgICAyCisgICAgICAzICAgIHwgICA0CisgICAgICA0ICAgIHwgICA4CisgICAgICA1ICAgIHwgIDE2CisgICAgICA2ICAgIHwgIDMyCisgICAgICA3ICAgIHwgIDY0CisgICAgICA4ICAgIHwgMTI4CisKK1NvbWUgRXhhbXBsZXM6CisKKyAgICBTd2l0Y2gjICAgICB8ICAgSGV4ICAgfCBEZWNpbWFsIAorOCA3IDYgNSA0IDMgMiAxIHwgTm9kZSBJRCB8IE5vZGUgSUQKKy0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLQorMCAwIDAgMCAwIDAgMCAwIHwgICAgbm90IGFsbG93ZWQgIDwtLgorMCAwIDAgMCAwIDAgMCAxIHwgICAgMSAgICB8ICAgIDEgICAgfCAKKzAgMCAwIDAgMCAwIDEgMCB8ICAgIDIgICAgfCAgICAyICAgIHwKKzAgMCAwIDAgMCAwIDEgMSB8ICAgIDMgICAgfCAgICAzICAgIHwKKyAgICAuIC4gLiAgICAgICB8ICAgICAgICAgfCAgICAgICAgIHwKKzAgMSAwIDEgMCAxIDAgMSB8ICAgNTUgICAgfCAgIDg1ICAgIHwKKyAgICAuIC4gLiAgICAgICB8ICAgICAgICAgfCAgICAgICAgICsgRG9uJ3QgdXNlIDAgb3IgMjU1IQorMSAwIDEgMCAxIDAgMSAwIHwgICBBQSAgICB8ICAxNzAgICAgfAorICAgIC4gLiAuICAgICAgIHwgICAgICAgICB8ICAgICAgICAgfAorMSAxIDEgMSAxIDEgMCAxIHwgICBGRCAgICB8ICAyNTMgICAgfAorMSAxIDEgMSAxIDEgMSAwIHwgICBGRSAgICB8ICAyNTQgICAgfAorMSAxIDEgMSAxIDEgMSAxIHwgICBGRiAgICB8ICAyNTUgIDwtJworICAKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworKiogVGlhcmEgKioKKyhtb2RlbCB1bmtub3duKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAtIGZyb20gQ2hyaXN0b3BoIExhbWV0ZXIgPGNocmlzdG9waEBsYW1ldGVyLmNvbT4KKyAgCisKK0hlcmUgaXMgaW5mb3JtYXRpb24gYWJvdXQgbXkgY2FyZCBhcyBmYXIgYXMgSSBjb3VsZCBmaWd1cmUgaXQgb3V0OgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdGlhcmEKK1RpYXJhIExhbkNhcmQgb2YgVGlhcmEgQ29tcHV0ZXIgU3lzdGVtcy4KKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCishICAgICAgICAgICAhIFRyYW5zbWl0dGVyIFVuaXQgISAgICAgICAgICAgICAgICEKKyEgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgIC0tLS0tLS0KKyEgICAgICAgICAgTUVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29heCBDb25uZWN0b3IKKyEgIFJPTSAgICA3NjU0MzIxIDwtIEkvTyAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0KKyEgIDogIDogICArLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIQorISAgOiAgOiAgICEgOTBDNjZMSiEgICAgICAgICAgICAgICAgICAgICAgICAgKysrCishICA6ICA6ICAgISAgICAgICAgISAgICAgICAgICAgICAgICAgICAgICAgICAhRCAgU3dpdGNoIHRvIHNldAorISAgOiAgOiAgICEgICAgICAgICEgICAgICAgICAgICAgICAgICAgICAgICAgIUkgIHRoZSBOb2RlbnVtYmVyCishICA6ICA6ICAgKy0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAhUAorISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISsrCishICAgICAgICAgMjM0NTY3IDwtIElSUSAgICAgICAgICAgICAgICAgICAgICAhCisrLS0tLS0tLS0tLS0tISEhISEhISEhISEhISEhISEhISEhISEhLS0tLS0tLS0rCisgICAgICAgICAgICAgISEhISEhISEhISEhISEhISEhISEhISEhCisKKzAgPSBKdW1wZXIgSW5zdGFsbGVkCisxID0gT3BlbgorCitUb3AgSnVtcGVyIGxpbmUgQml0IDcgPSBST00gRW5hYmxlIDY1ND1NZW1vcnkgbG9jYXRpb24gMzIxPUkvTworCitTZXR0aW5ncyBmb3IgTWVtb3J5IExvY2F0aW9uIChUb3AgSnVtcGVyIExpbmUpCis0NTYgICAgIEFkZHJlc3Mgc2VsZWN0ZWQKKzAwMAlDMDAwMAorMDAxICAgICBDNDAwMAorMDEwICAgICBDQzAwMAorMDExICAgICBEMDAwMAorMTAwICAgICBENDAwMAorMTAxICAgICBEODAwMAorMTEwICAgICBEQzAwMCAgICAgCisxMTEgICAgIEUwMDAwCisKK1NldHRpbmdzIGZvciBJL08gQWRkcmVzcyAoVG9wIEp1bXBlciBMaW5lKQorMTIzICAgICBQb3J0CiswMDAJMjYwCiswMDEJMjkwCiswMTAJMkUwCiswMTEJMkYwCisxMDAJMzAwCisxMDEJMzUwCisxMTAJMzgwCisxMTEJM0UwCisKK1NldHRpbmdzIGZvciBJUlEgU2VsZWN0aW9uIChMb3dlciBKdW1wZXIgTGluZSkKKzIzNDU2NworMDExMTExIElSUSAyCisxMDExMTEgSVJRIDMKKzExMDExMSBJUlEgNAorMTExMDExIElSUSA1CisxMTExMTAgSVJRIDcKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCitPdGhlciBDYXJkcworLS0tLS0tLS0tLS0KKworSSBoYXZlIG5vIGluZm9ybWF0aW9uIG9uIG90aGVyIG1vZGVscyBvZiBBUkNuZXQgY2FyZHMgYXQgdGhlIG1vbWVudC4gIFBsZWFzZQorc2VuZCBhbnkgYW5kIGFsbCBpbmZvIHRvOgorCWFwZW53YXJyQHdvcmxkdmlzaW9ucy5jYQorCitUaGFua3MuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYXJjbmV0LnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9hcmNuZXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MGZjNDEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYXJjbmV0LnR4dApAQCAtMCwwICsxLDU1NSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTk9URTogIFNlZSBhbHNvIGFyY25ldC1oYXJkd2FyZS50eHQgaW4gdGhpcyBkaXJlY3RvcnkgZm9yIGp1bXBlci1zZXR0aW5nCithbmQgY2FibGluZyBpbmZvcm1hdGlvbiBpZiB5b3UncmUgbGlrZSBtYW55IG9mIHVzIGFuZCBkaWRuJ3QgaGFwcGVuIHRvIGdldCBhCittYW51YWwgd2l0aCB5b3VyIEFSQ25ldCBjYXJkLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTaW5jZSBubyBvbmUgc2VlbXMgdG8gbGlzdGVuIHRvIG1lIG90aGVyd2lzZSwgcGVyaGFwcyBhIHBvZW0gd2lsbCBnZXQgeW91cgorYXR0ZW50aW9uOgorCQlUaGlzIGRyaXZlcidzIGdldHRpbmcgZmF0IGFuZCBiZWVmeSwKKwkJQnV0IG15IGNhdCBpcyBzdGlsbCBuYW1lZCBGaWZpLgorCitIbW0sIEkgdGhpbmsgSSdtIGFsbG93ZWQgdG8gY2FsbCB0aGF0IGEgcG9lbSwgZXZlbiB0aG91Z2ggaXQncyBvbmx5IHR3bworbGluZXMuICBIZXksIEknbSBpbiBDb21wdXRlciBTY2llbmNlLCBub3QgRW5nbGlzaC4gIEdpdmUgbWUgYSBicmVhay4KKworVGhlIHBvaW50IGlzOiAgSSBSRUFMTFkgUkVBTExZIFJFQUxMWSBSRUFMTFkgUkVBTExZIHdhbnQgdG8gaGVhciBmcm9tIHlvdSBpZgoreW91IHRlc3QgdGhpcyBhbmQgZ2V0IGl0IHdvcmtpbmcuICBPciBpZiB5b3UgZG9uJ3QuICBPciBhbnl0aGluZy4KKworQVJDbmV0IDAuMzIgQUxQSEEgZmlyc3QgbWFkZSBpdCBpbnRvIHRoZSBMaW51eCBrZXJuZWwgMS4xLjgwIC0gdGhpcyB3YXMKK25pY2UsIGJ1dCBhZnRlciB0aGF0IGV2ZW4gRkVXRVIgcGVvcGxlIHN0YXJ0ZWQgd3JpdGluZyB0byBtZSBiZWNhdXNlIHRoZXkKK2RpZG4ndCBldmVuIGhhdmUgdG8gaW5zdGFsbCB0aGUgcGF0Y2guICA8c2lnaD4KKworQ29tZSBvbiwgYmUgYSBzcG9ydCEgIFNlbmQgbWUgYSBzdWNjZXNzIHJlcG9ydCEKKworKGhleSwgdGhhdCB3YXMgZXZlbiBiZXR0ZXIgdGhhbiBteSBvcmlnaW5hbCBwb2VtLi4uIHRoaXMgaXMgZ2V0dGluZyBiYWQhKQorCisKKy0tLS0tLS0tCitXQVJOSU5HOgorLS0tLS0tLS0KKworSWYgeW91IGRvbid0IGUtbWFpbCBtZSBhYm91dCB5b3VyIHN1Y2Nlc3MvZmFpbHVyZSBzb29uLCBJIG1heSBiZSBmb3JjZWQgdG8KK3N0YXJ0IFNJTkdJTkcuICBBbmQgd2UgZG9uJ3Qgd2FudCB0aGF0LCBkbyB3ZT8KKworKFlvdSBrbm93LCBpdCBtaWdodCBiZSBhcmd1ZWQgdGhhdCBJJ20gcHVzaGluZyB0aGlzIHBvaW50IGEgbGl0dGxlIHRvbyBtdWNoLiAKK0lmIHlvdSB0aGluayBzbywgd2h5IG5vdCBmbGFtZSBtZSBpbiBhIHF1aWNrIGxpdHRsZSBlLW1haWw/ICBQbGVhc2UgYWxzbworaW5jbHVkZSB0aGUgdHlwZSBvZiBjYXJkKHMpIHlvdSdyZSB1c2luZywgc29mdHdhcmUsIHNpemUgb2YgbmV0d29yaywgYW5kCit3aGV0aGVyIGl0J3Mgd29ya2luZyBvciBub3QuKQorCitNeSBlLW1haWwgYWRkcmVzcyBpczogYXBlbndhcnJAd29ybGR2aXNpb25zLmNhCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJCQorVGhlc2UgYXJlIHRoZSBBUkNuZXQgZHJpdmVycyBmb3IgTGludXguCisKKworVGhpcyBuZXcgcmVsZWFzZSAoMi45MSkgaGFzIGJlZW4gcHV0IHRvZ2V0aGVyIGJ5IERhdmlkIFdvb2Rob3VzZSAKKzxkd213MkBjYW0uYWMudWs+LCBpbiBhbiBhdHRlbXB0IHRvIHRpZHkgdXAgdGhlIGRyaXZlciBhZnRlciBhZGRpbmcgc3VwcG9ydCAKK2ZvciB5ZXQgYW5vdGhlciBjaGlwc2V0LiBOb3cgdGhlIGdlbmVyaWMgc3VwcG9ydCBoYXMgYmVlbiBzZXBhcmF0ZWQgZnJvbSB0aGUKK2luZGl2aWR1YWwgY2hpcHNldCBkcml2ZXJzLCBhbmQgdGhlIHNvdXJjZSBmaWxlcyBhcmVuJ3QgcXVpdGUgc28gcGFja2VkIHdpdGgKKyNpZmRlZnMhIEkndmUgY2hhbmdlZCB0aGlzIGZpbGUgYSBiaXQsIGJ1dCBrZXB0IGl0IGluIHRoZSBmaXJzdCBwZXJzb24gZnJvbQorQXZlcnksIGJlY2F1c2UgSSBkaWRuJ3Qgd2FudCB0byBjb21wbGV0ZWx5IHJld3JpdGUgaXQuCisKK1RoZSBwcmV2aW91cyByZWxlYXNlIHJlc3VsdGVkIGZyb20gbWFueSBtb250aHMgb2Ygb24tYW5kLW9mZiBlZmZvcnQgZnJvbSBtZQorKEF2ZXJ5IFBlbm5hcnVuKSwgbWFueSBidWcgcmVwb3J0cy9maXhlcyBhbmQgc3VnZ2VzdGlvbnMgZnJvbSBvdGhlcnMsIGFuZCBpbgorcGFydGljdWxhciBhIGxvdCBvZiBpbnB1dCBhbmQgY29kaW5nIGZyb20gVG9tYXN6IE1vdHlsZXdza2kuICBTdGFydGluZyB3aXRoCitBUkNuZXQgMi4xMCBBTFBIQSwgVG9tYXN6J3MgYWxsLW5ldy1hbmQtaW1wcm92ZWQgUkZDMTA1MSBzdXBwb3J0IGhhcyBiZWVuCitpbmNsdWRlZCBhbmQgc2VlbXMgdG8gYmUgd29ya2luZyBmaW5lIQorCisKK1doZXJlIGRvIEkgZGlzY3VzcyB0aGVzZSBkcml2ZXJzPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvbWFzeiBoYXMgYmVlbiBzbyBraW5kIGFzIHRvIHNldCB1cCBhIG5ldyBhbmQgaW1wcm92ZWQgbWFpbGluZyBsaXN0LiAKK1N1YnNjcmliZSBieSBzZW5kaW5nIGEgbWVzc2FnZSB3aXRoIHRoZSBCT0RZICJzdWJzY3JpYmUgbGludXgtYXJjbmV0IFlPVVIKK1JFQUwgTkFNRSIgdG8gbGlzdHNlcnZAdGljaHkuY2gudWouZWR1LnBsLiAgVGhlbiwgdG8gc3VibWl0IG1lc3NhZ2VzIHRvIHRoZQorbGlzdCwgbWFpbCB0byBsaW51eC1hcmNuZXRAdGljaHkuY2gudWouZWR1LnBsLgorCitUaGVyZSBhcmUgYXJjaGl2ZXMgb2YgdGhlIG1haWxpbmcgbGlzdCBhdDoKKwlodHRwOi8vdGljaHkuY2gudWouZWR1LnBsL2xpc3RzL2xpbnV4LWFyY25ldAorCitUaGUgcGVvcGxlIG9uIGxpbnV4LW5ldEB2Z2VyLmtlcm5lbC5vcmcgaGF2ZSBhbHNvIGJlZW4ga25vd24gdG8gYmUgdmVyeQoraGVscGZ1bCwgZXNwZWNpYWxseSB3aGVuIHdlJ3JlIHRhbGtpbmcgYWJvdXQgQUxQSEEgTGludXgga2VybmVscyB0aGF0IG1heSBvcgorbWF5IG5vdCB3b3JrIHJpZ2h0IGluIHRoZSBmaXJzdCBwbGFjZS4KKworCitPdGhlciBEcml2ZXJzIGFuZCBJbmZvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gdHJ5IG15IEFSQ05FVCBwYWdlIG9uIHRoZSBXb3JsZCBXaWRlIFdlYiBhdDoKKwlodHRwOi8vd3d3LndvcmxkdmlzaW9ucy5jYS9+YXBlbndhcnIvYXJjbmV0LworCitBbHNvLCBTTUMgKG9uZSBvZiB0aGUgY29tcGFuaWVzIHRoYXQgbWFrZXMgQVJDbmV0IGNhcmRzKSBoYXMgYSBXV1cgc2l0ZSB5b3UKK21pZ2h0IGJlIGludGVyZXN0ZWQgaW4sIHdoaWNoIGluY2x1ZGVzIHNldmVyYWwgZHJpdmVycyBmb3IgdmFyaW91cyBjYXJkcworaW5jbHVkaW5nIEFSQ25ldC4gIFRyeToKKwlodHRwOi8vd3d3LnNtYy5jb20vCisJCitQZXJmb3JtYW5jZSBUZWNobm9sb2dpZXMgbWFrZXMgdmFyaW91cyBuZXR3b3JrIHNvZnR3YXJlIHRoYXQgc3VwcG9ydHMKK0FSQ25ldDoKKwlodHRwOi8vd3d3LnBlcmZ0ZWNoLmNvbS8gb3IgZnRwIHRvIGZ0cC5wZXJmdGVjaC5jb20uCisJCitOb3ZlbGwgbWFrZXMgYSBuZXR3b3JraW5nIHN0YWNrIGZvciBET1Mgd2hpY2ggaW5jbHVkZXMgQVJDbmV0IGRyaXZlcnMuICBUcnkKK0ZUUGluZyB0byBmdHAubm92ZWxsLmNvbS4KKworWW91IGNhbiBnZXQgdGhlIENyeW53ciBwYWNrZXQgZHJpdmVyIGNvbGxlY3Rpb24gKGluY2x1ZGluZyBhcmNldGhlci5jb20sIHRoZQorb25lIHlvdSdsbCB3YW50IHRvIHVzZSB3aXRoIEFSQ25ldCBjYXJkcykgZnJvbQorb2FrLm9ha2xhbmQuZWR1Oi9zaW10ZWwvbXNkb3MvcGt0ZHJ2ci4gSXQgd29uJ3Qgd29yayBwZXJmZWN0bHkgb24gYSAzODYrCit3aXRob3V0IHBhdGNoZXMsIHRob3VnaCwgYW5kIGFsc28gZG9lc24ndCBsaWtlIHNldmVyYWwgY2FyZHMuICBGaXhlZAordmVyc2lvbnMgYXJlIGF2YWlsYWJsZSBvbiBteSBXV1cgcGFnZSwgb3IgdmlhIGUtbWFpbCBpZiB5b3UgZG9uJ3QgaGF2ZSBXV1cKK2FjY2Vzcy4gCisKKworSW5zdGFsbGluZyB0aGUgRHJpdmVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIHlvdSB3aWxsIG5lZWQgdG8gZG8gaW4gb3JkZXIgdG8gaW5zdGFsbCB0aGUgZHJpdmVyIGlzOgorCW1ha2UgY29uZmlnCisJCShiZSBzdXJlIHRvIGNob29zZSBBUkNuZXQgaW4gdGhlIG5ldHdvcmsgZGV2aWNlcyAKKwkJYW5kIGF0IGxlYXN0IG9uZSBjaGlwc2V0IGRyaXZlci4pCisJbWFrZSBjbGVhbgorCW1ha2UgekltYWdlCisJCitJZiB5b3Ugb2J0YWluZWQgdGhpcyBBUkNuZXQgcGFja2FnZSBhcyBhbiB1cGdyYWRlIHRvIHRoZSBBUkNuZXQgZHJpdmVyIGluCit5b3VyIGN1cnJlbnQga2VybmVsLCB5b3Ugd2lsbCBuZWVkIHRvIGZpcnN0IGNvcHkgYXJjbmV0LmMgb3ZlciB0aGUgb25lIGluCit0aGUgbGludXgvZHJpdmVycy9uZXQgZGlyZWN0b3J5LgorCitZb3Ugd2lsbCBrbm93IHRoZSBkcml2ZXIgaXMgaW5zdGFsbGVkIHByb3Blcmx5IGlmIHlvdSBnZXQgc29tZSBBUkNuZXQKK21lc3NhZ2VzIHdoZW4geW91IHJlYm9vdCBpbnRvIHRoZSBuZXcgTGludXgga2VybmVsLgorCitUaGVyZSBhcmUgZm91ciBjaGlwc2V0IG9wdGlvbnM6CisKKyAxLiBTdGFuZGFyZCBBUkNuZXQgQ09NOTB4eCBjaGlwc2V0LgorCitUaGlzIGlzIHRoZSBub3JtYWwgQVJDbmV0IGNhcmQsIHdoaWNoIHlvdSd2ZSBwcm9iYWJseSBnb3QuIFRoaXMgaXMgdGhlIG9ubHkKK2NoaXBzZXQgZHJpdmVyIHdoaWNoIHdpbGwgYXV0b3Byb2JlIGlmIG5vdCB0b2xkIHdoZXJlIHRoZSBjYXJkIGlzLgorSXQgZm9sbG93aW5nIG9wdGlvbnMgb24gdGhlIGNvbW1hbmQgbGluZToKKyBjb205MHh4PVs8aW8+Wyw8aXJxPlssPHNobWVtPl1dXVssPG5hbWU+XSB8IDxuYW1lPgorCitJZiB5b3UgbG9hZCB0aGUgY2hpcHNldCBzdXBwb3J0IGFzIGEgbW9kdWxlLCB0aGUgb3B0aW9ucyBhcmU6CisgaW89PGlvPiBpcnE9PGlycT4gc2htZW09PHNobWVtPiBkZXZpY2U9PG5hbWU+CisKK1RvIGRpc2FibGUgdGhlIGF1dG9wcm9iZSwganVzdCBzcGVjaWZ5ICJjb205MHh4PSIgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuCitUbyBzcGVjaWZ5IHRoZSBuYW1lIGFsb25lLCBidXQgYWxsb3cgYXV0b3Byb2JlLCBqdXN0IHB1dCAiY29tOTB4eD08bmFtZT4iCisKKyAyLiBBUkNuZXQgQ09NMjAwMjAgY2hpcHNldC4KKworVGhpcyBpcyB0aGUgbmV3IGNoaXBzZXQgZnJvbSBTTUMgd2l0aCBzdXBwb3J0IGZvciBwcm9taXNjdW91cyBtb2RlIChwYWNrZXQgCitzbmlmZmluZyksIGV4dHJhIGRpYWdub3N0aWMgaW5mb3JtYXRpb24sIGV0Yy4gVW5mb3J0dW5hdGVseSwgdGhlcmUgaXMgbm8KK3NlbnNpYmxlIG1ldGhvZCBvZiBhdXRvcHJvYmluZyBmb3IgdGhlc2UgY2FyZHMuIFlvdSBtdXN0IHNwZWNpZnkgdGhlIEkvTworYWRkcmVzcyBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4KK1RoZSBjb21tYW5kIGxpbmUgb3B0aW9ucyBhcmU6CisgY29tMjAwMjA9PGlvPlssPGlycT5bLDxub2RlX0lEPlssYmFja3BsYW5lWyxDS1BbLHRpbWVvdXRdXV1dXVssbmFtZV0KKworSWYgeW91IGxvYWQgdGhlIGNoaXBzZXQgc3VwcG9ydCBhcyBhIG1vZHVsZSwgdGhlIG9wdGlvbnMgYXJlOgorIGlvPTxpbz4gaXJxPTxpcnE+IG5vZGU9PG5vZGVfSUQ+IGJhY2twbGFuZT08YmFja3BsYW5lPiBjbG9jaz08Q0tQPgorIHRpbWVvdXQ9PHRpbWVvdXQ+IGRldmljZT08bmFtZT4KKworVGhlIENPTTIwMDIwIGNoaXBzZXQgYWxsb3dzIHlvdSB0byBzZXQgdGhlIG5vZGUgSUQgaW4gc29mdHdhcmUsIG92ZXJyaWRpbmcgdGhlCitkZWZhdWx0IHdoaWNoIGlzIHN0aWxsIHNldCBpbiBESVAgc3dpdGNoZXMgb24gdGhlIGNhcmQuIElmIHlvdSBkb24ndCBoYXZlIHRoZQorQ09NMjAwMjAgZGF0YSBzaGVldHMsIGFuZCB5b3UgZG9uJ3Qga25vdyB3aGF0IHRoZSBvdGhlciB0aHJlZSBvcHRpb25zIHJlZmVyCit0bywgdGhlbiB0aGV5IHdvbid0IGludGVyZXN0IHlvdSAtIGZvcmdldCB0aGVtLgorCisgMy4gQVJDbmV0IENPTTkweHggY2hpcHNldCBpbiBJTy1tYXBwZWQgbW9kZS4KKworVGhpcyB3aWxsIGFsc28gd29yayB3aXRoIHRoZSBub3JtYWwgQVJDbmV0IGNhcmRzLCBidXQgZG9lc24ndCB1c2UgdGhlIHNoYXJlZAorbWVtb3J5LiBJdCBwZXJmb3JtcyBsZXNzIHdlbGwgdGhhbiB0aGUgYWJvdmUgZHJpdmVyLCBidXQgaXMgcHJvdmlkZWQgaW4gY2FzZQoreW91IGhhdmUgYSBjYXJkIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydCBzaGFyZWQgbWVtb3J5LCBvciAoc3RyYW5nZWx5KSBpbiBjYXNlCit5b3UgaGF2ZSBzbyBtYW55IEFSQ25ldCBjYXJkcyBpbiB5b3VyIG1hY2hpbmUgdGhhdCB5b3UgcnVuIG91dCBvZiBzaG1lbSBzbG90cy4KK0lmIHlvdSBkb24ndCBnaXZlIHRoZSBJTyBhZGRyZXNzIG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLCB0aGVuIHRoZSBkcml2ZXIKK3dpbGwgbm90IGZpbmQgdGhlIGNhcmQuCitUaGUgY29tbWFuZCBsaW5lIG9wdGlvbnMgYXJlOgorIGNvbTkwaW89PGlvPlssPGlycT5dWyw8bmFtZT5dIAorCitJZiB5b3UgbG9hZCB0aGUgY2hpcHNldCBzdXBwb3J0IGFzIGEgbW9kdWxlLCB0aGUgb3B0aW9ucyBhcmU6CisgaW89PGlvPiBpcnE9PGlycT4gZGV2aWNlPTxuYW1lPgorCisgNC4gQVJDbmV0IFJJTSBJIGNhcmRzLgorCitUaGVzZSBhcmUgQ09NOTB4eCBjaGlwcyB3aGljaCBhcmUgX2NvbXBsZXRlbHlfIG1lbW9yeSBtYXBwZWQuIFRoZSBzdXBwb3J0IGZvcgordGhlc2UgaXMgbm90IHRlc3RlZC4gSWYgeW91IGhhdmUgb25lLCBwbGVhc2UgbWFpbCB0aGUgYXV0aG9yIHdpdGggYSBzdWNjZXNzIAorcmVwb3J0LiBBbGwgb3B0aW9ucyBtdXN0IGJlIHNwZWNpZmllZCwgZXhjZXB0IHRoZSBkZXZpY2UgbmFtZS4KK0NvbW1hbmQgbGluZSBvcHRpb25zOgorIGFyY3JpbWk9PHNobWVtPiw8aXJxPiw8bm9kZV9JRD5bLDxuYW1lPl0KKworSWYgeW91IGxvYWQgdGhlIGNoaXBzZXQgc3VwcG9ydCBhcyBhIG1vZHVsZSwgdGhlIG9wdGlvbnMgYXJlOgorIHNobWVtPTxzaG1lbT4gaXJxPTxpcnE+IG5vZGU9PG5vZGVfSUQ+IGRldmljZT08bmFtZT4KKworCitMb2FkYWJsZSBNb2R1bGUgU3VwcG9ydAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29uZmlndXJlIGFuZCByZWJ1aWxkIExpbnV4LiAgV2hlbiBhc2tlZCwgYW5zd2VyICdtJyB0byAiR2VuZXJpYyBBUkNuZXQgCitzdXBwb3J0IiBhbmQgdG8gc3VwcG9ydCBmb3IgeW91ciBBUkNuZXQgY2hpcHNldCBpZiB5b3Ugd2FudCB0byB1c2UgdGhlCitsb2FkYWJsZSBtb2R1bGUuIFlvdSBjYW4gYWxzbyBzYXkgJ3knIHRvICJHZW5lcmljIEFSQ25ldCBzdXBwb3J0IiBhbmQgJ20nIAordG8gdGhlIGNoaXBzZXQgc3VwcG9ydCBpZiB5b3Ugd2lzaC4KKworCW1ha2UgY29uZmlnCisJbWFrZSBjbGVhbgkKKwltYWtlIHpJbWFnZQorCW1ha2UgbW9kdWxlcworCQorSWYgeW91J3JlIHVzaW5nIGEgbG9hZGFibGUgbW9kdWxlLCB5b3UgbmVlZCB0byB1c2UgaW5zbW9kIHRvIGxvYWQgaXQsIGFuZAoreW91IGNhbiBzcGVjaWZ5IHZhcmlvdXMgY2hhcmFjdGVyaXN0aWNzIG9mIHlvdXIgY2FyZCBvbiB0aGUgY29tbWFuZAorbGluZS4gIChJbiByZWNlbnQgdmVyc2lvbnMgb2YgdGhlIGRyaXZlciwgYXV0b3Byb2JpbmcgaXMgbXVjaCBtb3JlIHJlbGlhYmxlCithbmQgd29ya3MgYXMgYSBtb2R1bGUsIHNvIG1vc3Qgb2YgdGhpcyBpcyBub3cgdW5uZWNlc3NhcnkuKQorCitGb3IgZXhhbXBsZToKKwljZCAvdXNyL3NyYy9saW51eC9tb2R1bGVzCisJaW5zbW9kIGFyY25ldC5vCisJaW5zbW9kIGNvbTkweHgubworCWluc21vZCBjb20yMDAyMC5vIGlvPTB4MmUwIGRldmljZT1ldGgxCisJCisKK1VzaW5nIHRoZSBEcml2ZXIKKy0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IGJ1aWxkIHlvdXIga2VybmVsIHdpdGggQVJDbmV0IENPTTkweHggc3VwcG9ydCBpbmNsdWRlZCwgaXQgc2hvdWxkIAorcHJvYmUgZm9yIHlvdXIgY2FyZCBhdXRvbWF0aWNhbGx5IHdoZW4geW91IGJvb3QuIElmIHlvdSB1c2UgYSBkaWZmZXJlbnQKK2NoaXBzZXQgZHJpdmVyIGNvbXBsaWVkIGludG8gdGhlIGtlcm5lbCwgeW91IG11c3QgZ2l2ZSB0aGUgbmVjZXNzYXJ5IG9wdGlvbnMKK29uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLCBhcyBkZXRhaWxlZCBhYm92ZS4KKworR28gcmVhZCB0aGUgTkVULTItSE9XVE8gYW5kIEVUSEVSTkVULUhPV1RPIGZvciBMaW51eDsgdGhleSBzaG91bGQgYmUKK2F2YWlsYWJsZSB3aGVyZSB5b3UgcGlja2VkIHVwIHRoaXMgZHJpdmVyLiAgVGhpbmsgb2YgeW91ciBBUkNuZXQgYXMgYQorc291cGVkLXVwIChvciBkb3duLCBhcyB0aGUgY2FzZSBtYXkgYmUpIEV0aGVybmV0IGNhcmQuCisKK0J5IHRoZSB3YXksIGJlIHN1cmUgdG8gY2hhbmdlIGFsbCByZWZlcmVuY2VzIGZyb20gImV0aDAiIHRvICJhcmMwIiBpbiB0aGUKK0hPV1RPcy4gIFJlbWVtYmVyIHRoYXQgQVJDbmV0IGlzbid0IGEgInRydWUiIEV0aGVybmV0LCBhbmQgdGhlIGRldmljZSBuYW1lCitpcyBESUZGRVJFTlQuCisKKworTXVsdGlwbGUgQ2FyZHMgaW4gT25lIENvbXB1dGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTGludXggaGFzIHByZXR0eSBnb29kIHN1cHBvcnQgZm9yIHRoaXMgbm93LCBidXQgc2luY2UgSSd2ZSBiZWVuIGJ1c3ksIHRoZQorQVJDbmV0IGRyaXZlciBoYXMgc29tZXdoYXQgc3VmZmVyZWQgaW4gdGhpcyByZXNwZWN0LiBDT005MHh4IHN1cHBvcnQsIGlmIAorY29tcGlsZWQgaW50byB0aGUga2VybmVsLCB3aWxsICh0cnkgdG8pIGF1dG9kZXRlY3QgYWxsIHRoZSBpbnN0YWxsZWQgY2FyZHMuIAorCitJZiB5b3UgaGF2ZSBvdGhlciBjYXJkcywgd2l0aCBzdXBwb3J0IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCwgdGhlbiB5b3UgY2FuIAoranVzdCByZXBlYXQgdGhlIG9wdGlvbnMgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUsIGUuZy46CitMSUxPOiBsaW51eCBjb20yMDAyMD0weDJlMCBjb20yMDAyMD0weDM4MCBjb205MGlvPTB4MjYwCisKK0lmIHlvdSBoYXZlIHRoZSBjaGlwc2V0IHN1cHBvcnQgYnVpbHQgYXMgYSBsb2FkYWJsZSBtb2R1bGUsIHRoZW4geW91IG5lZWQgdG8gCitkbyBzb21ldGhpbmcgbGlrZSB0aGlzOgorCWluc21vZCAtbyBhcmMwIGNvbTkweHgKKwlpbnNtb2QgLW8gYXJjMSBjb20yMDAyMCBpbz0weDJlMAorCWluc21vZCAtbyBhcmMyIGNvbTkweHgKK1RoZSBBUkNuZXQgZHJpdmVycyB3aWxsIG5vdyBzb3J0IG91dCB0aGVpciBuYW1lcyBhdXRvbWF0aWNhbGx5LgorCisKK0hvdyBkbyBJIGdldCBpdCB0byB3b3JrIHdpdGguLi4/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitORlM6IFNob3VsZCBiZSBmaW5lIGxpbnV4LT5saW51eCwganVzdCBwcmV0ZW5kIHlvdSdyZSB1c2luZyBFdGhlcm5ldCBjYXJkcy4gCisgICAgICAgIG9hay5vYWtsYW5kLmVkdTovc2ltdGVsL21zZG9zL25mcyBoYXMgc29tZSBuaWNlIERPUyBjbGllbnRzLiAgVGhlcmUKKyAgICAgICAgaXMgYWxzbyBhIERPUy1iYXNlZCBORlMgc2VydmVyIGNhbGxlZCBTT1NTLiAgSXQgZG9lc24ndCBtdWx0aXRhc2sKKyAgICAgICAgcXVpdGUgdGhlIHdheSBMaW51eCBkb2VzIChhY3R1YWxseSwgaXQgZG9lc24ndCBtdWx0aXRhc2sgQVQgQUxMKSBidXQKKyAgICAgICAgeW91IG5ldmVyIGtub3cgd2hhdCB5b3UgbWlnaHQgbmVlZC4KKyAgICAgICAgCisgICAgICAgIFdpdGggQW1pVENQIChhbmQgcG9zc2libHkgb3RoZXJzKSwgeW91IG1heSBuZWVkIHRvIHNldCB0aGUgZm9sbG93aW5nCisgICAgICAgIG9wdGlvbnMgaW4geW91ciBBbWlnYSBuZnN0YWI6ICBNRCAxMDI0IE1SIDEwMjQgTVcgMTAyNAorICAgICAgICAoVGhhbmtzIHRvIENocmlzdGlhbiBHb3R0c2NobGluZyA8ZmVya3N5QGluZGlnby50bmcub2NoZS5kZT4KKwlmb3IgdGhpcy4pCisJCisJUHJvYmFibHkgdGhlc2UgcmVmZXIgdG8gbWF4aW11bSBORlMgZGF0YS9yZWFkL3dyaXRlIGJsb2NrIHNpemVzLiAgSQorCWRvbid0IGtub3cgd2h5IHRoZSBkZWZhdWx0cyBvbiB0aGUgQW1pZ2EgZGlkbid0IHdvcms7IHdyaXRlIHRvIG1lIGlmCisJeW91IGtub3cgbW9yZS4KKworRE9TOiBJZiB5b3UncmUgdXNpbmcgdGhlIGZyZWV3YXJlIGFyY2V0aGVyLmNvbSwgeW91IG1pZ2h0IHdhbnQgdG8gaW5zdGFsbAorICAgICAgICB0aGUgZHJpdmVyIHBhdGNoIGZyb20gbXkgd2ViIHBhZ2UuICBJdCBoZWxwcyB3aXRoIFBDL1RDUCwgYW5kIGFsc28KKyAgICAgICAgY2FuIGdldCBhcmNldGhlciB0byBsb2FkIGlmIGl0IHRpbWVkIG91dCB0b28gcXVpY2tseSBkdXJpbmcKKyAgICAgICAgaW5pdGlhbGl6YXRpb24uICBJbiBmYWN0LCBpZiB5b3UgdXNlIGl0IG9uIGEgMzg2KyB5b3UgUkVBTExZIG5lZWQKKyAgICAgICAgdGhlIHBhdGNoLCByZWFsbHkuCisJCitXaW5kb3dzOiAgU2VlIERPUyA6KSAgVHJ1bXBldCBXaW5zb2NrIHdvcmtzIGZpbmUgd2l0aCBlaXRoZXIgdGhlIE5vdmVsbCBvcgorCUFyY2V0aGVyIGNsaWVudCwgYXNzdW1pbmcgeW91IHJlbWVtYmVyIHRvIGxvYWQgd2lucGt0IG9mIGNvdXJzZS4KKworTEFOIE1hbmFnZXIgYW5kIFdpbmRvd3MgZm9yIFdvcmtncm91cHM6IFRoZXNlIHByb2dyYW1zIHVzZSBwcm90b2NvbHMgdGhhdAorICAgICAgICBhcmUgaW5jb21wYXRpYmxlIHdpdGggdGhlIEludGVybmV0IHN0YW5kYXJkLiAgVGhleSB0cnkgdG8gcHJldGVuZAorICAgICAgICB0aGUgY2FyZHMgYXJlIEV0aGVybmV0LCBhbmQgY29uZnVzZSBldmVyeW9uZSBlbHNlIG9uIHRoZSBuZXR3b3JrLiAKKyAgICAgICAgCisgICAgICAgIEhvd2V2ZXIsIHYyLjAwIGFuZCBoaWdoZXIgb2YgdGhlIExpbnV4IEFSQ25ldCBkcml2ZXIgc3VwcG9ydHMgdGhpcworICAgICAgICBwcm90b2NvbCB2aWEgdGhlICdhcmMwZScgZGV2aWNlLiAgU2VlIHRoZSBzZWN0aW9uIG9uICJNdWx0aXByb3RvY29sCisgICAgICAgIFN1cHBvcnQiIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisJVXNpbmcgdGhlIGZyZWV3YXJlIFNhbWJhIHNlcnZlciBhbmQgY2xpZW50cyBmb3IgTGludXgsIHlvdSBjYW4gbm93CisJaW50ZXJmYWNlIHF1aXRlIG5pY2VseSB3aXRoIFRDUC9JUC1iYXNlZCBXZldnIG9yIExhbiBNYW5hZ2VyCisJbmV0d29ya3MuCisJCitXaW5kb3dzIDk1OiBUb29scyBhcmUgaW5jbHVkZWQgd2l0aCBXaW45NSB0aGF0IGxldCB5b3UgdXNlIGVpdGhlciB0aGUgTEFOTUFOCisJc3R5bGUgbmV0d29yayBkcml2ZXJzIChORElTKSBvciBOb3ZlbGwgZHJpdmVycyAoT0RJKSB0byBoYW5kbGUgeW91cgorCUFSQ25ldCBwYWNrZXRzLiAgSWYgeW91IHVzZSBPREksIHlvdSdsbCBuZWVkIHRvIHVzZSB0aGUgJ2FyYzAnCisJZGV2aWNlIHdpdGggTGludXguICBJZiB5b3UgdXNlIE5ESVMsIHRoZW4gdHJ5IHRoZSAnYXJjMGUnIGRldmljZS4gCisJU2VlIHRoZSAiTXVsdGlwcm90b2NvbCBTdXBwb3J0IiBzZWN0aW9uIGJlbG93IGlmIHlvdSBuZWVkIGFyYzBlLAorCXlvdSdyZSBjb21wbGV0ZWx5IGluc2FuZSwgYW5kL29yIHlvdSBuZWVkIHRvIGJ1aWxkIHNvbWUga2luZCBvZgorCWh5YnJpZCBuZXR3b3JrIHRoYXQgdXNlcyBib3RoIGVuY2Fwc3VsYXRpb24gdHlwZXMuCisKK09TLzI6IEkndmUgYmVlbiB0b2xkIGl0IHdvcmtzIHVuZGVyIFdhcnAgQ29ubmVjdCB3aXRoIGFuIEFSQ25ldCBkcml2ZXIgZnJvbQorCVNNQy4gIFlvdSBuZWVkIHRvIHVzZSB0aGUgJ2FyYzBlJyBpbnRlcmZhY2UgZm9yIHRoaXMuICBJZiB5b3UgZ2V0CisJdGhlIFNNQyBkcml2ZXIgdG8gd29yayB3aXRoIHRoZSBUQ1AvSVAgc3R1ZmYgaW5jbHVkZWQgaW4gdGhlCisJIm5vcm1hbCIgV2FycCBCb251cyBQYWNrLCBsZXQgbWUga25vdy4KKworCWZ0cC5taWNyb3NvZnQuY29tIGFsc28gaGFzIGEgZnJlZXdhcmUgIkxhbiBNYW5hZ2VyIGZvciBPUy8yIiBjbGllbnQKKwl3aGljaCBzaG91bGQgdXNlIHRoZSBzYW1lIHByb3RvY29sIGFzIFdmV2cgZG9lcy4gIEkgaGFkIG5vIGx1Y2sKKwlpbnN0YWxsaW5nIGl0IHVuZGVyIFdhcnAsIGhvd2V2ZXIuICBQbGVhc2UgbWFpbCBtZSB3aXRoIGFueSByZXN1bHRzLgorCitOZXRCU0QvQW1pVENQOiBUaGVzZSB1c2UgYW4gb2xkIHZlcnNpb24gb2YgdGhlIEludGVybmV0IHN0YW5kYXJkIEFSQ25ldAorCXByb3RvY29sIChSRkMxMDUxKSB3aGljaCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIExpbnV4IGRyaXZlciB2Mi4xMAorCUFMUEhBIGFuZCBhYm92ZSB1c2luZyB0aGUgYXJjMHMgZGV2aWNlLiAoU2VlICJNdWx0aXByb3RvY29sIEFSQ25ldCIKKwliZWxvdy4pICAqKiBOZXdlciB2ZXJzaW9ucyBvZiBOZXRCU0QgYXBwYXJlbnRseSBzdXBwb3J0IFJGQzEyMDEuCisKKworVXNpbmcgTXVsdGlwcm90b2NvbCBBUkNuZXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBBUkNuZXQgZHJpdmVyIHYyLjEwIEFMUEhBIHN1cHBvcnRzIHRocmVlIHByb3RvY29scywgZWFjaCBvbiBpdHMgb3duCisidmlydHVhbCBuZXR3b3JrIGRldmljZSI6CisKKwlhcmMwICAtIFJGQzEyMDEgcHJvdG9jb2wsIHRoZSBvZmZpY2lhbCBJbnRlcm5ldCBzdGFuZGFyZCB3aGljaCBqdXN0CisJCWhhcHBlbnMgdG8gYmUgMTAwJSBjb21wYXRpYmxlIHdpdGggTm92ZWxsJ3MgVFJYTkVUIGRyaXZlci4gCisJCVZlcnNpb24gMS4wMCBvZiB0aGUgQVJDbmV0IGRyaXZlciBzdXBwb3J0ZWQgX29ubHlfIHRoaXMKKwkJcHJvdG9jb2wuICBhcmMwIGlzIHRoZSBmYXN0ZXN0IG9mIHRoZSB0aHJlZSBwcm90b2NvbHMgKGZvcgorCQl3aGF0ZXZlciByZWFzb24pLCBhbmQgYWxsb3dzIGxhcmdlciBwYWNrZXRzIHRvIGJlIHVzZWQKKwkJYmVjYXVzZSBpdCBzdXBwb3J0cyBSRkMxMjAxICJwYWNrZXQgc3BsaXR0aW5nIiBvcGVyYXRpb25zLiAKKwkJVW5sZXNzIHlvdSBoYXZlIGEgc3BlY2lmaWMgbmVlZCB0byB1c2UgYSBkaWZmZXJlbnQgcHJvdG9jb2wsCisJCUkgc3Ryb25nbHkgc3VnZ2VzdCB0aGF0IHlvdSBzdGljayB3aXRoIHRoaXMgb25lLgorCQkKKwlhcmMwZSAtICJFdGhlcm5ldC1FbmNhcHN1bGF0aW9uIiB3aGljaCBzZW5kcyBwYWNrZXRzIG92ZXIgQVJDbmV0CisJCXRoYXQgYXJlIGFjdHVhbGx5IGEgbG90IGxpa2UgRXRoZXJuZXQgcGFja2V0cywgaW5jbHVkaW5nIHRoZQorCQk2LWJ5dGUgaGFyZHdhcmUgYWRkcmVzc2VzLiAgVGhpcyBwcm90b2NvbCBpcyBjb21wYXRpYmxlIHdpdGgKKwkJTWljcm9zb2Z0J3MgTkRJUyBBUkNuZXQgZHJpdmVyLCBsaWtlIHRoZSBvbmUgaW4gV2ZXZyBhbmQKKwkJTEFOTUFOLiAgQmVjYXVzZSB0aGUgTVRVIG9mIDQ5MyBpcyBhY3R1YWxseSBzbWFsbGVyIHRoYW4gdGhlCisJCW9uZSAicmVxdWlyZWQiIGJ5IFRDUC9JUCAoNTc2KSwgdGhlcmUgaXMgYSBjaGFuY2UgdGhhdCBzb21lCisJCW5ldHdvcmsgb3BlcmF0aW9ucyB3aWxsIG5vdCBmdW5jdGlvbiBwcm9wZXJseS4gIFRoZSBMaW51eAorCQlUQ1AvSVAgbGF5ZXIgY2FuIGNvbXBlbnNhdGUgaW4gbW9zdCBjYXNlcywgaG93ZXZlciwgYnkKKwkJYXV0b21hdGljYWxseSBmcmFnbWVudGluZyB0aGUgVENQL0lQIHBhY2tldHMgdG8gbWFrZSB0aGVtCisJCWZpdC4gIGFyYzBlIGFsc28gd29ya3Mgc2xpZ2h0bHkgbW9yZSBzbG93bHkgdGhhbiBhcmMwLCBmb3IKKwkJcmVhc29ucyB5ZXQgdG8gYmUgZGV0ZXJtaW5lZC4gIChQcm9iYWJseSBpdCdzIHRoZSBzbWFsbGVyCisJCU1UVSB0aGF0IGRvZXMgaXQuKQorCQkKKwlhcmMwcyAtIFRoZSAiW3NdaW1wbGUiIFJGQzEwNTEgcHJvdG9jb2wgaXMgdGhlICJwcmV2aW91cyIgSW50ZXJuZXQKKwkJc3RhbmRhcmQgdGhhdCBpcyBjb21wbGV0ZWx5IGluY29tcGF0aWJsZSB3aXRoIHRoZSBuZXcKKwkJc3RhbmRhcmQuICBTb21lIHNvZnR3YXJlIHRvZGF5LCBob3dldmVyLCBjb250aW51ZXMgdG8KKwkJc3VwcG9ydCB0aGUgb2xkIHN0YW5kYXJkIChhbmQgb25seSB0aGUgb2xkIHN0YW5kYXJkKQorCQlpbmNsdWRpbmcgTmV0QlNEIGFuZCBBbWlUQ1AuICBSRkMxMDUxIGFsc28gZG9lcyBub3Qgc3VwcG9ydAorCQlSRkMxMjAxJ3MgcGFja2V0IHNwbGl0dGluZywgYW5kIHRoZSBNVFUgb2YgNTA3IGlzIHN0aWxsCisJCXNtYWxsZXIgdGhhbiB0aGUgSW50ZXJuZXQgInJlcXVpcmVtZW50LCIgc28gaXQncyBxdWl0ZQorCQlwb3NzaWJsZSB0aGF0IHlvdSBtYXkgcnVuIGludG8gcHJvYmxlbXMuICBJdCdzIGFsc28gc2xvd2VyCisJCXRoYW4gUkZDMTIwMSBieSBhYm91dCAyNSUsIGZvciB0aGUgc2FtZSByZWFzb24gYXMgYXJjMGUuCisJCQorCQlUaGUgYXJjMHMgc3VwcG9ydCB3YXMgY29udHJpYnV0ZWQgYnkgVG9tYXN6IE1vdHlsZXdza2kKKwkJYW5kIG1vZGlmaWVkIHNvbWV3aGF0IGJ5IG1lLiAgQnVncyBhcmUgcHJvYmFibHkgbXkgZmF1bHQuCisKK1lvdSBjYW4gY2hvb3NlIG5vdCB0byBjb21waWxlIGFyYzBlIGFuZCBhcmMwcyBpbnRvIHRoZSBkcml2ZXIgaWYgeW91IHdhbnQgLQordGhpcyB3aWxsIHNhdmUgeW91IGEgYml0IG9mIG1lbW9yeSBhbmQgYXZvaWQgY29uZnVzaW9uIHdoZW4gZWcuIHRyeWluZyB0bwordXNlIHRoZSAiTkZTLXJvb3QiIHN0dWZmIGluIHJlY2VudCBMaW51eCBrZXJuZWxzLgorCitUaGUgYXJjMGUgYW5kIGFyYzBzIGRldmljZXMgYXJlIGNyZWF0ZWQgYXV0b21hdGljYWxseSB3aGVuIHlvdSBmaXJzdAoraWZjb25maWcgdGhlIGFyYzAgZGV2aWNlLiAgVG8gYWN0dWFsbHkgdXNlIHRoZW0sIHRob3VnaCwgeW91IG5lZWQgdG8gYWxzbworaWZjb25maWcgdGhlIG90aGVyIHZpcnR1YWwgZGV2aWNlcyB5b3UgbmVlZC4gIFRoZXJlIGFyZSBhIG51bWJlciBvZiB3YXlzIHlvdQorY2FuIHNldCB1cCB5b3VyIG5ldHdvcmsgdGhlbjoKKworCisxLiBTaW5nbGUgUHJvdG9jb2wuCisKKyAgIFRoaXMgaXMgdGhlIHNpbXBsZXN0IHdheSB0byBjb25maWd1cmUgeW91ciBuZXR3b3JrOiB1c2UganVzdCBvbmUgb2YgdGhlCisgICB0d28gYXZhaWxhYmxlIHByb3RvY29scy4gIEFzIG1lbnRpb25lZCBhYm92ZSwgaXQncyBhIGdvb2QgaWRlYSB0byB1c2UKKyAgIG9ubHkgYXJjMCB1bmxlc3MgeW91IGhhdmUgYSBnb29kIHJlYXNvbiAobGlrZSBzb21lIG90aGVyIHNvZnR3YXJlLCBpZS4KKyAgIFdmV2csIHRoYXQgb25seSB3b3JrcyB3aXRoIGFyYzBlKS4KKyAgIAorICAgSWYgeW91IG5lZWQgb25seSBhcmMwLCB0aGVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgc2hvdWxkIGdldCB5b3UgZ29pbmc6CisgICAJaWZjb25maWcgYXJjMCBNWS5JUC5BREQuUkVTUworICAgCXJvdXRlIGFkZCBNWS5JUC5BREQuUkVTUyBhcmMwCisgICAJcm91dGUgYWRkIC1uZXQgU1VCLk5FVC5BREQuUkVTUyBhcmMwCisgICAJW2FkZCBvdGhlciBsb2NhbCByb3V0ZXMgaGVyZV0KKyAgIAkKKyAgIElmIHlvdSBuZWVkIGFyYzBlIChhbmQgb25seSBhcmMwZSksIGl0J3MgYSBsaXR0bGUgZGlmZmVyZW50OgorICAgCWlmY29uZmlnIGFyYzAgTVkuSVAuQURELlJFU1MKKyAgIAlpZmNvbmZpZyBhcmMwZSBNWS5JUC5BREQuUkVTUworICAgCXJvdXRlIGFkZCBNWS5JUC5BREQuUkVTUyBhcmMwZQorICAgCXJvdXRlIGFkZCAtbmV0IFNVQi5ORVQuQURELlJFU1MgYXJjMGUKKyAgIAorICAgYXJjMHMgd29ya3MgbXVjaCB0aGUgc2FtZSB3YXkgYXMgYXJjMGUuCisKKworMi4gTW9yZSB0aGFuIG9uZSBwcm90b2NvbCBvbiB0aGUgc2FtZSB3aXJlLgorCisgICBOb3cgdGhpbmdzIHN0YXJ0IGdldHRpbmcgY29uZnVzaW5nLiAgVG8gZXZlbiB0cnkgaXQsIHlvdSBtYXkgbmVlZCB0byBiZQorICAgcGFydGx5IGNyYXp5LiAgSGVyZSdzIHdoYXQgKkkqIGRpZC4gOikgTm90ZSB0aGF0IEkgZG9uJ3QgaW5jbHVkZSBhcmMwcyBpbgorICAgbXkgaG9tZSBuZXR3b3JrOyBJIGRvbid0IGhhdmUgYW55IE5ldEJTRCBvciBBbWlUQ1AgY29tcHV0ZXJzLCBzbyBJIG9ubHkKKyAgIHVzZSBhcmMwcyBkdXJpbmcgbGltaXRlZCB0ZXN0aW5nLgorCisgICBJIGhhdmUgdGhyZWUgY29tcHV0ZXJzIG9uIG15IGhvbWUgbmV0d29yazsgdHdvIExpbnV4IGJveGVzICh3aGljaCBwcmVmZXIKKyAgIFJGQzEyMDEgcHJvdG9jb2wsIGZvciByZWFzb25zIGxpc3RlZCBhYm92ZSksIGFuZCBvbmUgWFQgdGhhdCBjYW4ndCBydW4KKyAgIExpbnV4IGJ1dCBydW5zIHRoZSBmcmVlIE1pY3Jvc29mdCBMQU5NQU4gQ2xpZW50IGluc3RlYWQuCisKKyAgIFdvcnNlLCBvbmUgb2YgdGhlIExpbnV4IGNvbXB1dGVycyAoZnJlZWRvbSkgYWxzbyBoYXMgYSBtb2RlbSBhbmQgYWN0cyBhcworICAgYSByb3V0ZXIgdG8gbXkgSW50ZXJuZXQgcHJvdmlkZXIuICBUaGUgb3RoZXIgTGludXggYm94IChpbnNpZ2h0KSBhbHNvIGhhcworICAgaXRzIG93biBJUCBhZGRyZXNzIGFuZCBuZWVkcyB0byB1c2UgZnJlZWRvbSBhcyBpdHMgZGVmYXVsdCBnYXRld2F5LiAgVGhlCisgICBYVCAocGF0aWVuY2UpLCBob3dldmVyLCBkb2VzIG5vdCBoYXZlIGl0cyBvd24gSW50ZXJuZXQgSVAgYWRkcmVzcyBhbmQgc28KKyAgIEkgYXNzaWduZWQgaXQgb25lIG9uIGEgInByaXZhdGUgc3VibmV0IiAoYXMgZGVmaW5lZCBieSBSRkMxNTk3KS4KKworICAgVG8gc3RhcnQgd2l0aCwgdGFrZSBhIHNpbXBsZSBuZXR3b3JrIHdpdGgganVzdCBpbnNpZ2h0IGFuZCBmcmVlZG9tLiAKKyAgIEluc2lnaHQgbmVlZHMgdG86CisgICAJLSB0YWxrIHRvIGZyZWVkb20gdmlhIFJGQzEyMDEgKGFyYzApIHByb3RvY29sLCBiZWNhdXNlIEkgbGlrZSBpdAorCSAgbW9yZSBhbmQgaXQncyBmYXN0ZXIuCisJLSB1c2UgZnJlZWRvbSBhcyBpdHMgSW50ZXJuZXQgZ2F0ZXdheS4KKwkKKyAgIFRoYXQncyBwcmV0dHkgZWFzeSB0byBkby4gIFNldCB1cCBpbnNpZ2h0IGxpa2UgdGhpczoKKyAgIAlpZmNvbmZpZyBhcmMwIGluc2lnaHQKKyAgIAlyb3V0ZSBhZGQgaW5zaWdodCBhcmMwCisgICAJcm91dGUgYWRkIGZyZWVkb20gYXJjMAkvKiBJIHdvdWxkIHVzZSB0aGUgc3VibmV0IGhlcmUgKGxpa2UgSSBzYWlkCisJCQkJCXRvIHRvIGluICJzaW5nbGUgcHJvdG9jb2wiIGFib3ZlKSwKKyAgIAkJCQkJYnV0IHRoZSByZXN0IG9mIHRoZSBzdWJuZXQKKyAgIAkJCQkJdW5mb3J0dW5hdGVseSBsaWVzIGFjcm9zcyB0aGUgUFBQCisgICAJCQkJCWxpbmsgb24gZnJlZWRvbSwgd2hpY2ggY29uZnVzZXMKKyAgIAkJCQkJdGhpbmdzLiAqLworICAgCXJvdXRlIGFkZCBkZWZhdWx0IGd3IGZyZWVkb20KKyAgIAkKKyAgIEFuZCBmcmVlZG9tIGdldHMgY29uZmlndXJlZCBsaWtlIHNvOgorICAgCWlmY29uZmlnIGFyYzAgZnJlZWRvbQorICAgCXJvdXRlIGFkZCBmcmVlZG9tIGFyYzAKKyAgIAlyb3V0ZSBhZGQgaW5zaWdodCBhcmMwCisgICAJLyogYW5kIGRlZmF1bHQgZ2F0ZXdheSBpcyBjb25maWd1cmVkIGJ5IHBwcGQgKi8KKyAgIAkKKyAgIEdyZWF0LCBub3cgaW5zaWdodCB0YWxrcyB0byBmcmVlZG9tIGRpcmVjdGx5IG9uIGFyYzAsIGFuZCBzZW5kcyBwYWNrZXRzCisgICB0byB0aGUgSW50ZXJuZXQgdGhyb3VnaCBmcmVlZG9tLiAgSWYgeW91IGRpZG4ndCBrbm93IGhvdyB0byBkbyB0aGUgYWJvdmUsCisgICB5b3Ugc2hvdWxkIHByb2JhYmx5IHN0b3AgcmVhZGluZyB0aGlzIHNlY3Rpb24gbm93IGJlY2F1c2UgaXQgb25seSBnZXRzCisgICB3b3JzZS4KKworICAgTm93LCBob3cgZG8gSSBhZGQgcGF0aWVuY2UgaW50byB0aGUgbmV0d29yaz8gIEl0IHdpbGwgYmUgdXNpbmcgTEFOTUFOCisgICBDbGllbnQsIHdoaWNoIG1lYW5zIEkgbmVlZCB0aGUgYXJjMGUgZGV2aWNlLiAgSXQgbmVlZHMgdG8gYmUgYWJsZSB0byB0YWxrCisgICB0byBib3RoIGluc2lnaHQgYW5kIGZyZWVkb20sIGFuZCBhbHNvIHVzZSBmcmVlZG9tIGFzIGEgZ2F0ZXdheSB0byB0aGUKKyAgIEludGVybmV0LiAgKFJlY2FsbCB0aGF0IHBhdGllbmNlIGhhcyBhICJwcml2YXRlIElQIGFkZHJlc3MiIHdoaWNoIHdvbid0CisgICB3b3JrIG9uIHRoZSBJbnRlcm5ldDsgdGhhdCdzIG9rYXksIEkgY29uZmlndXJlZCBMaW51eCBJUCBtYXNxdWVyYWRpbmcgb24KKyAgIGZyZWVkb20gZm9yIHRoaXMgc3VibmV0KS4KKyAgIAorICAgU28gcGF0aWVuY2UgKG5lY2Vzc2FyaWx5OyBJIGRvbid0IGhhdmUgYW5vdGhlciBJUCBudW1iZXIgZnJvbSBteQorICAgcHJvdmlkZXIpIGhhcyBhbiBJUCBhZGRyZXNzIG9uIGEgZGlmZmVyZW50IHN1Ym5ldCB0aGFuIGZyZWVkb20gYW5kCisgICBpbnNpZ2h0LCBidXQgbmVlZHMgdG8gdXNlIGZyZWVkb20gYXMgYW4gSW50ZXJuZXQgZ2F0ZXdheS4gIFdvcnNlLCBtb3N0CisgICBET1MgbmV0d29ya2luZyBwcm9ncmFtcywgaW5jbHVkaW5nIExBTk1BTiwgaGF2ZSBicmFpbmRlYWQgbmV0d29ya2luZworICAgc2NoZW1lcyB0aGF0IHJlbHkgY29tcGxldGVseSBvbiB0aGUgbmV0bWFzayBhbmQgYSAnZGVmYXVsdCBnYXRld2F5JyB0bworICAgZGV0ZXJtaW5lIGhvdyB0byByb3V0ZSBwYWNrZXRzLiAgVGhpcyBtZWFucyB0aGF0IHRvIGdldCB0byBmcmVlZG9tIG9yCisgICBpbnNpZ2h0LCBwYXRpZW5jZSBXSUxMIHNlbmQgdGhyb3VnaCBpdHMgZGVmYXVsdCBnYXRld2F5LCByZWdhcmRsZXNzIG9mCisgICB0aGUgZmFjdCB0aGF0IGJvdGggZnJlZWRvbSBhbmQgaW5zaWdodCAoY291cnRlc3kgb2YgdGhlIGFyYzBlIGRldmljZSkKKyAgIGNvdWxkIHVuZGVyc3RhbmQgYSBkaXJlY3QgdHJhbnNtaXNzaW9uLgorICAgCisgICBJIGNvbXBlbnNhdGUgYnkgZ2l2aW5nIGZyZWVkb20gYW4gZXh0cmEgSVAgYWRkcmVzcyAtIGFsaWFzZWQgJ2dhdGVrZWVwZXInCisgICAtIHRoYXQgaXMgb24gbXkgcHJpdmF0ZSBzdWJuZXQsIHRoZSBzYW1lIHN1Ym5ldCB0aGF0IHBhdGllbmNlIGlzIG9uLiAgSQorICAgdGhlbiBkZWZpbmUgZ2F0ZWtlZXBlciB0byBiZSB0aGUgZGVmYXVsdCBnYXRld2F5IGZvciBwYXRpZW5jZS4KKyAgIAorICAgVG8gY29uZmlndXJlIGZyZWVkb20gKGluIGFkZGl0aW9uIHRvIHRoZSBjb21tYW5kcyBhYm92ZSk6CisgICAJaWZjb25maWcgYXJjMGUgZ2F0ZWtlZXBlcgorICAgCXJvdXRlIGFkZCBnYXRla2VlcGVyIGFyYzBlCisgICAJcm91dGUgYWRkIHBhdGllbmNlIGFyYzBlCisgICAKKyAgIFRoaXMgd2F5LCBmcmVlZG9tIHdpbGwgc2VuZCBhbGwgcGFja2V0cyBmb3IgcGF0aWVuY2UgdGhyb3VnaCBhcmMwZSwKKyAgIGdpdmluZyBpdHMgSVAgYWRkcmVzcyBhcyBnYXRla2VlcGVyIChvbiB0aGUgcHJpdmF0ZSBzdWJuZXQpLiAgV2hlbiBpdAorICAgdGFsa3MgdG8gaW5zaWdodCBvciB0aGUgSW50ZXJuZXQsIGl0IHdpbGwgdXNlIGl0cyAiZnJlZWRvbSIgSW50ZXJuZXQgSVAKKyAgIGFkZHJlc3MuCisgICAKKyAgIFlvdSB3aWxsIG5vdGljZSB0aGF0IHdlIGhhdmVuJ3QgY29uZmlndXJlZCB0aGUgYXJjMGUgZGV2aWNlIG9uIGluc2lnaHQuIAorICAgVGhpcyB3b3VsZCB3b3JrLCBidXQgaXMgbm90IHJlYWxseSBuZWNlc3NhcnksIGFuZCB3b3VsZCByZXF1aXJlIG1lIHRvCisgICBhc3NpZ24gaW5zaWdodCBhbm90aGVyIHNwZWNpYWwgSVAgbnVtYmVyIGZyb20gbXkgcHJpdmF0ZSBzdWJuZXQuICBTaW5jZQorICAgYm90aCBpbnNpZ2h0IGFuZCBwYXRpZW5jZSBhcmUgdXNpbmcgZnJlZWRvbSBhcyB0aGVpciBkZWZhdWx0IGdhdGV3YXksIHRoZQorICAgdHdvIGNhbiBhbHJlYWR5IHRhbGsgdG8gZWFjaCBvdGhlci4KKyAgIAorICAgSXQncyBxdWl0ZSBmb3J0dW5hdGUgdGhhdCBJIHNldCB0aGluZ3MgdXAgbGlrZSB0aGlzIHRoZSBmaXJzdCB0aW1lIChjb3VnaAorICAgY291Z2gpIGJlY2F1c2UgaXQncyByZWFsbHkgaGFuZHkgd2hlbiBJIGJvb3QgaW5zaWdodCBpbnRvIERPUy4gIFRoZXJlLCBpdAorICAgcnVucyB0aGUgTm92ZWxsIE9ESSBwcm90b2NvbCBzdGFjaywgd2hpY2ggb25seSB3b3JrcyB3aXRoIFJGQzEyMDEgQVJDbmV0LiAKKyAgIEluIHRoaXMgbW9kZSBpdCB3b3VsZCBiZSBpbXBvc3NpYmxlIGZvciBpbnNpZ2h0IHRvIGNvbW11bmljYXRlIGRpcmVjdGx5CisgICB3aXRoIHBhdGllbmNlLCBzaW5jZSB0aGUgTm92ZWxsIHN0YWNrIGlzIGluY29tcGF0aWJsZSB3aXRoIE1pY3Jvc29mdCdzCisgICBFdGhlcm5ldC1FbmNhcC4gIFdpdGhvdXQgY2hhbmdpbmcgYW55IHNldHRpbmdzIG9uIGZyZWVkb20gb3IgcGF0aWVuY2UsIEkKKyAgIHNpbXBseSBzZXQgZnJlZWRvbSBhcyB0aGUgZGVmYXVsdCBnYXRld2F5IGZvciBpbnNpZ2h0IChub3cgaW4gRE9TLAorICAgcmVtZW1iZXIpIGFuZCBhbGwgdGhlIGZvcndhcmRpbmcgaGFwcGVucyAiYXV0b21hZ2ljYWxseSIgYmV0d2VlbiB0aGUgdHdvCisgICBob3N0cyB0aGF0IHdvdWxkIG5vcm1hbGx5IG5vdCBiZSBhYmxlIHRvIGNvbW11bmljYXRlIGF0IGFsbC4KKyAgIAorICAgRm9yIHRob3NlIHdobyBsaWtlIGRpYWdyYW1zLCBJIGhhdmUgY3JlYXRlZCB0d28gInZpcnR1YWwgc3VibmV0cyIgb24gdGhlCisgICBzYW1lIHBoeXNpY2FsIEFSQ25ldCB3aXJlLiAgWW91IGNhbiBwaWN0dXJlIGl0IGxpa2UgdGhpczoKKyAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgIFtSRkMxMjAxIE5FVFdPUktdICAgICAgICAgICAgICAgICAgIFtFVEhFUi1FTkNBUCBORVRXT1JLXQorICAgICAgKHJlZ2lzdGVyZWQgSW50ZXJuZXQgc3VibmV0KSAgICAgICAgICAgKFJGQzE1OTcgcHJpdmF0ZSBzdWJuZXQpCisgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSVAgTWFzcXVlcmFkZSkKKyAgICAgICAgICAvLS0tLS0tLS0tLS0tLS0tXCAgICAgICAgICogICAgICAgICAgICAvLS0tLS0tLS0tLS0tLS0tXAorICAgICAgICAgIHwgICAgICAgICAgICAgICB8ICAgICAgICAgKiAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8CisgICAgICAgICAgfCAgICAgICAgICAgICAgICstRnJlZWRvbS0qLUdhdGVrZWVwZXItKyAgICAgICAgICAgICAgIHwKKyAgICAgICAgICB8ICAgICAgICAgICAgICAgfCAgICB8ICAgICogICAgICAgICAgICB8ICAgICAgICAgICAgICAgfAorICAgICAgICAgIFwtLS0tLS0tKy0tLS0tLS0vICAgIHwgICAgKiAgICAgICAgICAgIFwtLS0tLS0tKy0tLS0tLS0vCisgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICBJbnNpZ2h0ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBQYXRpZW5jZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKEludGVybmV0KQorCisKKworSXQgd29ya3M6IHdoYXQgbm93PworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZW5kIG1haWwgZGVzY3JpYmluZyB5b3VyIHNldHVwLCBwcmVmZXJhYmx5IGluY2x1ZGluZyBkcml2ZXIgdmVyc2lvbiwga2VybmVsCit2ZXJzaW9uLCBBUkNuZXQgY2FyZCBtb2RlbCwgQ1BVIHR5cGUsIG51bWJlciBvZiBzeXN0ZW1zIG9uIHlvdXIgbmV0d29yaywgYW5kCitsaXN0IG9mIHNvZnR3YXJlIGluIHVzZSB0byBtZSBhdCB0aGUgZm9sbG93aW5nIGFkZHJlc3M6CisJYXBlbndhcnJAd29ybGR2aXNpb25zLmNhCisKK0kgZG8gc2VuZCAoc29tZXRpbWVzIGF1dG9tYXRlZCkgcmVwbGllcyB0byBhbGwgbWVzc2FnZXMgSSByZWNlaXZlLiAgTXkgZW1haWwKK2NhbiBiZSB3ZWlyZCAoYW5kIGFsc28gdXN1YWxseSBnZXRzIGZvcndhcmRlZCBhbGwgb3ZlciB0aGUgcGxhY2UgYWxvbmcgdGhlCit3YXkgdG8gbWUpLCBzbyBpZiB5b3UgZG9uJ3QgZ2V0IGEgcmVwbHkgd2l0aGluIGEgcmVhc29uYWJsZSB0aW1lLCBwbGVhc2UKK3Jlc2VuZC4KKworCitJdCBkb2Vzbid0IHdvcms6IHdoYXQgbm93PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRG8gdGhlIHNhbWUgYXMgYWJvdmUsIGJ1dCBhbHNvIGluY2x1ZGUgdGhlIG91dHB1dCBvZiB0aGUgaWZjb25maWcgYW5kIHJvdXRlCitjb21tYW5kcywgYXMgd2VsbCBhcyBhbnkgcGVydGluZW50IGxvZyBlbnRyaWVzIChpZS4gYW55dGhpbmcgdGhhdCBzdGFydHMKK3dpdGggImFyY25ldDoiIGFuZCBoYXMgc2hvd24gdXAgc2luY2UgdGhlIGxhc3QgcmVib290KSBpbiB5b3VyIG1haWwuCisKK0lmIHlvdSB3YW50IHRvIHRyeSBmaXhpbmcgaXQgeW91cnNlbGYgKEkgc3Ryb25nbHkgcmVjb21tZW5kIHRoYXQgeW91IG1haWwgbWUKK2Fib3V0IHRoZSBwcm9ibGVtIGZpcnN0LCBzaW5jZSBpdCBtaWdodCBhbHJlYWR5IGhhdmUgYmVlbiBzb2x2ZWQpIHlvdSBtYXkKK3dhbnQgdG8gdHJ5IHNvbWUgb2YgdGhlIGRlYnVnIGxldmVscyBhdmFpbGFibGUuICBGb3IgaGVhdnkgdGVzdGluZyBvbgorRF9EVVJJTkcgb3IgbW9yZSwgaXQgd291bGQgYmUgYSBSRUFMTFkgZ29vZCBpZGVhIHRvIGtpbGwgeW91ciBrbG9nZCBkYWVtb24KK2ZpcnN0ISAgRF9EVVJJTkcgZGlzcGxheXMgNC01IGxpbmVzIGZvciBlYWNoIHBhY2tldCBzZW50IG9yIHJlY2VpdmVkLiAgRF9UWCwKK0RfUlgsIGFuZCBEX1NLQiBhY3R1YWxseSBESVNQTEFZIGVhY2ggcGFja2V0IGFzIGl0IGlzIHNlbnQgb3IgcmVjZWl2ZWQsCit3aGljaCBpcyBvYnZpb3VzbHkgcXVpdGUgYmlnLgorCitTdGFydGluZyB3aXRoIHYyLjQwIEFMUEhBLCB0aGUgYXV0b3Byb2JlIHJvdXRpbmVzIGhhdmUgY2hhbmdlZAorc2lnbmlmaWNhbnRseS4gIEluIHBhcnRpY3VsYXIsIHRoZXkgd29uJ3QgdGVsbCB5b3Ugd2h5IHRoZSBjYXJkIHdhcyBub3QKK2ZvdW5kIHVubGVzcyB5b3UgdHVybiBvbiB0aGUgRF9JTklUX1JFQVNPTlMgZGVidWdnaW5nIGZsYWcuCisKK09uY2UgdGhlIGRyaXZlciBpcyBydW5uaW5nLCB5b3UgY2FuIHJ1biB0aGUgYXJjZHVtcCBzaGVsbCBzY3JpcHQgKGF2YWlsYWJsZQorZnJvbSBtZSBvciBpbiB0aGUgZnVsbCBBUkNuZXQgcGFja2FnZSwgaWYgeW91IGhhdmUgaXQpIGFzIHJvb3QgdG8gbGlzdCB0aGUKK2NvbnRlbnRzIG9mIHRoZSBhcmNuZXQgYnVmZmVycyBhdCBhbnkgdGltZS4gIFRvIG1ha2UgYW55IHNlbnNlIGF0IGFsbCBvdXQgb2YKK3RoaXMsIHlvdSBzaG91bGQgZ3JhYiB0aGUgcGVydGluZW50IFJGQ3MuIChzb21lIGFyZSBsaXN0ZWQgbmVhciB0aGUgdG9wIG9mCithcmNuZXQuYykuICBhcmNkdW1wIGFzc3VtZXMgeW91ciBjYXJkIGlzIGF0IDB4RDAwMDAuICBJZiBpdCBpc24ndCwgZWRpdCB0aGUKK3NjcmlwdC4KKworQnVmZmVycyAwIGFuZCAxIGFyZSB1c2VkIGZvciByZWNlaXZpbmcsIGFuZCBCdWZmZXJzIDIgYW5kIDMgYXJlIGZvciBzZW5kaW5nLiAKK1BpbmctcG9uZyBidWZmZXJzIGFyZSBpbXBsZW1lbnRlZCBib3RoIHdheXMuCisKK0lmIHlvdXIgZGVidWcgbGV2ZWwgaW5jbHVkZXMgRF9EVVJJTkcgYW5kIHlvdSBkaWQgTk9UIGRlZmluZSBTTE9XX1hNSVRfQ09QWSwKK3RoZSBidWZmZXJzIGFyZSBjbGVhcmVkIHRvIGEgY29uc3RhbnQgdmFsdWUgb2YgMHg0MiBldmVyeSB0aW1lIHRoZSBjYXJkIGlzCityZXNldCAod2hpY2ggc2hvdWxkIG9ubHkgaGFwcGVuIHdoZW4geW91IGRvIGFuIGlmY29uZmlnIHVwLCBvciB3aGVuIExpbnV4CitkZWNpZGVzIHRoYXQgdGhlIGRyaXZlciBpcyBicm9rZW4pLiAgRHVyaW5nIGEgdHJhbnNtaXQsIHVudXNlZCBwYXJ0cyBvZiB0aGUKK2J1ZmZlciB3aWxsIGJlIGNsZWFyZWQgdG8gMHg0MiBhcyB3ZWxsLiAgVGhpcyBpcyB0byBtYWtlIGl0IGVhc2llciB0byBmaWd1cmUKK291dCB3aGljaCBieXRlcyBhcmUgYmVpbmcgdXNlZCBieSBhIHBhY2tldC4KKworWW91IGNhbiBjaGFuZ2UgdGhlIGRlYnVnIGxldmVsIHdpdGhvdXQgcmVjb21waWxpbmcgdGhlIGtlcm5lbCBieSB0eXBpbmc6CisJaWZjb25maWcgYXJjMCBkb3duIG1ldHJpYyAxeHh4CisJL2V0Yy9yYy5kL3JjLmluZXQxCit3aGVyZSAieHh4IiBpcyB0aGUgZGVidWcgbGV2ZWwgeW91IHdhbnQuICBGb3IgZXhhbXBsZSwgIm1ldHJpYyAxMDE1IiB3b3VsZCBwdXQKK3lvdSBhdCBkZWJ1ZyBsZXZlbCAxNS4gIERlYnVnIGxldmVsIDcgaXMgY3VycmVudGx5IHRoZSBkZWZhdWx0LgorCitOb3RlIHRoYXQgdGhlIGRlYnVnIGxldmVsIGlzIChzdGFydGluZyB3aXRoIHYxLjkwIEFMUEhBKSBhIGJpbmFyeQorY29tYmluYXRpb24gb2YgZGlmZmVyZW50IGRlYnVnIGZsYWdzOyBzbyBkZWJ1ZyBsZXZlbCA3IGlzIHJlYWxseSAxKzIrNCBvcgorRF9OT1JNQUwrRF9FWFRSQStEX0lOSVQuICBUbyBpbmNsdWRlIERfRFVSSU5HLCB5b3Ugd291bGQgYWRkIDE2IHRvIHRoaXMsCityZXN1bHRpbmcgaW4gZGVidWcgbGV2ZWwgMjMuCisKK0lmIHlvdSBkb24ndCB1bmRlcnN0YW5kIHRoYXQsIHlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIGtub3cgYW55d2F5LiAKK0UtbWFpbCBtZSBhYm91dCB5b3VyIHByb2JsZW0uCisKKworSSB3YW50IHRvIHNlbmQgbW9uZXk6IHdoYXQgbm93PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHbyB0YWtlIGEgbmFwIG9yIHNvbWV0aGluZy4gIFlvdSdsbCBmZWVsIGJldHRlciBpbiB0aGUgbW9ybmluZy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9hdG0udHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2F0bS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI5MjFjZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9hdG0udHh0CkBAIC0wLDAgKzEsOCBAQAorSW4gb3JkZXIgdG8gdXNlIGFueXRoaW5nIGJ1dCB0aGUgbW9zdCBwcmltaXRpdmUgZnVuY3Rpb25zIG9mIEFUTSwKK3NldmVyYWwgdXNlci1tb2RlIHByb2dyYW1zIGFyZSByZXF1aXJlZCB0byBhc3Npc3QgdGhlIGtlcm5lbC4gVGhlc2UKK3Byb2dyYW1zIGFuZCByZWxhdGVkIG1hdGVyaWFsIGNhbiBiZSBmb3VuZCB2aWEgdGhlIEFUTSBvbiBMaW51eCBXZWIKK3BhZ2UgYXQgaHR0cDovL2xpbnV4LWF0bS5zb3VyY2Vmb3JnZS5uZXQvCisKK0lmIHlvdSBlbmNvdW50ZXIgcHJvYmxlbXMgd2l0aCBBVE0sIHBsZWFzZSByZXBvcnQgdGhlbSBvbiB0aGUgQVRNCitvbiBMaW51eCBtYWlsaW5nIGxpc3QuIFN1YnNjcmlwdGlvbiBpbmZvcm1hdGlvbiwgYXJjaGl2ZXMsIGV0Yy4sCitjYW4gYmUgZm91bmQgb24gaHR0cDovL2xpbnV4LWF0bS5zb3VyY2Vmb3JnZS5uZXQvCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYXgyNS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYXgyNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdjMjViMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9heDI1LnR4dApAQCAtMCwwICsxLDE2IEBACitUbyB1c2UgdGhlIGFtYXRldXIgcmFkaW8gcHJvdG9jb2xzIHdpdGhpbiBMaW51eCB5b3Ugd2lsbCBuZWVkIHRvIGdldCBhCitzdWl0YWJsZSBjb3B5IG9mIHRoZSBBWC4yNSBVdGlsaXRpZXMuIE1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UKK2FuZCBhc3NvY2lhdGVkIHByb2dyYW1zIGNhbiBiZSBmb3VuZCBvbiBodHRwOi8vem9uZS5wc3B0LmZpL35qc24vLgorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgQVguMjUsIE5FVC9ST00gYW5kIFJPU0UgcHJvdG9jb2wgc3RhY2tzLCBzZWUKK3RoZSBBWDI1LUhPV1RPIHdyaXR0ZW4gYnkgVGVycnkgRGF3c29uIDx0ZXJyeUBwZXJmLm5vLml0Zy50ZWxzdHJhLmNvbS5hdT4KK3dobyBpcyBhbHNvIHRoZSBBWC4yNSBVdGlsaXRpZXMgbWFpbnRhaW5lci4KKworVGhlcmUgaXMgYW4gYWN0aXZlIG1haWxpbmcgbGlzdCBmb3IgZGlzY3Vzc2luZyBMaW51eCBhbWF0ZXVyIHJhZGlvIG1hdHRlcnMKK2NhbGxlZCBsaW51eC1oYW1zLiBUbyBzdWJzY3JpYmUgdG8gaXQsIHNlbmQgYSBtZXNzYWdlIHRvCittYWpvcmRvbW9Admdlci5rZXJuZWwub3JnIHdpdGggdGhlIHdvcmRzICJzdWJzY3JpYmUgbGludXgtaGFtcyIgaW4gdGhlIGJvZHkKK29mIHRoZSBtZXNzYWdlLCB0aGUgc3ViamVjdCBmaWVsZCBpcyBpZ25vcmVkLgorCitKb25hdGhhbiBHNEtMWAorCitnNGtseEBnNGtseC5kZW1vbi5jby51awpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JheWNvbS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYmF5Y29tLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTY4ODQ5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JheWNvbS50eHQKQEAgLTAsMCArMSwxNTggQEAKKwkJICAgIExJTlVYIERSSVZFUlMgRk9SIEJBWUNPTSBNT0RFTVMKKworICAgICAgIFRob21hcyBNLiBTYWlsZXIsIEhCOUpOWC9BRTRXQSwgPHNhaWxlckBpZmUuZWUuZXRoei5jaD4KKworISFORVchISAoMDQvOTgpIFRoZSBkcml2ZXJzIGZvciB0aGUgYmF5Y29tIG1vZGVtcyBoYXZlIGJlZW4gc3BsaXQgaW50bworc2VwYXJhdGUgZHJpdmVycyBhcyB0aGV5IGRpZCBub3Qgc2hhcmUgYW55IGNvZGUsIGFuZCB0aGUgZHJpdmVyCithbmQgZGV2aWNlIG5hbWVzIGhhdmUgY2hhbmdlZC4KKworVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIExpbnV4IEtlcm5lbCBEcml2ZXJzIGZvciBzaW1wbGUgQmF5Y29tIHN0eWxlCithbWF0ZXVyIHJhZGlvIG1vZGVtcy4gCisKK1RoZSBmb2xsb3dpbmcgZHJpdmVycyBhcmUgYXZhaWxhYmxlOgorCitiYXljb21fc2VyX2ZkeDoKKyAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIFNFUjEyIG1vZGVtcyBlaXRoZXIgZnVsbCBvciBoYWxmIGR1cGxleC4KKyAgSXRzIGJhdWQgcmF0ZSBtYXkgYmUgY2hhbmdlZCB2aWEgdGhlIGBiYXVkJyBtb2R1bGUgcGFyYW1ldGVyLAorICB0aGVyZWZvcmUgaXQgc3VwcG9ydHMganVzdCBhYm91dCBldmVyeSBiaXQgYmFuZyBtb2RlbSBvbiBhCisgIHNlcmlhbCBwb3J0LiBJdHMgZGV2aWNlcyBhcmUgY2FsbGVkIGJjc2YwIHRocm91Z2ggYmNzZjMuCisgIFRoaXMgaXMgdGhlIHJlY29tbWVuZGVkIGRyaXZlciBmb3IgU0VSMTIgdHlwZSBtb2RlbXMsCisgIGhvd2V2ZXIgaWYgeW91IGhhdmUgYSBicm9rZW4gVUFSVCBjbG9uZSB0aGF0IGRvZXMgbm90IGhhdmUgd29ya2luZworICBkZWx0YSBzdGF0dXMgYml0cywgeW91IG1heSB0cnkgYmF5Y29tX3Nlcl9oZHguIAorCitiYXljb21fc2VyX2hkeDogCisgIFRoaXMgaXMgYW4gYWx0ZXJuYXRpdmUgZHJpdmVyIGZvciBTRVIxMiB0eXBlIG1vZGVtcy4KKyAgSXQgb25seSBzdXBwb3J0cyBoYWxmIGR1cGxleCwgYW5kIG9ubHkgMTIwMCBiYXVkLiBJdHMgZGV2aWNlcworICBhcmUgY2FsbGVkIGJjc2gwIHRocm91Z2ggYmNzaDMuIFVzZSB0aGlzIGRyaXZlciBvbmx5IGlmIGJheWNvbV9zZXJfZmR4CisgIGRvZXMgbm90IHdvcmsgd2l0aCB5b3VyIFVBUlQuCisKK2JheWNvbV9wYXI6CisgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBwYXI5NiBhbmQgcGljcGFyIG1vZGVtcy4KKyAgSXRzIGRldmljZXMgYXJlIGNhbGxlZCBiY3AwIHRocm91Z2ggYmNwMy4KKworYmF5Y29tX2VwcDoKKyAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIEVQUCBtb2RlbS4KKyAgSXRzIGRldmljZXMgYXJlIGNhbGxlZCBiY2UwIHRocm91Z2ggYmNlMy4KKyAgVGhpcyBkcml2ZXIgaXMgd29yay1pbi1wcm9ncmVzcy4KKworVGhlIGZvbGxvd2luZyBtb2RlbXMgYXJlIHN1cHBvcnRlZDoKKworc2VyMTI6ICBUaGlzIGlzIGEgdmVyeSBzaW1wbGUgMTIwMCBiYXVkIEFGU0sgbW9kZW0uIFRoZSBtb2RlbSBjb25zaXN0cyBvbmx5CisgICAgICAgIG9mIGEgbW9kdWxhdG9yL2RlbW9kdWxhdG9yIGNoaXAsIHVzdWFsbHkgYSBUSSBUQ00zMTA1LiBUaGUgY29tcHV0ZXIKKyAgICAgICAgaXMgcmVzcG9uc2libGUgZm9yIHJlZ2VuZXJhdGluZyB0aGUgcmVjZWl2ZXIgYml0IGNsb2NrLCBhcyB3ZWxsIGFzCisgICAgICAgIGZvciBoYW5kbGluZyB0aGUgSERMQyBwcm90b2NvbC4gVGhlIG1vZGVtIGNvbm5lY3RzIHRvIGEgc2VyaWFsIHBvcnQsCisgICAgICAgIGhlbmNlIHRoZSBuYW1lLiBTaW5jZSB0aGUgc2VyaWFsIHBvcnQgaXMgbm90IHVzZWQgYXMgYW4gYXN5bmMgc2VyaWFsCisgICAgICAgIHBvcnQsIHRoZSBrZXJuZWwgZHJpdmVyIGZvciBzZXJpYWwgcG9ydHMgY2Fubm90IGJlIHVzZWQsIGFuZCB0aGlzCisgICAgICAgIGRyaXZlciBvbmx5IHN1cHBvcnRzIHN0YW5kYXJkIHNlcmlhbCBoYXJkd2FyZSAoODI1MCwgMTY0NTAsIDE2NTUwKQorCitwYXI5NjogIFRoaXMgaXMgYSBtb2RlbSBmb3IgOTYwMCBiYXVkIEZTSyBjb21wYXRpYmxlIHRvIHRoZSBHM1JVSCBzdGFuZGFyZC4KKyAgICAgICAgVGhlIG1vZGVtIGRvZXMgYWxsIHRoZSBmaWx0ZXJpbmcgYW5kIHJlZ2VuZXJhdGVzIHRoZSByZWNlaXZlciBjbG9jay4KKyAgICAgICAgRGF0YSBpcyB0cmFuc2ZlcnJlZCBmcm9tIGFuZCB0byB0aGUgUEMgdmlhIGEgc2hpZnQgcmVnaXN0ZXIuCisgICAgICAgIFRoZSBzaGlmdCByZWdpc3RlciBpcyBmaWxsZWQgd2l0aCAxNiBiaXRzIGFuZCBhbiBpbnRlcnJ1cHQgaXMgc2lnbmFsbGVkLgorICAgICAgICBUaGUgUEMgdGhlbiBlbXB0aWVzIHRoZSBzaGlmdCByZWdpc3RlciBpbiBhIGJ1cnN0LiBUaGlzIG1vZGVtIGNvbm5lY3RzCisgICAgICAgIHRvIHRoZSBwYXJhbGxlbCBwb3J0LCBoZW5jZSB0aGUgbmFtZS4gVGhlIG1vZGVtIGxlYXZlcyB0aGUgCisgICAgICAgIGltcGxlbWVudGF0aW9uIG9mIHRoZSBIRExDIHByb3RvY29sIGFuZCB0aGUgc2NyYW1ibGVyIHBvbHlub21pYWwgdG8KKyAgICAgICAgdGhlIFBDLgorCitwaWNwYXI6IFRoaXMgaXMgYSByZWRlc2lnbiBvZiB0aGUgcGFyOTYgbW9kZW0gYnkgSGVubmluZyBSZWNoLCBERjlJQy4gVGhlIG1vZGVtCisgICAgICAgIGlzIHByb3RvY29sIGNvbXBhdGlibGUgdG8gcGFyOTYsIGJ1dCB1c2VzIG9ubHkgdGhyZWUgbG93IHBvd2VyIElDcworICAgICAgICBhbmQgY2FuIHRoZXJlZm9yZSBiZSBmZWQgZnJvbSB0aGUgcGFyYWxsZWwgcG9ydCBhbmQgZG9lcyBub3QgcmVxdWlyZQorICAgICAgICBhbiBhZGRpdGlvbmFsIHBvd2VyIHN1cHBseS4gRnVydGhlcm1vcmUsIGl0IGluY29ycG9yYXRlcyBhIGNhcnJpZXIKKyAgICAgICAgZGV0ZWN0IGNpcmN1aXRyeS4KKworRVBQOiAgICBUaGlzIGlzIGEgaGlnaC1zcGVlZCBtb2RlbSBhZGFwdG9yIHRoYXQgY29ubmVjdHMgdG8gYW4gZW5oYW5jZWQgcGFyYWxsZWwgcG9ydC4KKyAgICAgICAgSXRzIHRhcmdldCBhdWRpZW5jZSBpcyB1c2VycyB3b3JraW5nIG92ZXIgYSBoaWdoIHNwZWVkIGh1YiAoNzYuOGtiaXQvcykuCisKK2VwcGZwZ2E6IFRoaXMgaXMgYSByZWRlc2lnbiBvZiB0aGUgRVBQIGFkYXB0b3IuCisKKworCitBbGwgb2YgdGhlIGFib3ZlIG1vZGVtcyBvbmx5IHN1cHBvcnQgaGFsZiBkdXBsZXggY29tbXVuaWNhdGlvbnMuIEhvd2V2ZXIsCit0aGUgZHJpdmVyIHN1cHBvcnRzIHRoZSBLSVNTIChzZWUgYmVsb3cpIGZ1bGxkdXBsZXggY29tbWFuZC4gSXQgdGhlbiBzaW1wbHkKK3N0YXJ0cyB0byBzZW5kIGFzIHNvb24gYXMgdGhlcmUncyBhIHBhY2tldCB0byB0cmFuc21pdCBhbmQgZG9lcyBub3QgY2FyZQorYWJvdXQgRENELCBpLmUuIGl0IHN0YXJ0cyB0byBzZW5kIGV2ZW4gaWYgdGhlcmUncyBzb21lb25lIGVsc2Ugb24gdGhlIGNoYW5uZWwuCitUaGlzIGNvbW1hbmQgaXMgcmVxdWlyZWQgYnkgc29tZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIERBTUEgY2hhbm5lbCAKK2FjY2VzcyBwcm90b2NvbC4KKworCitUaGUgSW50ZXJmYWNlIG9mIHRoZSBkcml2ZXJzCisKK1VubGlrZSBwcmV2aW91cyBkcml2ZXJzLCB0aGVzZSBkcml2ZXJzIGFyZSBubyBsb25nZXIgY2hhcmFjdGVyIGRldmljZXMsCitidXQgdGhleSBhcmUgbm93IHRydWUga2VybmVsIG5ldHdvcmsgaW50ZXJmYWNlcy4gSW5zdGFsbGF0aW9uIGlzIHRoZXJlZm9yZQorc2ltcGxlLiBPbmNlIGluc3RhbGxlZCwgZm91ciBpbnRlcmZhY2VzIG5hbWVkIGJje3NmLHNoLHAsZX1bMC0zXSBhcmUgYXZhaWxhYmxlLgorc2V0aGRsYyBmcm9tIHRoZSBheDI1IHV0aWxpdGllcyBtYXkgYmUgdXNlZCB0byBzZXQgZHJpdmVyIHN0YXRlcyBldGMuCitVc2VycyBvZiB1c2VybGFuZCBBWC4yNSBzdGFja3MgbWF5IHVzZSB0aGUgbmV0Mmtpc3MgdXRpbGl0eSAoYWxzbyBhdmFpbGFibGUKK2luIHRoZSBheDI1IHV0aWxpdGllcyBwYWNrYWdlKSB0byBjb252ZXJ0IHBhY2tldHMgb2YgYSBuZXR3b3JrIGludGVyZmFjZQordG8gYSBLSVNTIHN0cmVhbSBvbiBhIHBzZXVkbyB0dHkuIFRoZXJlJ3MgYWxzbyBhIHBhdGNoIGF2YWlsYWJsZSBmcm9tCittZSBmb3IgV0FNUEVTIHdoaWNoIGFsbG93cyBhdHRhY2hpbmcgYSBrZXJuZWwgbmV0d29yayBpbnRlcmZhY2UgZGlyZWN0bHkuCisKKworQ29uZmlndXJpbmcgdGhlIGRyaXZlcgorCitFdmVyeSB0aW1lIGEgZHJpdmVyIGlzIGluc2VydGVkIGludG8gdGhlIGtlcm5lbCwgaXQgaGFzIHRvIGtub3cgd2hpY2gKK21vZGVtcyBpdCBzaG91bGQgYWNjZXNzIGF0IHdoaWNoIHBvcnRzLiBUaGlzIGNhbiBiZSBkb25lIHdpdGggdGhlIHNldGJheWNvbQordXRpbGl0eS4gSWYgeW91IGFyZSBvbmx5IHVzaW5nIG9uZSBtb2RlbSwgeW91IGNhbiBhbHNvIGNvbmZpZ3VyZSB0aGUKK2RyaXZlciBmcm9tIHRoZSBpbnNtb2QgY29tbWFuZCBsaW5lIChvciBieSBtZWFucyBvZiBhbiBvcHRpb24gbGluZSBpbgorL2V0Yy9tb2Rwcm9iZS5jb25mKS4KKworRXhhbXBsZXM6CisgIG1vZHByb2JlIGJheWNvbV9zZXJfZmR4IG1vZGU9InNlcjEyKiIgaW9iYXNlPTB4M2Y4IGlycT00CisgIHNldGhkbGMgLWkgYmNzZjAgLXAgbW9kZSAic2VyMTIqIiBpbyAweDNmOCBpcnEgNAorCitCb3RoIGxpbmVzIGNvbmZpZ3VyZSB0aGUgZmlyc3QgcG9ydCB0byBkcml2ZSBhIHNlcjEyIG1vZGVtIGF0IHRoZSBmaXJzdAorc2VyaWFsIHBvcnQgKENPTTEgdW5kZXIgRE9TKS4gVGhlICogaW4gdGhlIG1vZGUgcGFyYW1ldGVyIGluc3RydWN0cyB0aGUgZHJpdmVyIHRvIHVzZQordGhlIHNvZnR3YXJlIERDRCBhbGdvcml0aG0gKHNlZSBiZWxvdykuCisKKyAgaW5zbW9kIGJheWNvbV9wYXIgbW9kZT0icGljcGFyIiBpb2Jhc2U9MHgzNzgKKyAgc2V0aGRsYyAtaSBiY3AwIC1wIG1vZGUgInBpY3BhciIgaW8gMHgzNzgKKworQm90aCBsaW5lcyBjb25maWd1cmUgdGhlIGZpcnN0IHBvcnQgdG8gZHJpdmUgYSBwaWNwYXIgbW9kZW0gYXQgdGhlCitmaXJzdCBwYXJhbGxlbCBwb3J0IChMUFQxIHVuZGVyIERPUykuIChOb3RlOiBwaWNwYXIgaW1wbGllcworaGFyZHdhcmUgRENELCBwYXI5NiBpbXBsaWVzIHNvZnR3YXJlIERDRCkuCisKK1RoZSBjaGFubmVsIGFjY2VzcyBwYXJhbWV0ZXJzIGNhbiBiZSBzZXQgd2l0aCBzZXRoZGxjIC1hIG9yIGtpc3NwYXJtcy4KK05vdGUgdGhhdCBib3RoIHV0aWxpdGllcyBpbnRlcnByZXQgdGhlIHZhbHVlcyBzbGlnaHRseSBkaWZmZXJlbnRseS4KKworCitIYXJkd2FyZSBEQ0QgdmVyc3VzIFNvZnR3YXJlIERDRAorCitUbyBhdm9pZCBjb2xsaXNpb25zIG9uIHRoZSBhaXIsIHRoZSBkcml2ZXIgbXVzdCBrbm93IHdoZW4gdGhlIGNoYW5uZWwgaXMKK2J1c3kuIFRoaXMgaXMgdGhlIHRhc2sgb2YgdGhlIERDRCBjaXJjdWl0cnkvc29mdHdhcmUuIFRoZSBkcml2ZXIgbWF5IGVpdGhlcgordXRpbGlzZSBhIHNvZnR3YXJlIERDRCBhbGdvcml0aG0gKG9wdGlvbnM9MSkgb3IgdXNlIGEgRENEIHNpZ25hbCBmcm9tCit0aGUgaGFyZHdhcmUgKG9wdGlvbnM9MCkuCisKK3NlcjEyOiAgaWYgc29mdHdhcmUgRENEIGlzIHV0aWxpc2VkLCB0aGUgcmFkaW8ncyBzcXVlbGNoIHNob3VsZCBhbHdheXMgYmUKKyAgICAgICAgb3Blbi4gSXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgc29mdHdhcmUgRENEIGFsZ29yaXRobSwKKyAgICAgICAgYXMgaXQgaXMgbXVjaCBmYXN0ZXIgdGhhbiBtb3N0IGhhcmR3YXJlIHNxdWVsY2ggY2lyY3VpdHJ5LiBUaGUKKyAgICAgICAgZGlzYWR2YW50YWdlIGlzIGEgc2xpZ2h0bHkgaGlnaGVyIGxvYWQgb24gdGhlIHN5c3RlbS4KKworcGFyOTY6ICB0aGUgc29mdHdhcmUgRENEIGFsZ29yaXRobSBmb3IgdGhpcyB0eXBlIG9mIG1vZGVtIGlzIHJhdGhlciBwb29yLgorICAgICAgICBUaGUgbW9kZW0gc2ltcGx5IGRvZXMgbm90IHByb3ZpZGUgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGltcGxlbWVudAorICAgICAgICBhIHJlYXNvbmFibGUgRENEIGFsZ29yaXRobSBpbiBzb2Z0d2FyZS4gVGhlcmVmb3JlLCBpZiB5b3VyIHJhZGlvCisgICAgICAgIGZlZWRzIHRoZSBEQ0QgaW5wdXQgb2YgdGhlIFBBUjk2IG1vZGVtLCB0aGUgdXNlIG9mIHRoZSBoYXJkd2FyZQorICAgICAgICBEQ0QgY2lyY3VpdHJ5IGlzIHJlY29tbWVuZGVkLgorCitwaWNwYXI6IHRoZSBwaWNwYXIgbW9kZW0gZmVhdHVyZXMgYSBidWlsdGluIERDRCBoYXJkd2FyZSwgd2hpY2ggaXMgaGlnaGx5CisgICAgICAgIHJlY29tbWVuZGVkLgorCisKKworQ29tcGF0aWJpbGl0eSB3aXRoIHRoZSByZXN0IG9mIHRoZSBMaW51eCBrZXJuZWwKKworVGhlIHNlcmlhbCBkcml2ZXIgYW5kIHRoZSBiYXljb20gc2VyaWFsIGRyaXZlcnMgY29tcGV0ZQorZm9yIHRoZSBzYW1lIGhhcmR3YXJlIHJlc291cmNlcy4gT2YgY291cnNlIG9ubHkgb25lIGRyaXZlciBjYW4gYWNjZXNzIGEgZ2l2ZW4KK2ludGVyZmFjZSBhdCBhIHRpbWUuIFRoZSBzZXJpYWwgZHJpdmVyIGdyYWJzIGFsbCBpbnRlcmZhY2VzIGl0IGNhbiBmaW5kIGF0CitzdGFydHVwIHRpbWUuIFRoZXJlZm9yZSB0aGUgYmF5Y29tIGRyaXZlcnMgc3Vic2VxdWVudGx5IHdvbid0IGJlIGFibGUgdG8KK2FjY2VzcyBhIHNlcmlhbCBwb3J0LiBZb3UgbWlnaHQgdGhlcmVmb3JlIGZpbmQgaXQgbmVjZXNzYXJ5IHRvIHJlbGVhc2UKK2EgcG9ydCBvd25lZCBieSB0aGUgc2VyaWFsIGRyaXZlciB3aXRoICdzZXRzZXJpYWwgL2Rldi90dHlTIyB1YXJ0IG5vbmUnLCB3aGVyZQorIyBpcyB0aGUgbnVtYmVyIG9mIHRoZSBpbnRlcmZhY2UuIFRoZSBiYXljb20gZHJpdmVycyBkbyBub3QgcmVzZXJ2ZSBhbnkKK3BvcnRzIGF0IHN0YXJ0dXAsIHVubGVzcyBvbmUgaXMgc3BlY2lmaWVkIG9uIHRoZSAnaW5zbW9kJyBjb21tYW5kIGxpbmUuIEFub3RoZXIKK21ldGhvZCB0byBzb2x2ZSB0aGUgcHJvYmxlbSBpcyB0byBjb21waWxlIGFsbCBkcml2ZXJzIGFzIG1vZHVsZXMgYW5kCitsZWF2ZSBpdCB0byBrbW9kIHRvIGxvYWQgdGhlIGNvcnJlY3QgZHJpdmVyIGRlcGVuZGluZyBvbiB0aGUgYXBwbGljYXRpb24uCisKK1RoZSBwYXJhbGxlbCBwb3J0IGRyaXZlcnMgKGJheWNvbV9wYXIsIGJheWNvbV9lcHApIG5vdyB1c2UgdGhlIHBhcnBvcnQgc3Vic3lzdGVtCit0byBhcmJpdHJhdGUgdGhlIHBvcnRzIGJldHdlZW4gZGlmZmVyZW50IGNsaWVudCBkcml2ZXJzLgorCit2eSA3M3MgZGUKK1RvbSBTYWlsZXIsIHNhaWxlckBpZmUuZWUuZXRoei5jaAoraGI5am54IEAgaGI5dy5hbXByLm9yZwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiYzJlZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy50eHQKQEAgLTAsMCArMSwxNjE4IEBACisKKyAgICAgICAgICAgICAgICAgICBMaW51eCBFdGhlcm5ldCBCb25kaW5nIERyaXZlciBIT1dUTworCitJbml0aWFsIHJlbGVhc2UgOiBUaG9tYXMgRGF2aXMgPHRhZGF2aXMgYXQgbGJsLmdvdj4KK0NvcnJlY3Rpb25zLCBIQSBleHRlbnNpb25zIDogMjAwMC8xMC8wMy0xNSA6CisgIC0gV2lsbHkgVGFycmVhdSA8d2lsbHkgYXQgbWV0YS14Lm9yZz4KKyAgLSBDb25zdGFudGluZSBHYXZyaWxvdiA8Y29uc3QtZyBhdCB4cGVydC5jb20+CisgIC0gQ2hhZCBOLiBUaW5kZWwgPGN0aW5kZWwgYXQgaWVlZSBkb3Qgb3JnPgorICAtIEphbmljZSBHaXJvdWFyZCA8Z2lyb3VhcmQgYXQgdXMgZG90IGlibSBkb3QgY29tPgorICAtIEpheSBWb3NidXJnaCA8ZnViYXIgYXQgdXMgZG90IGlibSBkb3QgY29tPgorCitSZW9yZ2FuaXplZCBhbmQgdXBkYXRlZCBGZWIgMjAwNSBieSBKYXkgVm9zYnVyZ2gKKworTm90ZSA6CistLS0tLS0KKwkKK1RoZSBib25kaW5nIGRyaXZlciBvcmlnaW5hbGx5IGNhbWUgZnJvbSBEb25hbGQgQmVja2VyJ3MgYmVvd3VsZiBwYXRjaGVzIGZvcgora2VybmVsIDIuMC4gSXQgaGFzIGNoYW5nZWQgcXVpdGUgYSBiaXQgc2luY2UsIGFuZCB0aGUgb3JpZ2luYWwgdG9vbHMgZnJvbQorZXh0cmVtZS1saW51eCBhbmQgYmVvd3VsZiBzaXRlcyB3aWxsIG5vdCB3b3JrIHdpdGggdGhpcyB2ZXJzaW9uIG9mIHRoZSBkcml2ZXIuCisKK0ZvciBuZXcgdmVyc2lvbnMgb2YgdGhlIGRyaXZlciwgcGF0Y2hlcyBmb3Igb2xkZXIga2VybmVscyBhbmQgdGhlIHVwZGF0ZWQKK3VzZXJzcGFjZSB0b29scywgcGxlYXNlIGZvbGxvdyB0aGUgbGlua3MgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUuCisKK1RhYmxlIG9mIENvbnRlbnRzCis9PT09PT09PT09PT09PT09PQorCisxLiBCb25kaW5nIERyaXZlciBJbnN0YWxsYXRpb24KKworMi4gQm9uZGluZyBEcml2ZXIgT3B0aW9ucworCiszLiBDb25maWd1cmluZyBCb25kaW5nIERldmljZXMKKzMuMQlDb25maWd1cmF0aW9uIHdpdGggc3lzY29uZmlnIHN1cHBvcnQKKzMuMglDb25maWd1cmF0aW9uIHdpdGggaW5pdHNjcmlwdHMgc3VwcG9ydAorMy4zCUNvbmZpZ3VyaW5nIEJvbmRpbmcgTWFudWFsbHkKKzMuNAlDb25maWd1cmluZyBNdWx0aXBsZSBCb25kcworCis1LiBRdWVyeWluZyBCb25kaW5nIENvbmZpZ3VyYXRpb24KKzUuMQlCb25kaW5nIENvbmZpZ3VyYXRpb24KKzUuMglOZXR3b3JrIENvbmZpZ3VyYXRpb24KKworNi4gU3dpdGNoIENvbmZpZ3VyYXRpb24KKworNy4gODAyLjFxIFZMQU4gU3VwcG9ydAorCis4LiBMaW5rIE1vbml0b3JpbmcKKzguMQlBUlAgTW9uaXRvciBPcGVyYXRpb24KKzguMglDb25maWd1cmluZyBNdWx0aXBsZSBBUlAgVGFyZ2V0cworOC4zCU1JSSBNb25pdG9yIE9wZXJhdGlvbgorCis5LiBQb3RlbnRpYWwgVHJvdWJsZSBTb3VyY2VzCis5LjEJQWR2ZW50dXJlcyBpbiBSb3V0aW5nCis5LjIJRXRoZXJuZXQgRGV2aWNlIFJlbmFtaW5nCis5LjMJUGFpbmZ1bGx5IFNsb3cgT3IgTm8gRmFpbGVkIExpbmsgRGV0ZWN0aW9uIEJ5IE1paW1vbgorCisxMC4gU05NUCBhZ2VudHMKKworMTEuIFByb21pc2N1b3VzIG1vZGUKKworMTIuIEhpZ2ggQXZhaWxhYmlsaXR5IEluZm9ybWF0aW9uCisxMi4xCUhpZ2ggQXZhaWxhYmlsaXR5IGluIGEgU2luZ2xlIFN3aXRjaCBUb3BvbG9neQorMTIuMS4xCQlCb25kaW5nIE1vZGUgU2VsZWN0aW9uIGZvciBTaW5nbGUgU3dpdGNoIFRvcG9sb2d5CisxMi4xLjIJCUxpbmsgTW9uaXRvcmluZyBmb3IgU2luZ2xlIFN3aXRjaCBUb3BvbG9neQorMTIuMglIaWdoIEF2YWlsYWJpbGl0eSBpbiBhIE11bHRpcGxlIFN3aXRjaCBUb3BvbG9neQorMTIuMi4xCQlCb25kaW5nIE1vZGUgU2VsZWN0aW9uIGZvciBNdWx0aXBsZSBTd2l0Y2ggVG9wb2xvZ3kKKzEyLjIuMgkJTGluayBNb25pdG9yaW5nIGZvciBNdWx0aXBsZSBTd2l0Y2ggVG9wb2xvZ3kKKzEyLjMJU3dpdGNoIEJlaGF2aW9yIElzc3VlcyBmb3IgSGlnaCBBdmFpbGFiaWxpdHkKKworMTMuIEhhcmR3YXJlIFNwZWNpZmljIENvbnNpZGVyYXRpb25zCisxMy4xCUlCTSBCbGFkZUNlbnRlcgorCisxNC4gRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMKKworMTUuIFJlc291cmNlcyBhbmQgTGlua3MKKworCisxLiBCb25kaW5nIERyaXZlciBJbnN0YWxsYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJTW9zdCBwb3B1bGFyIGRpc3RybyBrZXJuZWxzIHNoaXAgd2l0aCB0aGUgYm9uZGluZyBkcml2ZXIKK2FscmVhZHkgYXZhaWxhYmxlIGFzIGEgbW9kdWxlIGFuZCB0aGUgaWZlbnNsYXZlIHVzZXIgbGV2ZWwgY29udHJvbAorcHJvZ3JhbSBpbnN0YWxsZWQgYW5kIHJlYWR5IGZvciB1c2UuIElmIHlvdXIgZGlzdHJvIGRvZXMgbm90LCBvciB5b3UKK2hhdmUgbmVlZCB0byBjb21waWxlIGJvbmRpbmcgZnJvbSBzb3VyY2UgKGUuZy4sIGNvbmZpZ3VyaW5nIGFuZAoraW5zdGFsbGluZyBhIG1haW5saW5lIGtlcm5lbCBmcm9tIGtlcm5lbC5vcmcpLCB5b3UnbGwgbmVlZCB0byBwZXJmb3JtCit0aGUgZm9sbG93aW5nIHN0ZXBzOgorCisxLjEgQ29uZmlndXJlIGFuZCBidWlsZCB0aGUga2VybmVsIHdpdGggYm9uZGluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCVRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgYm9uZGluZyBkcml2ZXIgaXMgYXZhaWxhYmxlIGluIHRoZQorZHJpdmVycy9uZXQvYm9uZGluZyBzdWJkaXJlY3Rvcnkgb2YgdGhlIG1vc3QgcmVjZW50IGtlcm5lbCBzb3VyY2UKKyh3aGljaCBpcyBhdmFpbGFibGUgb24gaHR0cDovL2tlcm5lbC5vcmcpLgorCisJUHJpb3IgdG8gdGhlIDIuNC4xMSBrZXJuZWwsIHRoZSBib25kaW5nIGRyaXZlciB3YXMgbWFpbnRhaW5lZAorbGFyZ2VseSBvdXRzaWRlIHRoZSBrZXJuZWwgdHJlZTsgcGF0Y2hlcyBmb3Igc29tZSBlYXJsaWVyIGtlcm5lbHMgYXJlCithdmFpbGFibGUgb24gdGhlIGJvbmRpbmcgc291cmNlZm9yZ2Ugc2l0ZSwgYWx0aG91Z2ggdGhvc2UgcGF0Y2hlcyBhcmUKK3N0aWxsIHNldmVyYWwgeWVhcnMgb3V0IG9mIGRhdGUuICBNb3N0IHVzZXJzIHdpbGwgd2FudCB0byB1c2UgZWl0aGVyCit0aGUgbW9zdCByZWNlbnQga2VybmVsIGZyb20ga2VybmVsLm9yZyBvciB3aGF0ZXZlciBrZXJuZWwgY2FtZSB3aXRoCit0aGVpciBkaXN0cm8uCisKKwlDb25maWd1cmUga2VybmVsIHdpdGggIm1ha2UgbWVudWNvbmZpZyIgKG9yICJtYWtlIHhjb25maWciIG9yCisibWFrZSBjb25maWciKSwgdGhlbiBzZWxlY3QgIkJvbmRpbmcgZHJpdmVyIHN1cHBvcnQiIGluIHRoZSAiTmV0d29yaworZGV2aWNlIHN1cHBvcnQiIHNlY3Rpb24uICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBjb25maWd1cmUgdGhlCitkcml2ZXIgYXMgbW9kdWxlIHNpbmNlIGl0IGlzIGN1cnJlbnRseSB0aGUgb25seSB3YXkgdG8gcGFzcyBwYXJhbWV0ZXJzCit0byB0aGUgZHJpdmVyIG9yIGNvbmZpZ3VyZSBtb3JlIHRoYW4gb25lIGJvbmRpbmcgZGV2aWNlLgorCisJQnVpbGQgYW5kIGluc3RhbGwgdGhlIG5ldyBrZXJuZWwgYW5kIG1vZHVsZXMsIHRoZW4gcHJvY2VlZCB0bworc3RlcCAyLgorCisxLjIgSW5zdGFsbCBpZmVuc2xhdmUgQ29udHJvbCBVdGlsaXR5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlUaGUgaWZlbnNsYXZlIHVzZXIgbGV2ZWwgY29udHJvbCBwcm9ncmFtIGlzIGluY2x1ZGVkIGluIHRoZQora2VybmVsIHNvdXJjZSB0cmVlLCBpbiB0aGUgZmlsZSBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaWZlbnNsYXZlLmMuCitJdCBpcyBnZW5lcmFsbHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgdXNlIHRoZSBpZmVuc2xhdmUgdGhhdAorY29ycmVzcG9uZHMgdG8gdGhlIGtlcm5lbCB0aGF0IHlvdSBhcmUgdXNpbmcgKGVpdGhlciBmcm9tIHRoZSBzYW1lCitzb3VyY2UgdHJlZSBvciBzdXBwbGllZCB3aXRoIHRoZSBkaXN0cm8pLCBob3dldmVyLCBpZmVuc2xhdmUKK2V4ZWN1dGFibGVzIGZyb20gb2xkZXIga2VybmVscyBzaG91bGQgZnVuY3Rpb24gKGJ1dCBmZWF0dXJlcyBuZXdlcgordGhhbiB0aGUgaWZlbnNsYXZlIHJlbGVhc2UgYXJlIG5vdCBzdXBwb3J0ZWQpLiAgUnVubmluZyBhbiBpZmVuc2xhdmUKK3RoYXQgaXMgbmV3ZXIgdGhhbiB0aGUga2VybmVsIGlzIG5vdCBzdXBwb3J0ZWQsIGFuZCBtYXkgb3IgbWF5IG5vdAord29yay4KKworCVRvIGluc3RhbGwgaWZlbnNsYXZlLCBkbyB0aGUgZm9sbG93aW5nOgorCisjIGdjYyAtV2FsbCAtTyAtSS91c3Ivc3JjL2xpbnV4L2luY2x1ZGUgaWZlbnNsYXZlLmMgLW8gaWZlbnNsYXZlCisjIGNwIGlmZW5zbGF2ZSAvc2Jpbi9pZmVuc2xhdmUKKworCUlmIHlvdXIga2VybmVsIHNvdXJjZSBpcyBub3QgaW4gIi91c3Ivc3JjL2xpbnV4LCIgdGhlbiByZXBsYWNlCisiL3Vzci9zcmMvbGludXgvaW5jbHVkZSIgaW4gdGhlIGFib3ZlIHdpdGggdGhlIGxvY2F0aW9uIG9mIHlvdXIga2VybmVsCitzb3VyY2UgaW5jbHVkZSBkaXJlY3RvcnkuCisKKwlZb3UgbWF5IHdpc2ggdG8gYmFjayB1cCBhbnkgZXhpc3RpbmcgL3NiaW4vaWZlbnNsYXZlLCBvciwgZm9yCit0ZXN0aW5nIG9yIGluZm9ybWFsIHVzZSwgdGFnIHRoZSBpZmVuc2xhdmUgdG8gdGhlIGtlcm5lbCB2ZXJzaW9uCisoZS5nLiwgbmFtZSB0aGUgaWZlbnNsYXZlIGV4ZWN1dGFibGUgL3NiaW4vaWZlbnNsYXZlLTIuNi4xMCkuCisKK0lNUE9SVEFOVCBOT1RFOgorCisJSWYgeW91IG9taXQgdGhlICItSSIgb3Igc3BlY2lmeSBhbiBpbmNvcnJlY3QgZGlyZWN0b3J5LCB5b3UKK21heSBlbmQgdXAgd2l0aCBhbiBpZmVuc2xhdmUgdGhhdCBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUga2VybmVsCit5b3UncmUgdHJ5aW5nIHRvIGJ1aWxkIGl0IGZvci4gIFNvbWUgZGlzdHJvcyAoZS5nLiwgUmVkIEhhdCBmcm9tIDcuMQorb253YXJkcykgZG8gbm90IGhhdmUgL3Vzci9pbmNsdWRlL2xpbnV4IHN5bWJvbGljYWxseSBsaW5rZWQgdG8gdGhlCitkZWZhdWx0IGtlcm5lbCBzb3VyY2UgaW5jbHVkZSBkaXJlY3RvcnkuCisKKworMi4gQm9uZGluZyBEcml2ZXIgT3B0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PQorCisJT3B0aW9ucyBmb3IgdGhlIGJvbmRpbmcgZHJpdmVyIGFyZSBzdXBwbGllZCBhcyBwYXJhbWV0ZXJzIHRvCit0aGUgYm9uZGluZyBtb2R1bGUgYXQgbG9hZCB0aW1lLiAgVGhleSBtYXkgYmUgZ2l2ZW4gYXMgY29tbWFuZCBsaW5lCithcmd1bWVudHMgdG8gdGhlIGluc21vZCBvciBtb2Rwcm9iZSBjb21tYW5kLCBidXQgYXJlIHVzdWFsbHkgc3BlY2lmaWVkCitpbiBlaXRoZXIgdGhlIC9ldGMvbW9kcHJvYmUuY29uZiBjb25maWd1cmF0aW9uIGZpbGUsIG9yIGluIGEKK2Rpc3Ryby1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUgKHNvbWUgb2Ygd2hpY2ggYXJlIGRldGFpbGVkIGluIHRoZQorbmV4dCBzZWN0aW9uKS4KKworCVRoZSBhdmFpbGFibGUgYm9uZGluZyBkcml2ZXIgcGFyYW1ldGVycyBhcmUgbGlzdGVkIGJlbG93LiBJZiBhCitwYXJhbWV0ZXIgaXMgbm90IHNwZWNpZmllZCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyB1c2VkLiAgV2hlbiBpbml0aWFsbHkKK2NvbmZpZ3VyaW5nIGEgYm9uZCwgaXQgaXMgcmVjb21tZW5kZWQgInRhaWwgLWYgL3Zhci9sb2cvbWVzc2FnZXMiIGJlCitydW4gaW4gYSBzZXBhcmF0ZSB3aW5kb3cgdG8gd2F0Y2ggZm9yIGJvbmRpbmcgZHJpdmVyIGVycm9yIG1lc3NhZ2VzLgorCisJSXQgaXMgY3JpdGljYWwgdGhhdCBlaXRoZXIgdGhlIG1paW1vbiBvciBhcnBfaW50ZXJ2YWwgYW5kCithcnBfaXBfdGFyZ2V0IHBhcmFtZXRlcnMgYmUgc3BlY2lmaWVkLCBvdGhlcndpc2Ugc2VyaW91cyBuZXR3b3JrCitkZWdyYWRhdGlvbiB3aWxsIG9jY3VyIGR1cmluZyBsaW5rIGZhaWx1cmVzLiAgVmVyeSBmZXcgZGV2aWNlcyBkbyBub3QKK3N1cHBvcnQgYXQgbGVhc3QgbWlpbW9uLCBzbyB0aGVyZSBpcyByZWFsbHkgbm8gcmVhc29uIG5vdCB0byB1c2UgaXQuCisKKwlPcHRpb25zIHdpdGggdGV4dHVhbCB2YWx1ZXMgd2lsbCBhY2NlcHQgZWl0aGVyIHRoZSB0ZXh0IG5hbWUKKwlvciwgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB0aGUgb3B0aW9uIHZhbHVlLiAgRS5nLiwKKwkibW9kZT04MDIuM2FkIiBhbmQgIm1vZGU9NCIgc2V0IHRoZSBzYW1lIG1vZGUuCisKKwlUaGUgcGFyYW1ldGVycyBhcmUgYXMgZm9sbG93czoKKworYXJwX2ludGVydmFsCisKKwlTcGVjaWZpZXMgdGhlIEFSUCBtb25pdG9yaW5nIGZyZXF1ZW5jeSBpbiBtaWxsaS1zZWNvbmRzLiBJZgorCUFSUCBtb25pdG9yaW5nIGlzIHVzZWQgaW4gYSBsb2FkLWJhbGFuY2luZyBtb2RlIChtb2RlIDAgb3IgMiksCisJdGhlIHN3aXRjaCBzaG91bGQgYmUgY29uZmlndXJlZCBpbiBhIG1vZGUgdGhhdCBldmVubHkKKwlkaXN0cmlidXRlcyBwYWNrZXRzIGFjcm9zcyBhbGwgbGlua3MgLSBzdWNoIGFzIHJvdW5kLXJvYmluLiBJZgorCXRoZSBzd2l0Y2ggaXMgY29uZmlndXJlZCB0byBkaXN0cmlidXRlIHRoZSBwYWNrZXRzIGluIGFuIFhPUgorCWZhc2hpb24sIGFsbCByZXBsaWVzIGZyb20gdGhlIEFSUCB0YXJnZXRzIHdpbGwgYmUgcmVjZWl2ZWQgb24KKwl0aGUgc2FtZSBsaW5rIHdoaWNoIGNvdWxkIGNhdXNlIHRoZSBvdGhlciB0ZWFtIG1lbWJlcnMgdG8KKwlmYWlsLiBBUlAgbW9uaXRvcmluZyBzaG91bGQgbm90IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aAorCW1paW1vbi4gQSB2YWx1ZSBvZiAwIGRpc2FibGVzIEFSUCBtb25pdG9yaW5nLiBUaGUgZGVmYXVsdAorCXZhbHVlIGlzIDAuCisKK2FycF9pcF90YXJnZXQKKworCVNwZWNpZmllcyB0aGUgaXAgYWRkcmVzc2VzIHRvIHVzZSB3aGVuIGFycF9pbnRlcnZhbCBpcyA+IDAuCisJVGhlc2UgYXJlIHRoZSB0YXJnZXRzIG9mIHRoZSBBUlAgcmVxdWVzdCBzZW50IHRvIGRldGVybWluZSB0aGUKKwloZWFsdGggb2YgdGhlIGxpbmsgdG8gdGhlIHRhcmdldHMuICBTcGVjaWZ5IHRoZXNlIHZhbHVlcyBpbgorCWRkZC5kZGQuZGRkLmRkZCBmb3JtYXQuICBNdWx0aXBsZSBpcCBhZHJlc3NlcyBtdXN0IGJlCisJc2VwZXJhdGVkIGJ5IGEgY29tbWEuICBBdCBsZWFzdCBvbmUgSVAgYWRkcmVzcyBtdXN0IGJlIGdpdmVuCisJZm9yIEFSUCBtb25pdG9yaW5nIHRvIGZ1bmN0aW9uLiAgVGhlIG1heGltdW0gbnVtYmVyIG9mIHRhcmdldHMKKwl0aGF0IGNhbiBiZSBzcGVjaWZpZWQgaXMgMTYuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBubyBJUAorCWFkZHJlc3Nlcy4KKworZG93bmRlbGF5CisKKwlTcGVjaWZpZXMgdGhlIHRpbWUsIGluIG1pbGxpc2Vjb25kcywgdG8gd2FpdCBiZWZvcmUgZGlzYWJsaW5nCisJYSBzbGF2ZSBhZnRlciBhIGxpbmsgZmFpbHVyZSBoYXMgYmVlbiBkZXRlY3RlZC4gIFRoaXMgb3B0aW9uCisJaXMgb25seSB2YWxpZCBmb3IgdGhlIG1paW1vbiBsaW5rIG1vbml0b3IuICBUaGUgZG93bmRlbGF5CisJdmFsdWUgc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgdGhlIG1paW1vbiB2YWx1ZTsgaWYgbm90LCBpdAorCXdpbGwgYmUgcm91bmRlZCBkb3duIHRvIHRoZSBuZWFyZXN0IG11bHRpcGxlLiAgVGhlIGRlZmF1bHQKKwl2YWx1ZSBpcyAwLgorCitsYWNwX3JhdGUKKworCU9wdGlvbiBzcGVjaWZ5aW5nIHRoZSByYXRlIGluIHdoaWNoIHdlJ2xsIGFzayBvdXIgbGluayBwYXJ0bmVyCisJdG8gdHJhbnNtaXQgTEFDUERVIHBhY2tldHMgaW4gODAyLjNhZCBtb2RlLiAgUG9zc2libGUgdmFsdWVzCisJYXJlOgorCisJc2xvdyBvciAwCisJCVJlcXVlc3QgcGFydG5lciB0byB0cmFuc21pdCBMQUNQRFVzIGV2ZXJ5IDMwIHNlY29uZHMgKGRlZmF1bHQpCisKKwlmYXN0IG9yIDEKKwkJUmVxdWVzdCBwYXJ0bmVyIHRvIHRyYW5zbWl0IExBQ1BEVXMgZXZlcnkgMSBzZWNvbmQKKworbWF4X2JvbmRzCisKKwlTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBib25kaW5nIGRldmljZXMgdG8gY3JlYXRlIGZvciB0aGlzCisJaW5zdGFuY2Ugb2YgdGhlIGJvbmRpbmcgZHJpdmVyLiAgRS5nLiwgaWYgbWF4X2JvbmRzIGlzIDMsIGFuZAorCXRoZSBib25kaW5nIGRyaXZlciBpcyBub3QgYWxyZWFkeSBsb2FkZWQsIHRoZW4gYm9uZDAsIGJvbmQxCisJYW5kIGJvbmQyIHdpbGwgYmUgY3JlYXRlZC4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEuCisKK21paW1vbgorCisJU3BlY2lmaWVzIHRoZSBmcmVxdWVuY3kgaW4gbWlsbGktc2Vjb25kcyB0aGF0IE1JSSBsaW5rCisJbW9uaXRvcmluZyB3aWxsIG9jY3VyLiAgQSB2YWx1ZSBvZiB6ZXJvIGRpc2FibGVzIE1JSSBsaW5rCisJbW9uaXRvcmluZy4gIEEgdmFsdWUgb2YgMTAwIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gIFRoZQorCXVzZV9jYXJyaWVyIG9wdGlvbiwgYmVsb3csIGFmZmVjdHMgaG93IHRoZSBsaW5rIHN0YXRlIGlzCisJZGV0ZXJtaW5lZC4gIFNlZSB0aGUgSGlnaCBBdmFpbGFiaWxpdHkgc2VjdGlvbiBmb3IgYWRkaXRpb25hbAorCWluZm9ybWF0aW9uLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMC4KKworbW9kZQorCisJU3BlY2lmaWVzIG9uZSBvZiB0aGUgYm9uZGluZyBwb2xpY2llcy4gVGhlIGRlZmF1bHQgaXMKKwliYWxhbmNlLXJyIChyb3VuZCByb2JpbikuICBQb3NzaWJsZSB2YWx1ZXMgYXJlOgorCisJYmFsYW5jZS1yciBvciAwCisKKwkJUm91bmQtcm9iaW4gcG9saWN5OiBUcmFuc21pdCBwYWNrZXRzIGluIHNlcXVlbnRpYWwKKwkJb3JkZXIgZnJvbSB0aGUgZmlyc3QgYXZhaWxhYmxlIHNsYXZlIHRocm91Z2ggdGhlCisJCWxhc3QuICBUaGlzIG1vZGUgcHJvdmlkZXMgbG9hZCBiYWxhbmNpbmcgYW5kIGZhdWx0CisJCXRvbGVyYW5jZS4KKworCWFjdGl2ZS1iYWNrdXAgb3IgMQorCisJCUFjdGl2ZS1iYWNrdXAgcG9saWN5OiBPbmx5IG9uZSBzbGF2ZSBpbiB0aGUgYm9uZCBpcworCQlhY3RpdmUuICBBIGRpZmZlcmVudCBzbGF2ZSBiZWNvbWVzIGFjdGl2ZSBpZiwgYW5kIG9ubHkKKwkJaWYsIHRoZSBhY3RpdmUgc2xhdmUgZmFpbHMuICBUaGUgYm9uZCdzIE1BQyBhZGRyZXNzIGlzCisJCWV4dGVybmFsbHkgdmlzaWJsZSBvbiBvbmx5IG9uZSBwb3J0IChuZXR3b3JrIGFkYXB0ZXIpCisJCXRvIGF2b2lkIGNvbmZ1c2luZyB0aGUgc3dpdGNoLiAgVGhpcyBtb2RlIHByb3ZpZGVzCisJCWZhdWx0IHRvbGVyYW5jZS4gIFRoZSBwcmltYXJ5IG9wdGlvbiBhZmZlY3RzIHRoZQorCQliZWhhdmlvciBvZiB0aGlzIG1vZGUuCisKKwliYWxhbmNlLXhvciBvciAyCisKKwkJWE9SIHBvbGljeTogVHJhbnNtaXQgYmFzZWQgb24gWyhzb3VyY2UgTUFDIGFkZHJlc3MKKwkJWE9SJ2Qgd2l0aCBkZXN0aW5hdGlvbiBNQUMgYWRkcmVzcykgbW9kdWxvIHNsYXZlCisJCWNvdW50XS4gIFRoaXMgc2VsZWN0cyB0aGUgc2FtZSBzbGF2ZSBmb3IgZWFjaAorCQlkZXN0aW5hdGlvbiBNQUMgYWRkcmVzcy4gIFRoaXMgbW9kZSBwcm92aWRlcyBsb2FkCisJCWJhbGFuY2luZyBhbmQgZmF1bHQgdG9sZXJhbmNlLgorCisJYnJvYWRjYXN0IG9yIDMKKworCQlCcm9hZGNhc3QgcG9saWN5OiB0cmFuc21pdHMgZXZlcnl0aGluZyBvbiBhbGwgc2xhdmUKKwkJaW50ZXJmYWNlcy4gIFRoaXMgbW9kZSBwcm92aWRlcyBmYXVsdCB0b2xlcmFuY2UuCisKKwk4MDIuM2FkIG9yIDQKKworCQlJRUVFIDgwMi4zYWQgRHluYW1pYyBsaW5rIGFnZ3JlZ2F0aW9uLiAgQ3JlYXRlcworCQlhZ2dyZWdhdGlvbiBncm91cHMgdGhhdCBzaGFyZSB0aGUgc2FtZSBzcGVlZCBhbmQKKwkJZHVwbGV4IHNldHRpbmdzLiAgVXRpbGl6ZXMgYWxsIHNsYXZlcyBpbiB0aGUgYWN0aXZlCisJCWFnZ3JlZ2F0b3IgYWNjb3JkaW5nIHRvIHRoZSA4MDIuM2FkIHNwZWNpZmljYXRpb24uCisKKwkJUHJlLXJlcXVpc2l0ZXM6CisKKwkJMS4gRXRodG9vbCBzdXBwb3J0IGluIHRoZSBiYXNlIGRyaXZlcnMgZm9yIHJldHJpZXZpbmcKKwkJdGhlIHNwZWVkIGFuZCBkdXBsZXggb2YgZWFjaCBzbGF2ZS4KKworCQkyLiBBIHN3aXRjaCB0aGF0IHN1cHBvcnRzIElFRUUgODAyLjNhZCBEeW5hbWljIGxpbmsKKwkJYWdncmVnYXRpb24uCisKKwkJTW9zdCBzd2l0Y2hlcyB3aWxsIHJlcXVpcmUgc29tZSB0eXBlIG9mIGNvbmZpZ3VyYXRpb24KKwkJdG8gZW5hYmxlIDgwMi4zYWQgbW9kZS4KKworCWJhbGFuY2UtdGxiIG9yIDUKKworCQlBZGFwdGl2ZSB0cmFuc21pdCBsb2FkIGJhbGFuY2luZzogY2hhbm5lbCBib25kaW5nIHRoYXQKKwkJZG9lcyBub3QgcmVxdWlyZSBhbnkgc3BlY2lhbCBzd2l0Y2ggc3VwcG9ydC4gIFRoZQorCQlvdXRnb2luZyB0cmFmZmljIGlzIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUKKwkJY3VycmVudCBsb2FkIChjb21wdXRlZCByZWxhdGl2ZSB0byB0aGUgc3BlZWQpIG9uIGVhY2gKKwkJc2xhdmUuICBJbmNvbWluZyB0cmFmZmljIGlzIHJlY2VpdmVkIGJ5IHRoZSBjdXJyZW50CisJCXNsYXZlLiAgSWYgdGhlIHJlY2VpdmluZyBzbGF2ZSBmYWlscywgYW5vdGhlciBzbGF2ZQorCQl0YWtlcyBvdmVyIHRoZSBNQUMgYWRkcmVzcyBvZiB0aGUgZmFpbGVkIHJlY2VpdmluZworCQlzbGF2ZS4KKworCQlQcmVyZXF1aXNpdGU6CisKKwkJRXRodG9vbCBzdXBwb3J0IGluIHRoZSBiYXNlIGRyaXZlcnMgZm9yIHJldHJpZXZpbmcgdGhlCisJCXNwZWVkIG9mIGVhY2ggc2xhdmUuCisKKwliYWxhbmNlLWFsYiBvciA2CisKKwkJQWRhcHRpdmUgbG9hZCBiYWxhbmNpbmc6IGluY2x1ZGVzIGJhbGFuY2UtdGxiIHBsdXMKKwkJcmVjZWl2ZSBsb2FkIGJhbGFuY2luZyAocmxiKSBmb3IgSVBWNCB0cmFmZmljLCBhbmQKKwkJZG9lcyBub3QgcmVxdWlyZSBhbnkgc3BlY2lhbCBzd2l0Y2ggc3VwcG9ydC4gIFRoZQorCQlyZWNlaXZlIGxvYWQgYmFsYW5jaW5nIGlzIGFjaGlldmVkIGJ5IEFSUCBuZWdvdGlhdGlvbi4KKwkJVGhlIGJvbmRpbmcgZHJpdmVyIGludGVyY2VwdHMgdGhlIEFSUCBSZXBsaWVzIHNlbnQgYnkKKwkJdGhlIGxvY2FsIHN5c3RlbSBvbiB0aGVpciB3YXkgb3V0IGFuZCBvdmVyd3JpdGVzIHRoZQorCQlzb3VyY2UgaGFyZHdhcmUgYWRkcmVzcyB3aXRoIHRoZSB1bmlxdWUgaGFyZHdhcmUKKwkJYWRkcmVzcyBvZiBvbmUgb2YgdGhlIHNsYXZlcyBpbiB0aGUgYm9uZCBzdWNoIHRoYXQKKwkJZGlmZmVyZW50IHBlZXJzIHVzZSBkaWZmZXJlbnQgaGFyZHdhcmUgYWRkcmVzc2VzIGZvcgorCQl0aGUgc2VydmVyLgorCisJCVJlY2VpdmUgdHJhZmZpYyBmcm9tIGNvbm5lY3Rpb25zIGNyZWF0ZWQgYnkgdGhlIHNlcnZlcgorCQlpcyBhbHNvIGJhbGFuY2VkLiAgV2hlbiB0aGUgbG9jYWwgc3lzdGVtIHNlbmRzIGFuIEFSUAorCQlSZXF1ZXN0IHRoZSBib25kaW5nIGRyaXZlciBjb3BpZXMgYW5kIHNhdmVzIHRoZSBwZWVyJ3MKKwkJSVAgaW5mb3JtYXRpb24gZnJvbSB0aGUgQVJQIHBhY2tldC4gIFdoZW4gdGhlIEFSUAorCQlSZXBseSBhcnJpdmVzIGZyb20gdGhlIHBlZXIsIGl0cyBoYXJkd2FyZSBhZGRyZXNzIGlzCisJCXJldHJpZXZlZCBhbmQgdGhlIGJvbmRpbmcgZHJpdmVyIGluaXRpYXRlcyBhbiBBUlAKKwkJcmVwbHkgdG8gdGhpcyBwZWVyIGFzc2lnbmluZyBpdCB0byBvbmUgb2YgdGhlIHNsYXZlcworCQlpbiB0aGUgYm9uZC4gIEEgcHJvYmxlbWF0aWMgb3V0Y29tZSBvZiB1c2luZyBBUlAKKwkJbmVnb3RpYXRpb24gZm9yIGJhbGFuY2luZyBpcyB0aGF0IGVhY2ggdGltZSB0aGF0IGFuCisJCUFSUCByZXF1ZXN0IGlzIGJyb2FkY2FzdCBpdCB1c2VzIHRoZSBoYXJkd2FyZSBhZGRyZXNzCisJCW9mIHRoZSBib25kLiAgSGVuY2UsIHBlZXJzIGxlYXJuIHRoZSBoYXJkd2FyZSBhZGRyZXNzCisJCW9mIHRoZSBib25kIGFuZCB0aGUgYmFsYW5jaW5nIG9mIHJlY2VpdmUgdHJhZmZpYworCQljb2xsYXBzZXMgdG8gdGhlIGN1cnJlbnQgc2xhdmUuICBUaGlzIGlzIGhhbmRsZWQgYnkKKwkJc2VuZGluZyB1cGRhdGVzIChBUlAgUmVwbGllcykgdG8gYWxsIHRoZSBwZWVycyB3aXRoCisJCXRoZWlyIGluZGl2aWR1YWxseSBhc3NpZ25lZCBoYXJkd2FyZSBhZGRyZXNzIHN1Y2ggdGhhdAorCQl0aGUgdHJhZmZpYyBpcyByZWRpc3RyaWJ1dGVkLiAgUmVjZWl2ZSB0cmFmZmljIGlzIGFsc28KKwkJcmVkaXN0cmlidXRlZCB3aGVuIGEgbmV3IHNsYXZlIGlzIGFkZGVkIHRvIHRoZSBib25kCisJCWFuZCB3aGVuIGFuIGluYWN0aXZlIHNsYXZlIGlzIHJlLWFjdGl2YXRlZC4gIFRoZQorCQlyZWNlaXZlIGxvYWQgaXMgZGlzdHJpYnV0ZWQgc2VxdWVudGlhbGx5IChyb3VuZCByb2JpbikKKwkJYW1vbmcgdGhlIGdyb3VwIG9mIGhpZ2hlc3Qgc3BlZWQgc2xhdmVzIGluIHRoZSBib25kLgorCisJCVdoZW4gYSBsaW5rIGlzIHJlY29ubmVjdGVkIG9yIGEgbmV3IHNsYXZlIGpvaW5zIHRoZQorCQlib25kIHRoZSByZWNlaXZlIHRyYWZmaWMgaXMgcmVkaXN0cmlidXRlZCBhbW9uZyBhbGwKKwkJYWN0aXZlIHNsYXZlcyBpbiB0aGUgYm9uZCBieSBpbnRpYXRpbmcgQVJQIFJlcGxpZXMKKwkJd2l0aCB0aGUgc2VsZWN0ZWQgbWFjIGFkZHJlc3MgdG8gZWFjaCBvZiB0aGUKKwkJY2xpZW50cy4gVGhlIHVwZGVsYXkgcGFyYW1ldGVyIChkZXRhaWxlZCBiZWxvdykgbXVzdAorCQliZSBzZXQgdG8gYSB2YWx1ZSBlcXVhbCBvciBncmVhdGVyIHRoYW4gdGhlIHN3aXRjaCdzCisJCWZvcndhcmRpbmcgZGVsYXkgc28gdGhhdCB0aGUgQVJQIFJlcGxpZXMgc2VudCB0byB0aGUKKwkJcGVlcnMgd2lsbCBub3QgYmUgYmxvY2tlZCBieSB0aGUgc3dpdGNoLgorCisJCVByZXJlcXVpc2l0ZXM6CisKKwkJMS4gRXRodG9vbCBzdXBwb3J0IGluIHRoZSBiYXNlIGRyaXZlcnMgZm9yIHJldHJpZXZpbmcKKwkJdGhlIHNwZWVkIG9mIGVhY2ggc2xhdmUuCisKKwkJMi4gQmFzZSBkcml2ZXIgc3VwcG9ydCBmb3Igc2V0dGluZyB0aGUgaGFyZHdhcmUKKwkJYWRkcmVzcyBvZiBhIGRldmljZSB3aGlsZSBpdCBpcyBvcGVuLiAgVGhpcyBpcworCQlyZXF1aXJlZCBzbyB0aGF0IHRoZXJlIHdpbGwgYWx3YXlzIGJlIG9uZSBzbGF2ZSBpbiB0aGUKKwkJdGVhbSB1c2luZyB0aGUgYm9uZCBoYXJkd2FyZSBhZGRyZXNzICh0aGUKKwkJY3Vycl9hY3RpdmVfc2xhdmUpIHdoaWxlIGhhdmluZyBhIHVuaXF1ZSBoYXJkd2FyZQorCQlhZGRyZXNzIGZvciBlYWNoIHNsYXZlIGluIHRoZSBib25kLiAgSWYgdGhlCisJCWN1cnJfYWN0aXZlX3NsYXZlIGZhaWxzIGl0cyBoYXJkd2FyZSBhZGRyZXNzIGlzCisJCXN3YXBwZWQgd2l0aCB0aGUgbmV3IGN1cnJfYWN0aXZlX3NsYXZlIHRoYXQgd2FzCisJCWNob3Nlbi4KKworcHJpbWFyeQorCisJQSBzdHJpbmcgKGV0aDAsIGV0aDIsIGV0Yykgc3BlY2lmeWluZyB3aGljaCBzbGF2ZSBpcyB0aGUKKwlwcmltYXJ5IGRldmljZS4gIFRoZSBzcGVjaWZpZWQgZGV2aWNlIHdpbGwgYWx3YXlzIGJlIHRoZQorCWFjdGl2ZSBzbGF2ZSB3aGlsZSBpdCBpcyBhdmFpbGFibGUuICBPbmx5IHdoZW4gdGhlIHByaW1hcnkgaXMKKwlvZmYtbGluZSB3aWxsIGFsdGVybmF0ZSBkZXZpY2VzIGJlIHVzZWQuICBUaGlzIGlzIHVzZWZ1bCB3aGVuCisJb25lIHNsYXZlIGlzIHByZWZlcnJlZCBvdmVyIGFub3RoZXIsIGUuZy4sIHdoZW4gb25lIHNsYXZlIGhhcworCWhpZ2hlciB0aHJvdWdocHV0IHRoYW4gYW5vdGhlci4KKworCVRoZSBwcmltYXJ5IG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBhY3RpdmUtYmFja3VwIG1vZGUuCisKK3VwZGVsYXkKKworCVNwZWNpZmllcyB0aGUgdGltZSwgaW4gbWlsbGlzZWNvbmRzLCB0byB3YWl0IGJlZm9yZSBlbmFibGluZyBhCisJc2xhdmUgYWZ0ZXIgYSBsaW5rIHJlY292ZXJ5IGhhcyBiZWVuIGRldGVjdGVkLiAgVGhpcyBvcHRpb24gaXMKKwlvbmx5IHZhbGlkIGZvciB0aGUgbWlpbW9uIGxpbmsgbW9uaXRvci4gIFRoZSB1cGRlbGF5IHZhbHVlCisJc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgdGhlIG1paW1vbiB2YWx1ZTsgaWYgbm90LCBpdCB3aWxsIGJlCisJcm91bmRlZCBkb3duIHRvIHRoZSBuZWFyZXN0IG11bHRpcGxlLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMC4KKwordXNlX2NhcnJpZXIKKworCVNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCBtaWltb24gc2hvdWxkIHVzZSBNSUkgb3IgRVRIVE9PTAorCWlvY3RscyB2cy4gbmV0aWZfY2Fycmllcl9vaygpIHRvIGRldGVybWluZSB0aGUgbGluaworCXN0YXR1cy4gVGhlIE1JSSBvciBFVEhUT09MIGlvY3RscyBhcmUgbGVzcyBlZmZpY2llbnQgYW5kCisJdXRpbGl6ZSBhIGRlcHJlY2F0ZWQgY2FsbGluZyBzZXF1ZW5jZSB3aXRoaW4gdGhlIGtlcm5lbC4gIFRoZQorCW5ldGlmX2NhcnJpZXJfb2soKSByZWxpZXMgb24gdGhlIGRldmljZSBkcml2ZXIgdG8gbWFpbnRhaW4gaXRzCisJc3RhdGUgd2l0aCBuZXRpZl9jYXJyaWVyX29uL29mZjsgYXQgdGhpcyB3cml0aW5nLCBtb3N0LCBidXQKKwlub3QgYWxsLCBkZXZpY2UgZHJpdmVycyBzdXBwb3J0IHRoaXMgZmFjaWxpdHkuCisKKwlJZiBib25kaW5nIGluc2lzdHMgdGhhdCB0aGUgbGluayBpcyB1cCB3aGVuIGl0IHNob3VsZCBub3QgYmUsCisJaXQgbWF5IGJlIHRoYXQgeW91ciBuZXR3b3JrIGRldmljZSBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydAorCW5ldGlmX2NhcnJpZXJfb24vb2ZmLiAgVGhlIGRlZmF1bHQgc3RhdGUgZm9yIG5ldGlmX2NhcnJpZXIgaXMKKwkiY2FycmllciBvbiwiIHNvIGlmIGEgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgbmV0aWZfY2FycmllciwKKwlpdCB3aWxsIGFwcGVhciBhcyBpZiB0aGUgbGluayBpcyBhbHdheXMgdXAuICBJbiB0aGlzIGNhc2UsCisJc2V0dGluZyB1c2VfY2FycmllciB0byAwIHdpbGwgY2F1c2UgYm9uZGluZyB0byByZXZlcnQgdG8gdGhlCisJTUlJIC8gRVRIVE9PTCBpb2N0bCBtZXRob2QgdG8gZGV0ZXJtaW5lIHRoZSBsaW5rIHN0YXRlLgorCisJQSB2YWx1ZSBvZiAxIGVuYWJsZXMgdGhlIHVzZSBvZiBuZXRpZl9jYXJyaWVyX29rKCksIGEgdmFsdWUgb2YKKwkwIHdpbGwgdXNlIHRoZSBkZXByZWNhdGVkIE1JSSAvIEVUSFRPT0wgaW9jdGxzLiAgVGhlIGRlZmF1bHQKKwl2YWx1ZSBpcyAxLgorCisKKworMy4gQ29uZmlndXJpbmcgQm9uZGluZyBEZXZpY2VzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVRoZXJlIGFyZSwgZXNzZW50aWFsbHksIHR3byBtZXRob2RzIGZvciBjb25maWd1cmluZyBib25kaW5nOgord2l0aCBzdXBwb3J0IGZyb20gdGhlIGRpc3RybydzIG5ldHdvcmsgaW5pdGlhbGl6YXRpb24gc2NyaXB0cywgYW5kCit3aXRob3V0LiAgRGlzdHJvcyBnZW5lcmFsbHkgdXNlIG9uZSBvZiB0d28gcGFja2FnZXMgZm9yIHRoZSBuZXR3b3JrCitpbml0aWFsaXphdGlvbiBzY3JpcHRzOiBpbml0c2NyaXB0cyBvciBzeXNjb25maWcuICBSZWNlbnQgdmVyc2lvbnMgb2YKK3RoZXNlIHBhY2thZ2VzIGhhdmUgc3VwcG9ydCBmb3IgYm9uZGluZywgd2hpbGUgb2xkZXIgdmVyc2lvbnMgZG8gbm90LgorCisJV2Ugd2lsbCBmaXJzdCBkZXNjcmliZSB0aGUgb3B0aW9ucyBmb3IgY29uZmlndXJpbmcgYm9uZGluZyBmb3IKK2Rpc3Ryb3MgdXNpbmcgdmVyc2lvbnMgb2YgaW5pdHNjcmlwdHMgYW5kIHN5c2NvbmZpZyB3aXRoIGZ1bGwgb3IKK3BhcnRpYWwgc3VwcG9ydCBmb3IgYm9uZGluZywgdGhlbiBwcm92aWRlIGluZm9ybWF0aW9uIG9uIGVuYWJsaW5nCitib25kaW5nIHdpdGhvdXQgc3VwcG9ydCBmcm9tIHRoZSBuZXR3b3JrIGluaXRpYWxpemF0aW9uIHNjcmlwdHMgKGkuZS4sCitvbGRlciB2ZXJzaW9ucyBvZiBpbml0c2NyaXB0cyBvciBzeXNjb25maWcpLgorCisJSWYgeW91J3JlIHVuc3VyZSB3aGV0aGVyIHlvdXIgZGlzdHJvIHVzZXMgc3lzY29uZmlnIG9yCitpbml0c2NyaXB0cywgb3IgZG9uJ3Qga25vdyBpZiBpdCdzIG5ldyBlbm91Z2gsIGhhdmUgbm8gZmVhci4KK0RldGVybWluaW5nIHRoaXMgaXMgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZC4KKworCUZpcnN0LCBpc3N1ZSB0aGUgY29tbWFuZDoKKworJCBycG0gLXFmIC9zYmluL2lmdXAKKworCUl0IHdpbGwgcmVzcG9uZCB3aXRoIGEgbGluZSBvZiB0ZXh0IHN0YXJ0aW5nIHdpdGggZWl0aGVyCisiaW5pdHNjcmlwdHMiIG9yICJzeXNjb25maWcsIiBmb2xsb3dlZCBieSBzb21lIG51bWJlcnMuICBUaGlzIGlzIHRoZQorcGFja2FnZSB0aGF0IHByb3ZpZGVzIHlvdXIgbmV0d29yayBpbml0aWFsaXphdGlvbiBzY3JpcHRzLgorCisJTmV4dCwgdG8gZGV0ZXJtaW5lIGlmIHlvdXIgaW5zdGFsbGF0aW9uIHN1cHBvcnRzIGJvbmRpbmcsCitpc3N1ZSB0aGUgY29tbWFuZDoKKworJCBncmVwIGlmZW5zbGF2ZSAvc2Jpbi9pZnVwCisKKwlJZiB0aGlzIHJldHVybnMgYW55IG1hdGNoZXMsIHRoZW4geW91ciBpbml0c2NyaXB0cyBvcgorc3lzY29uZmlnIGhhcyBzdXBwb3J0IGZvciBib25kaW5nLgorCiszLjEgQ29uZmlndXJhdGlvbiB3aXRoIHN5c2NvbmZpZyBzdXBwb3J0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlUaGlzIHNlY3Rpb24gYXBwbGllcyB0byBkaXN0cm9zIHVzaW5nIGEgdmVyc2lvbiBvZiBzeXNjb25maWcKK3dpdGggYm9uZGluZyBzdXBwb3J0LCBmb3IgZXhhbXBsZSwgU3VTRSBMaW51eCBFbnRlcnByaXNlIFNlcnZlciA5LgorCisJU3VTRSBTTEVTIDkncyBuZXR3b3JraW5nIGNvbmZpZ3VyYXRpb24gc3lzdGVtIGRvZXMgc3VwcG9ydAorYm9uZGluZywgaG93ZXZlciwgYXQgdGhpcyB3cml0aW5nLCB0aGUgWWFTVCBzeXN0ZW0gY29uZmlndXJhdGlvbgorZnJvbnRlbmQgZG9lcyBub3QgcHJvdmlkZSBhbnkgbWVhbnMgdG8gd29yayB3aXRoIGJvbmRpbmcgZGV2aWNlcy4KK0JvbmRpbmcgZGV2aWNlcyBjYW4gYmUgbWFuYWdlZCBieSBoYW5kLCBob3dldmVyLCBhcyBmb2xsb3dzLgorCisJRmlyc3QsIGlmIHRoZXkgaGF2ZSBub3QgYWxyZWFkeSBiZWVuIGNvbmZpZ3VyZWQsIGNvbmZpZ3VyZSB0aGUKK3NsYXZlIGRldmljZXMuICBPbiBTTEVTIDksIHRoaXMgaXMgbW9zdCBlYXNpbHkgZG9uZSBieSBydW5uaW5nIHRoZQoreWFzdDIgc3lzY29uZmlnIGNvbmZpZ3VyYXRpb24gdXRpbGl0eS4gIFRoZSBnb2FsIGlzIGZvciB0byBjcmVhdGUgYW4KK2lmY2ZnLWlkIGZpbGUgZm9yIGVhY2ggc2xhdmUgZGV2aWNlLiAgVGhlIHNpbXBsZXN0IHdheSB0byBhY2NvbXBsaXNoCit0aGlzIGlzIHRvIGNvbmZpZ3VyZSB0aGUgZGV2aWNlcyBmb3IgREhDUC4gIFRoZSBuYW1lIG9mIHRoZQorY29uZmlndXJhdGlvbiBmaWxlIGZvciBlYWNoIGRldmljZSB3aWxsIGJlIG9mIHRoZSBmb3JtOgorCitpZmNmZy1pZC14eDp4eDp4eDp4eDp4eDp4eAorCisJV2hlcmUgdGhlICJ4eCIgcG9ydGlvbiB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlIGRpZ2l0cyBmcm9tCit0aGUgZGV2aWNlJ3MgcGVybWFuZW50IE1BQyBhZGRyZXNzLgorCisJT25jZSB0aGUgc2V0IG9mIGlmY2ZnLWlkLXh4Onh4Onh4Onh4Onh4Onh4IGZpbGVzIGhhcyBiZWVuCitjcmVhdGVkLCBpdCBpcyBuZWNlc3NhcnkgdG8gZWRpdCB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgdGhlIHNsYXZlCitkZXZpY2VzICh0aGUgTUFDIGFkZHJlc3NlcyBjb3JyZXNwb25kIHRvIHRob3NlIG9mIHRoZSBzbGF2ZSBkZXZpY2VzKS4KK0JlZm9yZSBlZGl0aW5nLCB0aGUgZmlsZSB3aWxsIGNvbnRhaW4gbXVsaXBsZSBsaW5lcywgYW5kIHdpbGwgbG9vaworc29tZXRoaW5nIGxpa2UgdGhpczoKKworQk9PVFBST1RPPSdkaGNwJworU1RBUlRNT0RFPSdvbicKK1VTRVJDVEw9J25vJworVU5JUVVFPSdYTnp1LldlWkdPR0YrNHdFJworX25tX25hbWU9J2J1cy1wY2ktMDAwMTo2MTowMS4wJworCisJQ2hhbmdlIHRoZSBCT09UUFJPVE8gYW5kIFNUQVJUTU9ERSBsaW5lcyB0byB0aGUgZm9sbG93aW5nOgorCitCT09UUFJPVE89J25vbmUnCitTVEFSVE1PREU9J29mZicKKworCURvIG5vdCBhbHRlciB0aGUgVU5JUVVFIG9yIF9ubV9uYW1lIGxpbmVzLiAgUmVtb3ZlIGFueSBvdGhlcgorbGluZXMgKFVTRVJDVEwsIGV0YykuCisKKwlPbmNlIHRoZSBpZmNmZy1pZC14eDp4eDp4eDp4eDp4eDp4eCBmaWxlcyBoYXZlIGJlZW4gbW9kaWZpZWQsCitpdCdzIHRpbWUgdG8gY3JlYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBib25kaW5nIGRldmljZQoraXRzZWxmLiAgVGhpcyBmaWxlIGlzIG5hbWVkIGlmY2ZnLWJvbmRYLCB3aGVyZSBYIGlzIHRoZSBudW1iZXIgb2YgdGhlCitib25kaW5nIGRldmljZSB0byBjcmVhdGUsIHN0YXJ0aW5nIGF0IDAuICBUaGUgZmlyc3Qgc3VjaCBmaWxlIGlzCitpZmNmZy1ib25kMCwgdGhlIHNlY29uZCBpcyBpZmNmZy1ib25kMSwgYW5kIHNvIG9uLiAgVGhlIHN5c2NvbmZpZworbmV0d29yayBjb25maWd1cmF0aW9uIHN5c3RlbSB3aWxsIGNvcnJlY3RseSBzdGFydCBtdWx0aXBsZSBpbnN0YW5jZXMKK29mIGJvbmRpbmcuCisKKwlUaGUgY29udGVudHMgb2YgdGhlIGlmY2ZnLWJvbmRYIGZpbGUgaXMgYXMgZm9sbG93czoKKworQk9PVFBST1RPPSJzdGF0aWMiCitCUk9BRENBU1Q9IjEwLjAuMi4yNTUiCitJUEFERFI9IjEwLjAuMi4xMCIKK05FVE1BU0s9IjI1NS4yNTUuMC4wIgorTkVUV09SSz0iMTAuMC4yLjAiCitSRU1PVEVfSVBBRERSPSIiCitTVEFSVE1PREU9Im9uYm9vdCIKK0JPTkRJTkdfTUFTVEVSPSJ5ZXMiCitCT05ESU5HX01PRFVMRV9PUFRTPSJtb2RlPWFjdGl2ZS1iYWNrdXAgbWlpbW9uPTEwMCIKK0JPTkRJTkdfU0xBVkUwPSJldGgwIgorQk9ORElOR19TTEFWRTE9ImV0aDEiCisKKwlSZXBsYWNlIHRoZSBzYW1wbGUgQlJPQURDQVNULCBJUEFERFIsIE5FVE1BU0sgYW5kIE5FVFdPUksKK3ZhbHVlcyB3aXRoIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZXMgZm9yIHlvdXIgbmV0d29yay4KKworCU5vdGUgdGhhdCBjb25maWd1cmluZyB0aGUgYm9uZGluZyBkZXZpY2Ugd2l0aCBCT09UUFJPVE89J2RoY3AnCitkb2VzIG5vdCB3b3JrOyB0aGUgc2NyaXB0cyBhdHRlbXB0IHRvIG9idGFpbiB0aGUgZGV2aWNlIGFkZHJlc3MgZnJvbQorREhDUCBwcmlvciB0byBhZGRpbmcgYW55IG9mIHRoZSBzbGF2ZSBkZXZpY2VzLiAgV2l0aG91dCBhY3RpdmUgc2xhdmVzLAordGhlIERIQ1AgcmVxdWVzdHMgYXJlIG5vdCBzZW50IHRvIHRoZSBuZXR3b3JrLgorCisJVGhlIFNUQVJUTU9ERSBzcGVjaWZpZXMgd2hlbiB0aGUgZGV2aWNlIGlzIGJyb3VnaHQgb25saW5lLgorVGhlIHBvc3NpYmxlIHZhbHVlcyBhcmU6CisKKwlvbmJvb3Q6CSBUaGUgZGV2aWNlIGlzIHN0YXJ0ZWQgYXQgYm9vdCB0aW1lLiAgSWYgeW91J3JlIG5vdAorCQkgc3VyZSwgdGhpcyBpcyBwcm9iYWJseSB3aGF0IHlvdSB3YW50LgorCisJbWFudWFsOgkgVGhlIGRldmljZSBpcyBzdGFydGVkIG9ubHkgd2hlbiBpZnVwIGlzIGNhbGxlZAorCQkgbWFudWFsbHkuICBCb25kaW5nIGRldmljZXMgbWF5IGJlIGNvbmZpZ3VyZWQgdGhpcworCQkgd2F5IGlmIHlvdSBkbyBub3Qgd2lzaCB0aGVtIHRvIHN0YXJ0IGF1dG9tYXRpY2FsbHkKKwkJIGF0IGJvb3QgZm9yIHNvbWUgcmVhc29uLgorCisJaG90cGx1ZzogVGhlIGRldmljZSBpcyBzdGFydGVkIGJ5IGEgaG90cGx1ZyBldmVudC4gIFRoaXMgaXMgbm90CisJCSBhIHZhbGlkIGNob2ljZSBmb3IgYSBib25kaW5nIGRldmljZS4KKworCW9mZiBvciBpZ25vcmU6IFRoZSBkZXZpY2UgY29uZmlndXJhdGlvbiBpcyBpZ25vcmVkLgorCisJVGhlIGxpbmUgQk9ORElOR19NQVNURVI9J3llcycgaW5kaWNhdGVzIHRoYXQgdGhlIGRldmljZSBpcyBhCitib25kaW5nIG1hc3RlciBkZXZpY2UuICBUaGUgb25seSB1c2VmdWwgdmFsdWUgaXMgInllcy4iCisKKwlUaGUgY29udGVudHMgb2YgQk9ORElOR19NT0RVTEVfT1BUUyBhcmUgc3VwcGxpZWQgdG8gdGhlCitpbnN0YW5jZSBvZiB0aGUgYm9uZGluZyBtb2R1bGUgZm9yIHRoaXMgZGV2aWNlLiAgU3BlY2lmeSB0aGUgb3B0aW9ucworZm9yIHRoZSBib25kaW5nIG1vZGUsIGxpbmsgbW9uaXRvcmluZywgYW5kIHNvIG9uIGhlcmUuICBEbyBub3QgaW5jbHVkZQordGhlIG1heF9ib25kcyBib25kaW5nIHBhcmFtZXRlcjsgdGhpcyB3aWxsIGNvbmZ1c2UgdGhlIGNvbmZpZ3VyYXRpb24KK3N5c3RlbSBpZiB5b3UgaGF2ZSBtdWx0aXBsZSBib25kaW5nIGRldmljZXMuCisKKwlGaW5hbGx5LCBzdXBwbHkgb25lIEJPTkRJTkdfU0xBVkVuPSJldGhYIiBmb3IgZWFjaCBzbGF2ZSwKK3doZXJlICJuIiBpcyBhbiBpbmNyZWFzaW5nIHZhbHVlLCBvbmUgZm9yIGVhY2ggc2xhdmUsIGFuZCAiZXRoWCIgaXMKK3RoZSBuYW1lIG9mIHRoZSBzbGF2ZSBkZXZpY2UgKGV0aDAsIGV0aDEsIGV0YykuCisKKwlXaGVuIGFsbCBjb25maWd1cmF0aW9uIGZpbGVzIGhhdmUgYmVlbiBtb2RpZmllZCBvciBjcmVhdGVkLAorbmV0d29ya2luZyBtdXN0IGJlIHJlc3RhcnRlZCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyB0byB0YWtlCitlZmZlY3QuICBUaGlzIGNhbiBiZSBhY2NvbXBsaXNoZWQgdmlhIHRoZSBmb2xsb3dpbmc6CisKKyMgL2V0Yy9pbml0LmQvbmV0d29yayByZXN0YXJ0CisKKwlOb3RlIHRoYXQgdGhlIG5ldHdvcmsgY29udHJvbCBzY3JpcHQgKC9zYmluL2lmZG93bikgd2lsbAorcmVtb3ZlIHRoZSBib25kaW5nIG1vZHVsZSBhcyBwYXJ0IG9mIHRoZSBuZXR3b3JrIHNodXRkb3duIHByb2Nlc3NpbmcsCitzbyBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIHJlbW92ZSB0aGUgbW9kdWxlIGJ5IGhhbmQgaWYsIGUuZy4sIHRoZQorbW9kdWxlIHBhcmFtdGVycyBoYXZlIGNoYW5nZWQuCisKKwlBbHNvLCBhdCB0aGlzIHdyaXRpbmcsIFlhU1QvWWFTVDIgd2lsbCBub3QgbWFuYWdlIGJvbmRpbmcKK2RldmljZXMgKHRoZXkgZG8gbm90IHNob3cgYm9uZGluZyBpbnRlcmZhY2VzIG9uIGl0cyBsaXN0IG9mIG5ldHdvcmsKK2RldmljZXMpLiAgSXQgaXMgbmVjZXNzYXJ5IHRvIGVkaXQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBieSBoYW5kIHRvCitjaGFuZ2UgdGhlIGJvbmRpbmcgY29uZmlndXJhdGlvbi4KKworCUFkZGl0aW9uYWwgZ2VuZXJhbCBvcHRpb25zIGFuZCBkZXRhaWxzIG9mIHRoZSBpZmNmZyBmaWxlCitmb3JtYXQgY2FuIGJlIGZvdW5kIGluIGFuIGV4YW1wbGUgaWZjZmcgdGVtcGxhdGUgZmlsZToKKworL2V0Yy9zeXNjb25maWcvbmV0d29yay9pZmNmZy50ZW1wbGF0ZQorCisJTm90ZSB0aGF0IHRoZSB0ZW1wbGF0ZSBkb2VzIG5vdCBkb2N1bWVudCB0aGUgdmFyaW91cyBCT05ESU5HXworc2V0dGluZ3MgZGVzY3JpYmVkIGFib3ZlLCBidXQgZG9lcyBkZXNjcmliZSBtYW55IG9mIHRoZSBvdGhlciBvcHRpb25zLgorCiszLjIgQ29uZmlndXJhdGlvbiB3aXRoIGluaXRzY3JpcHRzIHN1cHBvcnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJVGhpcyBzZWN0aW9uIGFwcGxpZXMgdG8gZGlzdHJvcyB1c2luZyBhIHZlcnNpb24gb2YgaW5pdHNjcmlwdHMKK3dpdGggYm9uZGluZyBzdXBwb3J0LCBmb3IgZXhhbXBsZSwgUmVkIEhhdCBMaW51eCA5IG9yIFJlZCBIYXQKK0VudGVycHJpc2UgTGludXggdmVyc2lvbiAzLiAgT24gdGhlc2Ugc3lzdGVtcywgdGhlIG5ldHdvcmsKK2luaXRpYWxpemF0aW9uIHNjcmlwdHMgaGF2ZSBzb21lIGtub3dsZWRnZSBvZiBib25kaW5nLCBhbmQgY2FuIGJlCitjb25maWd1cmVkIHRvIGNvbnRyb2wgYm9uZGluZyBkZXZpY2VzLgorCisJVGhlc2UgZGlzdHJvcyB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGxvYWQgdGhlIG5ldHdvcmsgYWRhcHRlcgorZHJpdmVyIHVubGVzcyB0aGUgZXRoWCBkZXZpY2UgaXMgY29uZmlndXJlZCB3aXRoIGFuIElQIGFkZHJlc3MuCitCZWNhdXNlIG9mIHRoaXMgY29uc3RyYWludCwgdXNlcnMgbXVzdCBtYW51YWxseSBjb25maWd1cmUgYQorbmV0d29yay1zY3JpcHQgZmlsZSBmb3IgYWxsIHBoeXNpY2FsIGFkYXB0ZXJzIHRoYXQgd2lsbCBiZSBtZW1iZXJzIG9mCithIGJvbmRYIGxpbmsuICBOZXR3b3JrIHNjcmlwdCBmaWxlcyBhcmUgbG9jYXRlZCBpbiB0aGUgZGlyZWN0b3J5OgorCisvZXRjL3N5c2NvbmZpZy9uZXR3b3JrLXNjcmlwdHMKKworCVRoZSBmaWxlIG5hbWUgbXVzdCBiZSBwcmVmaXhlZCB3aXRoICJpZmNmZy1ldGgiIGFuZCBzdWZmaXhlZAord2l0aCB0aGUgYWRhcHRlcidzIHBoeXNpY2FsIGFkYXB0ZXIgbnVtYmVyLiAgRm9yIGV4YW1wbGUsIHRoZSBzY3JpcHQKK2ZvciBldGgwIHdvdWxkIGJlIG5hbWVkIC9ldGMvc3lzY29uZmlnL25ldHdvcmstc2NyaXB0cy9pZmNmZy1ldGgwLgorUGxhY2UgdGhlIGZvbGxvd2luZyB0ZXh0IGluIHRoZSBmaWxlOgorCitERVZJQ0U9ZXRoMAorVVNFUkNUTD1ubworT05CT09UPXllcworTUFTVEVSPWJvbmQwCitTTEFWRT15ZXMKK0JPT1RQUk9UTz1ub25lCisKKwlUaGUgREVWSUNFPSBsaW5lIHdpbGwgYmUgZGlmZmVyZW50IGZvciBldmVyeSBldGhYIGRldmljZSBhbmQKK211c3QgY29ycmVzcG9uZCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmaWxlLCBpLmUuLCBpZmNmZy1ldGgxIG11c3QgaGF2ZQorYSBkZXZpY2UgbGluZSBvZiBERVZJQ0U9ZXRoMS4gIFRoZSBzZXR0aW5nIG9mIHRoZSBNQVNURVI9IGxpbmUgd2lsbAorYWxzbyBkZXBlbmQgb24gdGhlIGZpbmFsIGJvbmRpbmcgaW50ZXJmYWNlIG5hbWUgY2hvc2VuIGZvciB5b3VyIGJvbmQuCitBcyB3aXRoIG90aGVyIG5ldHdvcmsgZGV2aWNlcywgdGhlc2UgdHlwaWNhbGx5IHN0YXJ0IGF0IDAsIGFuZCBnbyB1cAorb25lIGZvciBlYWNoIGRldmljZSwgaS5lLiwgdGhlIGZpcnN0IGJvbmRpbmcgaW5zdGFuY2UgaXMgYm9uZDAsIHRoZQorc2Vjb25kIGlzIGJvbmQxLCBhbmQgc28gb24uCisKKwlOZXh0LCBjcmVhdGUgYSBib25kIG5ldHdvcmsgc2NyaXB0LiAgVGhlIGZpbGUgbmFtZSBmb3IgdGhpcworc2NyaXB0IHdpbGwgYmUgL2V0Yy9zeXNjb25maWcvbmV0d29yay1zY3JpcHRzL2lmY2ZnLWJvbmRYIHdoZXJlIFggaXMKK3RoZSBudW1iZXIgb2YgdGhlIGJvbmQuICBGb3IgYm9uZDAgdGhlIGZpbGUgaXMgbmFtZWQgImlmY2ZnLWJvbmQwIiwKK2ZvciBib25kMSBpdCBpcyBuYW1lZCAiaWZjZmctYm9uZDEiLCBhbmQgc28gb24uICBXaXRoaW4gdGhhdCBmaWxlLAorcGxhY2UgdGhlIGZvbGxvd2luZyB0ZXh0OgorCitERVZJQ0U9Ym9uZDAKK0lQQUREUj0xOTIuMTY4LjEuMQorTkVUTUFTSz0yNTUuMjU1LjI1NS4wCitORVRXT1JLPTE5Mi4xNjguMS4wCitCUk9BRENBU1Q9MTkyLjE2OC4xLjI1NQorT05CT09UPXllcworQk9PVFBST1RPPW5vbmUKK1VTRVJDVEw9bm8KKworCUJlIHN1cmUgdG8gY2hhbmdlIHRoZSBuZXR3b3JraW5nIHNwZWNpZmljIGxpbmVzIChJUEFERFIsCitORVRNQVNLLCBORVRXT1JLIGFuZCBCUk9BRENBU1QpIHRvIG1hdGNoIHlvdXIgbmV0d29yayBjb25maWd1cmF0aW9uLgorCisJRmluYWxseSwgaXQgaXMgbmVjZXNzYXJ5IHRvIGVkaXQgL2V0Yy9tb2R1bGVzLmNvbmYgdG8gbG9hZCB0aGUKK2JvbmRpbmcgbW9kdWxlIHdoZW4gdGhlIGJvbmQwIGludGVyZmFjZSBpcyBicm91Z2h0IHVwLiAgVGhlIGZvbGxvd2luZworc2FtcGxlIGxpbmVzIGluIC9ldGMvbW9kdWxlcy5jb25mIHdpbGwgbG9hZCB0aGUgYm9uZGluZyBtb2R1bGUsIGFuZAorc2VsZWN0IGl0cyBvcHRpb25zOgorCithbGlhcyBib25kMCBib25kaW5nCitvcHRpb25zIGJvbmQwIG1vZGU9YmFsYW5jZS1hbGIgbWlpbW9uPTEwMAorCisJUmVwbGFjZSB0aGUgc2FtcGxlIHBhcmFtZXRlcnMgd2l0aCB0aGUgYXBwcm9wcmlhdGUgc2V0IG9mCitvcHRpb25zIGZvciB5b3VyIGNvbmZpZ3VyYXRpb24uCisKKwlGaW5hbGx5IHJ1biAiL2V0Yy9yYy5kL2luaXQuZC9uZXR3b3JrIHJlc3RhcnQiIGFzIHJvb3QuICBUaGlzCit3aWxsIHJlc3RhcnQgdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGFuZCB5b3VyIGJvbmQgbGluayBzaG91bGQgYmUgbm93Cit1cCBhbmQgcnVubmluZy4KKworCiszLjMgQ29uZmlndXJpbmcgQm9uZGluZyBNYW51YWxseQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCVRoaXMgc2VjdGlvbiBhcHBsaWVzIHRvIGRpc3Ryb3Mgd2hvc2UgbmV0d29yayBpbml0aWFsaXphdGlvbgorc2NyaXB0cyAodGhlIHN5c2NvbmZpZyBvciBpbml0c2NyaXB0cyBwYWNrYWdlKSBkbyBub3QgaGF2ZSBzcGVjaWZpYwora25vd2xlZGdlIG9mIGJvbmRpbmcuICBPbmUgc3VjaCBkaXN0cm8gaXMgU3VTRSBMaW51eCBFbnRlcnByaXNlIFNlcnZlcgordmVyc2lvbiA4LgorCisJVGhlIGdlbmVyYWwgbWV0aG9kb2xvZ3kgZm9yIHRoZXNlIHN5c3RlbXMgaXMgdG8gcGxhY2UgdGhlCitib25kaW5nIG1vZHVsZSBwYXJhbWV0ZXJzIGludG8gL2V0Yy9tb2Rwcm9iZS5jb25mLCB0aGVuIGFkZCBtb2Rwcm9iZQorYW5kL29yIGlmZW5zbGF2ZSBjb21tYW5kcyB0byB0aGUgc3lzdGVtJ3MgZ2xvYmFsIGluaXQgc2NyaXB0LiAgVGhlCituYW1lIG9mIHRoZSBnbG9iYWwgaW5pdCBzY3JpcHQgZGlmZmVyczsgZm9yIHN5c2NvbmZpZywgaXQgaXMKKy9ldGMvaW5pdC5kL2Jvb3QubG9jYWwgYW5kIGZvciBpbml0c2NyaXB0cyBpdCBpcyAvZXRjL3JjLmQvcmMubG9jYWwuCisKKwlGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnRlZCB0byBtYWtlIGEgc2ltcGxlIGJvbmQgb2YgdHdvIGUxMDAKK2RldmljZXMgKHByZXN1bWVkIHRvIGJlIGV0aDAgYW5kIGV0aDEpLCBhbmQgaGF2ZSBpdCBwZXJzaXN0IGFjcm9zcworcmVib290cywgZWRpdCB0aGUgYXBwcm9wcmlhdGUgZmlsZSAoL2V0Yy9pbml0LmQvYm9vdC5sb2NhbCBvcgorL2V0Yy9yYy5kL3JjLmxvY2FsKSwgYW5kIGFkZCB0aGUgZm9sbG93aW5nOgorCittb2Rwcm9iZSBib25kaW5nIC1vYm9uZDAgbW9kZT1iYWxhbmNlLWFsYiBtaWltb249MTAwCittb2Rwcm9iZSBlMTAwCitpZmNvbmZpZyBib25kMCAxOTIuMTY4LjEuMSBuZXRtYXNrIDI1NS4yNTUuMjU1LjAgdXAKK2lmZW5zbGF2ZSBib25kMCBldGgwCitpZmVuc2xhdmUgYm9uZDAgZXRoMQorCisJUmVwbGFjZSB0aGUgZXhhbXBsZSBib25kaW5nIG1vZHVsZSBwYXJhbWV0ZXJzIGFuZCBib25kMAorbmV0d29yayBjb25maWd1cmF0aW9uIChJUCBhZGRyZXNzLCBuZXRtYXNrLCBldGMpIHdpdGggdGhlIGFwcHJvcHJpYXRlCit2YWx1ZXMgZm9yIHlvdXIgY29uZmlndXJhdGlvbi4gIFRoZSBhYm92ZSBleGFtcGxlIGxvYWRzIHRoZSBib25kaW5nCittb2R1bGUgd2l0aCB0aGUgbmFtZSAiYm9uZDAsIiB0aGlzIHNpbXBsaWZpZXMgdGhlIG5hbWluZyBpZiBtdWx0aXBsZQorYm9uZGluZyBtb2R1bGVzIGFyZSBsb2FkZWQgKGVhY2ggc3VjY2Vzc2l2ZSBpbnN0YW5jZSBvZiB0aGUgbW9kdWxlIGlzCitnaXZlbiBhIGRpZmZlcmVudCBuYW1lLCBhbmQgdGhlIG1vZHVsZSBpbnN0YW5jZSBuYW1lcyBtYXRjaCB0aGUKK2JvbmRpbmcgaW50ZXJmYWNlIG5hbWVzKS4KKworCVVuZm9ydHVuYXRlbHksIHRoaXMgbWV0aG9kIHdpbGwgbm90IHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlCitpZnVwIGFuZCBpZmRvd24gc2NyaXB0cyBvbiB0aGUgYm9uZCBkZXZpY2VzLiAgVG8gcmVsb2FkIHRoZSBib25kaW5nCitjb25maWd1cmF0aW9uLCBpdCBpcyBuZWNlc3NhcnkgdG8gcnVuIHRoZSBpbml0aWFsaXphdGlvbiBzY3JpcHQsIGUuZy4sCisKKyMgL2V0Yy9pbml0LmQvYm9vdC5sb2NhbAorCisJb3IKKworIyAvZXRjL3JjLmQvcmMubG9jYWwKKworCUl0IG1heSBiZSBkZXNpcmFibGUgaW4gc3VjaCBhIGNhc2UgdG8gY3JlYXRlIGEgc2VwYXJhdGUgc2NyaXB0Cit3aGljaCBvbmx5IGluaXRpYWxpemVzIHRoZSBib25kaW5nIGNvbmZpZ3VyYXRpb24sIHRoZW4gY2FsbCB0aGF0CitzZXBhcmF0ZSBzY3JpcHQgZnJvbSB3aXRoaW4gYm9vdC5sb2NhbC4gIFRoaXMgYWxsb3dzIGZvciBib25kaW5nIHRvIGJlCitlbmFibGVkIHdpdGhvdXQgcmUtcnVubmluZyB0aGUgZW50aXJlIGdsb2JhbCBpbml0IHNjcmlwdC4KKworCVRvIHNodXQgZG93biB0aGUgYm9uZGluZyBkZXZpY2VzLCBpdCBpcyBuZWNlc3NhcnkgdG8gZmlyc3QKK21hcmsgdGhlIGJvbmRpbmcgZGV2aWNlIGl0c2VsZiBhcyBiZWluZyBkb3duLCB0aGVuIHJlbW92ZSB0aGUKK2FwcHJvcHJpYXRlIGRldmljZSBkcml2ZXIgbW9kdWxlcy4gIEZvciBvdXIgZXhhbXBsZSBhYm92ZSwgeW91IGNhbiBkbwordGhlIGZvbGxvd2luZzoKKworIyBpZmNvbmZpZyBib25kMCBkb3duCisjIHJtbW9kIGJvbmQwCisjIHJtbW9kIGUxMDAKKworCUFnYWluLCBmb3IgY29udmVuaWVuY2UsIGl0IG1heSBiZSBkZXNpcmFibGUgdG8gY3JlYXRlIGEgc2NyaXB0Cit3aXRoIHRoZXNlIGNvbW1hbmRzLgorCisKKzMuNCBDb25maWd1cmluZyBNdWx0aXBsZSBCb25kcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlUaGlzIHNlY3Rpb24gY29udGFpbnMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgbXVsdGlwbGUKK2JvbmRpbmcgZGV2aWNlcyB3aXRoIGRpZmZlcmluZyBvcHRpb25zLiAgSWYgeW91IHJlcXVpcmUgbXVsdGlwbGUKK2JvbmRpbmcgZGV2aWNlcywgYnV0IGFsbCB3aXRoIHRoZSBzYW1lIG9wdGlvbnMsIHNlZSB0aGUgIm1heF9ib25kcyIKK21vZHVsZSBwYXJhbXRlciwgZG9jdW1lbnRlZCBhYm92ZS4KKworCVRvIGNyZWF0ZSBtdWx0aXBsZSBib25kaW5nIGRldmljZXMgd2l0aCBkaWZmZXJpbmcgb3B0aW9ucywgaXQKK2lzIG5lY2Vzc2FyeSB0byBsb2FkIHRoZSBib25kaW5nIGRyaXZlciBtdWx0aXBsZSB0aW1lcy4gIE5vdGUgdGhhdAorY3VycmVudCB2ZXJzaW9ucyBvZiB0aGUgc3lzY29uZmlnIG5ldHdvcmsgaW5pdGlhbGl6YXRpb24gc2NyaXB0cworaGFuZGxlIHRoaXMgYXV0b21hdGljYWxseTsgaWYgeW91ciBkaXN0cm8gdXNlcyB0aGVzZSBzY3JpcHRzLCBubworc3BlY2lhbCBhY3Rpb24gaXMgbmVlZGVkLiAgU2VlIHRoZSBzZWN0aW9uIENvbmZpZ3VyaW5nIEJvbmRpbmcKK0RldmljZXMsIGFib3ZlLCBpZiB5b3UncmUgbm90IHN1cmUgYWJvdXQgeW91ciBuZXR3b3JrIGluaXRpYWxpemF0aW9uCitzY3JpcHRzLgorCisJVG8gbG9hZCBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIG1vZHVsZSwgaXQgaXMgbmVjZXNzYXJ5IHRvCitzcGVjaWZ5IGEgZGlmZmVyZW50IG5hbWUgZm9yIGVhY2ggaW5zdGFuY2UgKHRoZSBtb2R1bGUgbG9hZGluZyBzeXN0ZW0KK3JlcXVpcmVzIHRoYXQgZXZlcnkgbG9hZGVkIG1vZHVsZSwgZXZlbiBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIHNhbWUKK21vZHVsZSwgaGF2ZSBhIHVuaXF1ZSBuYW1lKS4gIFRoaXMgaXMgYWNjb21wbGlzaGVkIGJ5IHN1cHBseWluZworbXVsdGlwbGUgc2V0cyBvZiBib25kaW5nIG9wdGlvbnMgaW4gL2V0Yy9tb2Rwcm9iZS5jb25mLCBmb3IgZXhhbXBsZToKKwkKK2FsaWFzIGJvbmQwIGJvbmRpbmcKK29wdGlvbnMgYm9uZDAgLW8gYm9uZDAgbW9kZT1iYWxhbmNlLXJyIG1paW1vbj0xMDAKKworYWxpYXMgYm9uZDEgYm9uZGluZworb3B0aW9ucyBib25kMSAtbyBib25kMSBtb2RlPWJhbGFuY2UtYWxiIG1paW1vbj01MAorCisJd2lsbCBsb2FkIHRoZSBib25kaW5nIG1vZHVsZSB0d28gdGltZXMuICBUaGUgZmlyc3QgaW5zdGFuY2UgaXMKK25hbWVkICJib25kMCIgYW5kIGNyZWF0ZXMgdGhlIGJvbmQwIGRldmljZSBpbiBiYWxhbmNlLXJyIG1vZGUgd2l0aCBhbgorbWlpbW9uIG9mIDEwMC4gIFRoZSBzZWNvbmQgaW5zdGFuY2UgaXMgbmFtZWQgImJvbmQxIiBhbmQgY3JlYXRlcyB0aGUKK2JvbmQxIGRldmljZSBpbiBiYWxhbmNlLWFsYiBtb2RlIHdpdGggYW4gbWlpbW9uIG9mIDUwLgorCisJVGhpcyBtYXkgYmUgcmVwZWF0ZWQgYW55IG51bWJlciBvZiB0aW1lcywgc3BlY2lmeWluZyBhIG5ldyBhbmQKK3VuaXF1ZSBuYW1lIGluIHBsYWNlIG9mIGJvbmQwIG9yIGJvbmQxIGZvciBlYWNoIGluc3RhbmNlLgorCisJV2hlbiB0aGUgYXBwcm9wcmlhdGUgbW9kdWxlIHBhcmFtdGVycyBhcmUgaW4gcGxhY2UsIHRoZW4KK2NvbmZpZ3VyZSBib25kaW5nIGFjY29yZGluZyB0byB0aGUgaW5zdHJ1Y3Rpb25zIGZvciB5b3VyIGRpc3Ryby4KKworNS4gUXVlcnlpbmcgQm9uZGluZyBDb25maWd1cmF0aW9uIAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzUuMSBCb25kaW5nIENvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCUVhY2ggYm9uZGluZyBkZXZpY2UgaGFzIGEgcmVhZC1vbmx5IGZpbGUgcmVzaWRpbmcgaW4gdGhlCisvcHJvYy9uZXQvYm9uZGluZyBkaXJlY3RvcnkuICBUaGUgZmlsZSBjb250ZW50cyBpbmNsdWRlIGluZm9ybWF0aW9uCithYm91dCB0aGUgYm9uZGluZyBjb25maWd1cmF0aW9uLCBvcHRpb25zIGFuZCBzdGF0ZSBvZiBlYWNoIHNsYXZlLgorCisJRm9yIGV4YW1wbGUsIHRoZSBjb250ZW50cyBvZiAvcHJvYy9uZXQvYm9uZGluZy9ib25kMCBhZnRlciB0aGUKK2RyaXZlciBpcyBsb2FkZWQgd2l0aCBwYXJhbWV0ZXJzIG9mIG1vZGU9MCBhbmQgbWlpbW9uPTEwMDAgaXMKK2dlbmVyYWxseSBhcyBmb2xsb3dzOgorCisJRXRoZXJuZXQgQ2hhbm5lbCBCb25kaW5nIERyaXZlcjogMi42LjEgKE9jdG9iZXIgMjksIDIwMDQpCisgICAgICAgIEJvbmRpbmcgTW9kZTogbG9hZCBiYWxhbmNpbmcgKHJvdW5kLXJvYmluKQorICAgICAgICBDdXJyZW50bHkgQWN0aXZlIFNsYXZlOiBldGgwCisgICAgICAgIE1JSSBTdGF0dXM6IHVwCisgICAgICAgIE1JSSBQb2xsaW5nIEludGVydmFsIChtcyk6IDEwMDAKKyAgICAgICAgVXAgRGVsYXkgKG1zKTogMAorICAgICAgICBEb3duIERlbGF5IChtcyk6IDAKKworICAgICAgICBTbGF2ZSBJbnRlcmZhY2U6IGV0aDEKKyAgICAgICAgTUlJIFN0YXR1czogdXAKKyAgICAgICAgTGluayBGYWlsdXJlIENvdW50OiAxCisKKyAgICAgICAgU2xhdmUgSW50ZXJmYWNlOiBldGgwCisgICAgICAgIE1JSSBTdGF0dXM6IHVwCisgICAgICAgIExpbmsgRmFpbHVyZSBDb3VudDogMQorCisJVGhlIHByZWNpc2UgZm9ybWF0IGFuZCBjb250ZW50cyB3aWxsIGNoYW5nZSBkZXBlbmRpbmcgdXBvbiB0aGUKK2JvbmRpbmcgY29uZmlndXJhdGlvbiwgc3RhdGUsIGFuZCB2ZXJzaW9uIG9mIHRoZSBib25kaW5nIGRyaXZlci4KKworNS4yIE5ldHdvcmsgY29uZmlndXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJVGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBjYW4gYmUgaW5zcGVjdGVkIHVzaW5nIHRoZSBpZmNvbmZpZworY29tbWFuZC4gIEJvbmRpbmcgZGV2aWNlcyB3aWxsIGhhdmUgdGhlIE1BU1RFUiBmbGFnIHNldDsgQm9uZGluZyBzbGF2ZQorZGV2aWNlcyB3aWxsIGhhdmUgdGhlIFNMQVZFIGZsYWcgc2V0LiAgVGhlIGlmY29uZmlnIG91dHB1dCBkb2VzIG5vdAorY29udGFpbiBpbmZvcm1hdGlvbiBvbiB3aGljaCBzbGF2ZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCB3aGljaCBtYXN0ZXJzLgorCisJSW4gdGhlIGV4YW1wbGUgYmVsb3csIHRoZSBib25kMCBpbnRlcmZhY2UgaXMgdGhlIG1hc3RlcgorKE1BU1RFUikgd2hpbGUgZXRoMCBhbmQgZXRoMSBhcmUgc2xhdmVzIChTTEFWRSkuIE5vdGljZSBhbGwgc2xhdmVzIG9mCitib25kMCBoYXZlIHRoZSBzYW1lIE1BQyBhZGRyZXNzIChIV2FkZHIpIGFzIGJvbmQwIGZvciBhbGwgbW9kZXMgZXhjZXB0CitUTEIgYW5kIEFMQiB0aGF0IHJlcXVpcmUgYSB1bmlxdWUgTUFDIGFkZHJlc3MgZm9yIGVhY2ggc2xhdmUuCisKKyMgL3NiaW4vaWZjb25maWcKK2JvbmQwICAgICBMaW5rIGVuY2FwOkV0aGVybmV0ICBIV2FkZHIgMDA6QzA6RjA6MUY6Mzc6QjQKKyAgICAgICAgICBpbmV0IGFkZHI6WFhYLlhYWC5YWFguWVlZICBCY2FzdDpYWFguWFhYLlhYWC4yNTUgIE1hc2s6MjU1LjI1NS4yNTIuMAorICAgICAgICAgIFVQIEJST0FEQ0FTVCBSVU5OSU5HIE1BU1RFUiBNVUxUSUNBU1QgIE1UVToxNTAwICBNZXRyaWM6MQorICAgICAgICAgIFJYIHBhY2tldHM6NzIyNDc5NCBlcnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1bnM6MCBmcmFtZTowCisgICAgICAgICAgVFggcGFja2V0czozMjg2NjQ3IGVycm9yczoxIGRyb3BwZWQ6MCBvdmVycnVuczoxIGNhcnJpZXI6MAorICAgICAgICAgIGNvbGxpc2lvbnM6MCB0eHF1ZXVlbGVuOjAKKworZXRoMCAgICAgIExpbmsgZW5jYXA6RXRoZXJuZXQgIEhXYWRkciAwMDpDMDpGMDoxRjozNzpCNAorICAgICAgICAgIGluZXQgYWRkcjpYWFguWFhYLlhYWC5ZWVkgIEJjYXN0OlhYWC5YWFguWFhYLjI1NSAgTWFzazoyNTUuMjU1LjI1Mi4wCisgICAgICAgICAgVVAgQlJPQURDQVNUIFJVTk5JTkcgU0xBVkUgTVVMVElDQVNUICBNVFU6MTUwMCAgTWV0cmljOjEKKyAgICAgICAgICBSWCBwYWNrZXRzOjM1NzMwMjUgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAgZnJhbWU6MAorICAgICAgICAgIFRYIHBhY2tldHM6MTY0MzE2NyBlcnJvcnM6MSBkcm9wcGVkOjAgb3ZlcnJ1bnM6MSBjYXJyaWVyOjAKKyAgICAgICAgICBjb2xsaXNpb25zOjAgdHhxdWV1ZWxlbjoxMDAKKyAgICAgICAgICBJbnRlcnJ1cHQ6MTAgQmFzZSBhZGRyZXNzOjB4MTA4MAorCitldGgxICAgICAgTGluayBlbmNhcDpFdGhlcm5ldCAgSFdhZGRyIDAwOkMwOkYwOjFGOjM3OkI0CisgICAgICAgICAgaW5ldCBhZGRyOlhYWC5YWFguWFhYLllZWSAgQmNhc3Q6WFhYLlhYWC5YWFguMjU1ICBNYXNrOjI1NS4yNTUuMjUyLjAKKyAgICAgICAgICBVUCBCUk9BRENBU1QgUlVOTklORyBTTEFWRSBNVUxUSUNBU1QgIE1UVToxNTAwICBNZXRyaWM6MQorICAgICAgICAgIFJYIHBhY2tldHM6MzY1MTc2OSBlcnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1bnM6MCBmcmFtZTowCisgICAgICAgICAgVFggcGFja2V0czoxNjQzNDgwIGVycm9yczowIGRyb3BwZWQ6MCBvdmVycnVuczowIGNhcnJpZXI6MAorICAgICAgICAgIGNvbGxpc2lvbnM6MCB0eHF1ZXVlbGVuOjEwMAorICAgICAgICAgIEludGVycnVwdDo5IEJhc2UgYWRkcmVzczoweDE0MDAKKworNi4gU3dpdGNoIENvbmZpZ3VyYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09CisKKwlGb3IgdGhpcyBzZWN0aW9uLCAic3dpdGNoIiByZWZlcnMgdG8gd2hhdGV2ZXIgc3lzdGVtIHRoZQorYm9uZGVkIGRldmljZXMgYXJlIGRpcmVjdGx5IGNvbm5lY3RlZCB0byAoaS5lLiwgd2hlcmUgdGhlIG90aGVyIGVuZCBvZgordGhlIGNhYmxlIHBsdWdzIGludG8pLiAgVGhpcyBtYXkgYmUgYW4gYWN0dWFsIGRlZGljYXRlZCBzd2l0Y2ggZGV2aWNlLAorb3IgaXQgbWF5IGJlIGFub3RoZXIgcmVndWxhciBzeXN0ZW0gKGUuZy4sIGFub3RoZXIgY29tcHV0ZXIgcnVubmluZworTGludXgpLAorCisJVGhlIGFjdGl2ZS1iYWNrdXAsIGJhbGFuY2UtdGxiIGFuZCBiYWxhbmNlLWFsYiBtb2RlcyBkbyBub3QKK3JlcXVpcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHN3aXRjaC4KKworCVRoZSA4MDIuM2FkIG1vZGUgcmVxdWlyZXMgdGhhdCB0aGUgc3dpdGNoIGhhdmUgdGhlIGFwcHJvcHJpYXRlCitwb3J0cyBjb25maWd1cmVkIGFzIGFuIDgwMi4zYWQgYWdncmVnYXRpb24uICBUaGUgcHJlY2lzZSBtZXRob2QgdXNlZAordG8gY29uZmlndXJlIHRoaXMgdmFyaWVzIGZyb20gc3dpdGNoIHRvIHN3aXRjaCwgYnV0LCBmb3IgZXhhbXBsZSwgYQorQ2lzY28gMzU1MCBzZXJpZXMgc3dpdGNoIHJlcXVpcmVzIHRoYXQgdGhlIGFwcHJvcHJpYXRlIHBvcnRzIGZpcnN0IGJlCitncm91cGVkIHRvZ2V0aGVyIGluIGEgc2luZ2xlIGV0aGVyY2hhbm5lbCBpbnN0YW5jZSwgdGhlbiB0aGF0CitldGhlcmNoYW5uZWwgaXMgc2V0IHRvIG1vZGUgImxhY3AiIHRvIGVuYWJsZSA4MDIuM2FkIChpbnN0ZWFkIG9mCitzdGFuZGFyZCBFdGhlckNoYW5uZWwpLgorCisJVGhlIGJhbGFuY2UtcnIsIGJhbGFuY2UteG9yIGFuZCBicm9hZGNhc3QgbW9kZXMgZ2VuZXJhbGx5CityZXF1aXJlIHRoYXQgdGhlIHN3aXRjaCBoYXZlIHRoZSBhcHByb3ByaWF0ZSBwb3J0cyBncm91cGVkIHRvZ2V0aGVyLgorVGhlIG5vbWVuY2xhdHVyZSBmb3Igc3VjaCBhIGdyb3VwIGRpZmZlcnMgYmV0d2VlbiBzd2l0Y2hlcywgaXQgbWF5IGJlCitjYWxsZWQgYW4gImV0aGVyY2hhbm5lbCIgKGFzIGluIHRoZSBDaXNjbyBleGFtcGxlLCBhYm92ZSksIGEgInRydW5rCitncm91cCIgb3Igc29tZSBvdGhlciBzaW1pbGFyIHZhcmlhdGlvbi4gIEZvciB0aGVzZSBtb2RlcywgZWFjaCBzd2l0Y2gKK3dpbGwgYWxzbyBoYXZlIGl0cyBvd24gY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgc3dpdGNoJ3MgdHJhbnNtaXQKK3BvbGljeSB0byB0aGUgYm9uZC4gIFR5cGljYWwgY2hvaWNlcyBpbmNsdWRlIFhPUiBvZiBlaXRoZXIgdGhlIE1BQyBvcgorSVAgYWRkcmVzc2VzLiAgVGhlIHRyYW5zbWl0IHBvbGljeSBvZiB0aGUgdHdvIHBlZXJzIGRvZXMgbm90IG5lZWQgdG8KK21hdGNoLiAgRm9yIHRoZXNlIHRocmVlIG1vZGVzLCB0aGUgYm9uZGluZyBtb2RlIHJlYWxseSBzZWxlY3RzIGEKK3RyYW5zbWl0IHBvbGljeSBmb3IgYW4gRXRoZXJDaGFubmVsIGdyb3VwOyBhbGwgdGhyZWUgd2lsbCBpbnRlcm9wZXJhdGUKK3dpdGggYW5vdGhlciBFdGhlckNoYW5uZWwgZ3JvdXAuCisKKworNy4gODAyLjFxIFZMQU4gU3VwcG9ydAorPT09PT09PT09PT09PT09PT09PT09PQorCisJSXQgaXMgcG9zc2libGUgdG8gY29uZmlndXJlIFZMQU4gZGV2aWNlcyBvdmVyIGEgYm9uZCBpbnRlcmZhY2UKK3VzaW5nIHRoZSA4MDIxcSBkcml2ZXIuICBIb3dldmVyLCBvbmx5IHBhY2tldHMgY29taW5nIGZyb20gdGhlIDgwMjFxCitkcml2ZXIgYW5kIHBhc3NpbmcgdGhyb3VnaCBib25kaW5nIHdpbGwgYmUgdGFnZ2VkIGJ5IGRlZmF1bHQuICBTZWxmCitnZW5lcmF0ZWQgcGFja2V0cywgZm9yIGV4YW1wbGUsIGJvbmRpbmcncyBsZWFybmluZyBwYWNrZXRzIG9yIEFSUAorcGFja2V0cyBnZW5lcmF0ZWQgYnkgZWl0aGVyIEFMQiBtb2RlIG9yIHRoZSBBUlAgbW9uaXRvciBtZWNoYW5pc20sIGFyZQordGFnZ2VkIGludGVybmFsbHkgYnkgYm9uZGluZyBpdHNlbGYuICBBcyBhIHJlc3VsdCwgYm9uZGluZyBtdXN0CisibGVhcm4iIHRoZSBWTEFOIElEcyBjb25maWd1cmVkIGFib3ZlIGl0LCBhbmQgdXNlIHRob3NlIElEcyB0byB0YWcKK3NlbGYgZ2VuZXJhdGVkIHBhY2tldHMuCisKKwlGb3IgcmVhc29ucyBvZiBzaW1wbGljaXR5LCBhbmQgdG8gc3VwcG9ydCB0aGUgdXNlIG9mIGFkYXB0ZXJzCit0aGF0IGNhbiBkbyBWTEFOIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBvZmZsb2RpbmcsIHRoZSBib25kaW5nCitpbnRlcmZhY2UgZGVjbGFyZXMgaXRzZWxmIGFzIGZ1bGx5IGhhcmR3YXJlIG9mZmxvYWluZyBjYXBhYmxlLCBpdCBnZXRzCit0aGUgYWRkX3ZpZC9raWxsX3ZpZCBub3RpZmljYXRpb25zIHRvIGdhdGhlciB0aGUgbmVjZXNzYXJ5CitpbmZvcm1hdGlvbiwgYW5kIGl0IHByb3BhZ2F0ZXMgdGhvc2UgYWN0aW9ucyB0byB0aGUgc2xhdmVzLiAgSW4gY2FzZQorb2YgbWl4ZWQgYWRhcHRlciB0eXBlcywgaGFyZHdhcmUgYWNjZWxlcmF0ZWQgdGFnZ2VkIHBhY2tldHMgdGhhdAorc2hvdWxkIGdvIHRocm91Z2ggYW4gYWRhcHRlciB0aGF0IGlzIG5vdCBvZmZsb2FkaW5nIGNhcGFibGUgYXJlCisidW4tYWNjZWxlcmF0ZWQiIGJ5IHRoZSBib25kaW5nIGRyaXZlciBzbyB0aGUgVkxBTiB0YWcgc2l0cyBpbiB0aGUKK3JlZ3VsYXIgbG9jYXRpb24uCisKKwlWTEFOIGludGVyZmFjZXMgKm11c3QqIGJlIGFkZGVkIG9uIHRvcCBvZiBhIGJvbmRpbmcgaW50ZXJmYWNlCitvbmx5IGFmdGVyIGVuc2xhdmluZyBhdCBsZWFzdCBvbmUgc2xhdmUuICBUaGUgYm9uZGluZyBpbnRlcmZhY2UgaGFzIGEKK2hhcmR3YXJlIGFkZHJlc3Mgb2YgMDA6MDA6MDA6MDA6MDA6MDAgdW50aWwgdGhlIGZpcnN0IHNsYXZlIGlzIGFkZGVkLgorSWYgdGhlIFZMQU4gaW50ZXJmYWNlIGlzIGNyZWF0ZWQgcHJpb3IgdG8gdGhlIGZpcnN0IGVuc2xhdmVtZW50LCBpdAord291bGQgcGljayB1cCB0aGUgYWxsLXplcm9lcyBoYXJkd2FyZSBhZGRyZXNzLiAgT25jZSB0aGUgZmlyc3Qgc2xhdmUKK2lzIGF0dGFjaGVkIHRvIHRoZSBib25kLCB0aGUgYm9uZCBkZXZpY2UgaXRzZWxmIHdpbGwgcGljayB1cCB0aGUKK3NsYXZlJ3MgaGFyZHdhcmUgYWRkcmVzcywgd2hpY2ggaXMgdGhlbiBhdmFpbGFibGUgZm9yIHRoZSBWTEFOIGRldmljZS4KKworCUFsc28sIGJlIGF3YXJlIHRoYXQgYSBzaW1pbGFyIHByb2JsZW0gY2FuIG9jY3VyIGlmIGFsbCBzbGF2ZXMKK2FyZSByZWxlYXNlZCBmcm9tIGEgYm9uZCB0aGF0IHN0aWxsIGhhcyBvbmUgb3IgbW9yZSBWTEFOIGludGVyZmFjZXMgb24KK3RvcCBvZiBpdC4gIFdoZW4gYSBuZXcgc2xhdmUgaXMgYWRkZWQsIHRoZSBib25kaW5nIGludGVyZmFjZSB3aWxsCitvYnRhaW4gaXRzIGhhcmR3YXJlIGFkZHJlc3MgZnJvbSB0aGUgZmlyc3Qgc2xhdmUsIHdoaWNoIG1pZ2h0IG5vdAorbWF0Y2ggdGhlIGhhcmR3YXJlIGFkZHJlc3Mgb2YgdGhlIFZMQU4gaW50ZXJmYWNlcyAod2hpY2ggd2FzCit1bHRpbWF0ZWx5IGNvcGllZCBmcm9tIGFuIGVhcmxpZXIgc2xhdmUpLgorCisJVGhlcmUgYXJlIHR3byBtZXRob2RzIHRvIGluc3VyZSB0aGF0IHRoZSBWTEFOIGRldmljZSBvcGVyYXRlcword2l0aCB0aGUgY29ycmVjdCBoYXJkd2FyZSBhZGRyZXNzIGlmIGFsbCBzbGF2ZXMgYXJlIHJlbW92ZWQgZnJvbSBhCitib25kIGludGVyZmFjZToKKworCTEuIFJlbW92ZSBhbGwgVkxBTiBpbnRlcmZhY2VzIHRoZW4gcmVjcmVhdGUgdGhlbQorCisJMi4gU2V0IHRoZSBib25kaW5nIGludGVyZmFjZSdzIGhhcmR3YXJlIGFkZHJlc3Mgc28gdGhhdCBpdAorbWF0Y2hlcyB0aGUgaGFyZHdhcmUgYWRkcmVzcyBvZiB0aGUgVkxBTiBpbnRlcmZhY2VzLgorCisJTm90ZSB0aGF0IGNoYW5naW5nIGEgVkxBTiBpbnRlcmZhY2UncyBIVyBhZGRyZXNzIHdvdWxkIHNldCB0aGUKK3VuZGVybHlpbmcgZGV2aWNlIC0tIGkuZS4gdGhlIGJvbmRpbmcgaW50ZXJmYWNlIC0tIHRvIHByb21pc2NvdW9zCittb2RlLCB3aGljaCBtaWdodCBub3QgYmUgd2hhdCB5b3Ugd2FudC4KKworCis4LiBMaW5rIE1vbml0b3JpbmcKKz09PT09PT09PT09PT09PT09PQorCisJVGhlIGJvbmRpbmcgZHJpdmVyIGF0IHByZXNlbnQgc3VwcG9ydHMgdHdvIHNjaGVtZXMgZm9yCittb25pdG9yaW5nIGEgc2xhdmUgZGV2aWNlJ3MgbGluayBzdGF0ZTogdGhlIEFSUCBtb25pdG9yIGFuZCB0aGUgTUlJCittb25pdG9yLgorCisJQXQgdGhlIHByZXNlbnQgdGltZSwgZHVlIHRvIGltcGxlbWVudGF0aW9uIHJlc3RyaWN0aW9ucyBpbiB0aGUKK2JvbmRpbmcgZHJpdmVyIGl0c2VsZiwgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGVuYWJsZSBib3RoIEFSUCBhbmQgTUlJCittb25pdG9yaW5nIHNpbXVsdGFuZW91c2x5LgorCis4LjEgQVJQIE1vbml0b3IgT3BlcmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlUaGUgQVJQIG1vbml0b3Igb3BlcmF0ZXMgYXMgaXRzIG5hbWUgc3VnZ2VzdHM6IGl0IHNlbmRzIEFSUAorcXVlcmllcyB0byBvbmUgb3IgbW9yZSBkZXNpZ25hdGVkIHBlZXIgc3lzdGVtcyBvbiB0aGUgbmV0d29yaywgYW5kCit1c2VzIHRoZSByZXNwb25zZSBhcyBhbiBpbmRpY2F0aW9uIHRoYXQgdGhlIGxpbmsgaXMgb3BlcmF0aW5nLiAgVGhpcworZ2l2ZXMgc29tZSBhc3N1cmFuY2UgdGhhdCB0cmFmZmljIGlzIGFjdHVhbGx5IGZsb3dpbmcgdG8gYW5kIGZyb20gb25lCitvciBtb3JlIHBlZXJzIG9uIHRoZSBsb2NhbCBuZXR3b3JrLgorCisJVGhlIEFSUCBtb25pdG9yIHJlbGllcyBvbiB0aGUgZGV2aWNlIGRyaXZlciBpdHNlbGYgdG8gdmVyaWZ5Cit0aGF0IHRyYWZmaWMgaXMgZmxvd2luZy4gIEluIHBhcnRpY3VsYXIsIHRoZSBkcml2ZXIgbXVzdCBrZWVwIHVwIHRvCitkYXRlIHRoZSBsYXN0IHJlY2VpdmUgdGltZSwgZGV2LT5sYXN0X3J4LCBhbmQgdHJhbnNtaXQgc3RhcnQgdGltZSwKK2Rldi0+dHJhbnNfc3RhcnQuICBJZiB0aGVzZSBhcmUgbm90IHVwZGF0ZWQgYnkgdGhlIGRyaXZlciwgdGhlbiB0aGUKK0FSUCBtb25pdG9yIHdpbGwgaW1tZWRpYXRlbHkgZmFpbCBhbnkgc2xhdmVzIHVzaW5nIHRoYXQgZHJpdmVyLCBhbmQKK3Rob3NlIHNsYXZlcyB3aWxsIHN0YXkgZG93bi4gIElmIG5ldHdvcmtpbmcgbW9uaXRvcmluZyAodGNwZHVtcCwgZXRjKQorc2hvd3MgdGhlIEFSUCByZXF1ZXN0cyBhbmQgcmVwbGllcyBvbiB0aGUgbmV0d29yaywgdGhlbiBpdCBtYXkgYmUgdGhhdAoreW91ciBkZXZpY2UgZHJpdmVyIGlzIG5vdCB1cGRhdGluZyBsYXN0X3J4IGFuZCB0cmFuc19zdGFydC4KKworOC4yIENvbmZpZ3VyaW5nIE11bHRpcGxlIEFSUCBUYXJnZXRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCVdoaWxlIEFSUCBtb25pdG9yaW5nIGNhbiBiZSBkb25lIHdpdGgganVzdCBvbmUgdGFyZ2V0LCBpdCBjYW4KK2JlIHVzZWZ1bCBpbiBhIEhpZ2ggQXZhaWxhYmlsaXR5IHNldHVwIHRvIGhhdmUgc2V2ZXJhbCB0YXJnZXRzIHRvCittb25pdG9yLiAgSW4gdGhlIGNhc2Ugb2YganVzdCBvbmUgdGFyZ2V0LCB0aGUgdGFyZ2V0IGl0c2VsZiBtYXkgZ28KK2Rvd24gb3IgaGF2ZSBhIHByb2JsZW0gbWFraW5nIGl0IHVucmVzcG9uc2l2ZSB0byBBUlAgcmVxdWVzdHMuICBIYXZpbmcKK2FuIGFkZGl0aW9uYWwgdGFyZ2V0IChvciBzZXZlcmFsKSBpbmNyZWFzZXMgdGhlIHJlbGlhYmlsaXR5IG9mIHRoZSBBUlAKK21vbml0b3JpbmcuCisKKwlNdWx0aXBsZSBBUlAgdGFyZ2V0cyBtdXN0IGJlIHNlcGVyYXRlZCBieSBjb21tYXMgYXMgZm9sbG93czoKKworIyBleGFtcGxlIG9wdGlvbnMgZm9yIEFSUCBtb25pdG9yaW5nIHdpdGggdGhyZWUgdGFyZ2V0cworYWxpYXMgYm9uZDAgYm9uZGluZworb3B0aW9ucyBib25kMCBhcnBfaW50ZXJ2YWw9NjAgYXJwX2lwX3RhcmdldD0xOTIuMTY4LjAuMSwxOTIuMTY4LjAuMywxOTIuMTY4LjAuOQorCisJRm9yIGp1c3QgYSBzaW5nbGUgdGFyZ2V0IHRoZSBvcHRpb25zIHdvdWxkIHJlc2VtYmxlOgorCisjIGV4YW1wbGUgb3B0aW9ucyBmb3IgQVJQIG1vbml0b3Jpbmcgd2l0aCBvbmUgdGFyZ2V0CithbGlhcyBib25kMCBib25kaW5nCitvcHRpb25zIGJvbmQwIGFycF9pbnRlcnZhbD02MCBhcnBfaXBfdGFyZ2V0PTE5Mi4xNjguMC4xMDAKKworCis4LjMgTUlJIE1vbml0b3IgT3BlcmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlUaGUgTUlJIG1vbml0b3IgbW9uaXRvcnMgb25seSB0aGUgY2FycmllciBzdGF0ZSBvZiB0aGUgbG9jYWwKK25ldHdvcmsgaW50ZXJmYWNlLiAgSXQgYWNjb21wbGlzaGVzIHRoaXMgaW4gb25lIG9mIHRocmVlIHdheXM6IGJ5CitkZXBlbmRpbmcgdXBvbiB0aGUgZGV2aWNlIGRyaXZlciB0byBtYWludGFpbiBpdHMgY2FycmllciBzdGF0ZSwgYnkKK3F1ZXJ5aW5nIHRoZSBkZXZpY2UncyBNSUkgcmVnaXN0ZXJzLCBvciBieSBtYWtpbmcgYW4gZXRodG9vbCBxdWVyeSB0bwordGhlIGRldmljZS4KKworCUlmIHRoZSB1c2VfY2FycmllciBtb2R1bGUgcGFyYW1ldGVyIGlzIDEgKHRoZSBkZWZhdWx0IHZhbHVlKSwKK3RoZW4gdGhlIE1JSSBtb25pdG9yIHdpbGwgcmVseSBvbiB0aGUgZHJpdmVyIGZvciBjYXJyaWVyIHN0YXRlCitpbmZvcm1hdGlvbiAodmlhIHRoZSBuZXRpZl9jYXJyaWVyIHN1YnN5c3RlbSkuICBBcyBleHBsYWluZWQgaW4gdGhlCit1c2VfY2FycmllciBwYXJhbWV0ZXIgaW5mb3JtYXRpb24sIGFib3ZlLCBpZiB0aGUgTUlJIG1vbml0b3IgZmFpbHMgdG8KK2RldGVjdCBjYXJyaWVyIGxvc3Mgb24gdGhlIGRldmljZSAoZS5nLiwgd2hlbiB0aGUgY2FibGUgaXMgcGh5c2ljYWxseQorZGlzY29ubmVjdGVkKSwgaXQgbWF5IGJlIHRoYXQgdGhlIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0CituZXRpZl9jYXJyaWVyLgorCisJSWYgdXNlX2NhcnJpZXIgaXMgMCwgdGhlbiB0aGUgTUlJIG1vbml0b3Igd2lsbCBmaXJzdCBxdWVyeSB0aGUKK2RldmljZSdzICh2aWEgaW9jdGwpIE1JSSByZWdpc3RlcnMgYW5kIGNoZWNrIHRoZSBsaW5rIHN0YXRlLiAgSWYgdGhhdAorcmVxdWVzdCBmYWlscyAobm90IGp1c3QgdGhhdCBpdCByZXR1cm5zIGNhcnJpZXIgZG93biksIHRoZW4gdGhlIE1JSQorbW9uaXRvciB3aWxsIG1ha2UgYW4gZXRodG9vbCBFVEhPT0xfR0xJTksgcmVxdWVzdCB0byBhdHRlbXB0IHRvIG9idGFpbgordGhlIHNhbWUgaW5mb3JtYXRpb24uICBJZiBib3RoIG1ldGhvZHMgZmFpbCAoaS5lLiwgdGhlIGRyaXZlciBlaXRoZXIKK2RvZXMgbm90IHN1cHBvcnQgb3IgaGFkIHNvbWUgZXJyb3IgaW4gcHJvY2Vzc2luZyBib3RoIHRoZSBNSUkgcmVnaXN0ZXIKK2FuZCBldGh0b29sIHJlcXVlc3RzKSwgdGhlbiB0aGUgTUlJIG1vbml0b3Igd2lsbCBhc3N1bWUgdGhlIGxpbmsgaXMKK3VwLgorCis5LiBQb3RlbnRpYWwgU291cmNlcyBvZiBUcm91YmxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzkuMSBBZHZlbnR1cmVzIGluIFJvdXRpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCVdoZW4gYm9uZGluZyBpcyBjb25maWd1cmVkLCBpdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgc2xhdmUKK2RldmljZXMgbm90IGhhdmUgcm91dGVzIHRoYXQgc3VwZXJjZWRlIHJvdXRlcyBvZiB0aGUgbWFzdGVyIChvciwKK2dlbmVyYWxseSwgbm90IGhhdmUgcm91dGVzIGF0IGFsbCkuICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB0aGUgYm9uZGluZworZGV2aWNlIGJvbmQwIGhhcyB0d28gc2xhdmVzLCBldGgwIGFuZCBldGgxLCBhbmQgdGhlIHJvdXRpbmcgdGFibGUgaXMKK2FzIGZvbGxvd3M6CisKK0tlcm5lbCBJUCByb3V0aW5nIHRhYmxlCitEZXN0aW5hdGlvbiAgICAgR2F0ZXdheSAgICAgICAgIEdlbm1hc2sgICAgICAgICBGbGFncyAgIE1TUyBXaW5kb3cgIGlydHQgSWZhY2UKKzEwLjAuMC4wICAgICAgICAwLjAuMC4wICAgICAgICAgMjU1LjI1NS4wLjAgICAgIFUgICAgICAgIDQwIDAgICAgICAgICAgMCBldGgwCisxMC4wLjAuMCAgICAgICAgMC4wLjAuMCAgICAgICAgIDI1NS4yNTUuMC4wICAgICBVICAgICAgICA0MCAwICAgICAgICAgIDAgZXRoMQorMTAuMC4wLjAgICAgICAgIDAuMC4wLjAgICAgICAgICAyNTUuMjU1LjAuMCAgICAgVSAgICAgICAgNDAgMCAgICAgICAgICAwIGJvbmQwCisxMjcuMC4wLjAgICAgICAgMC4wLjAuMCAgICAgICAgIDI1NS4wLjAuMCAgICAgICBVICAgICAgICA0MCAwICAgICAgICAgIDAgbG8KKworCVRoaXMgcm91dGluZyBjb25maWd1cmF0aW9uIHdpbGwgbGlrZWx5IHN0aWxsIHVwZGF0ZSB0aGUKK3JlY2VpdmUvdHJhbnNtaXQgdGltZXMgaW4gdGhlIGRyaXZlciAobmVlZGVkIGJ5IHRoZSBBUlAgbW9uaXRvciksIGJ1dAorbWF5IGJ5cGFzcyB0aGUgYm9uZGluZyBkcml2ZXIgKGJlY2F1c2Ugb3V0Z29pbmcgdHJhZmZpYyB0bywgaW4gdGhpcworY2FzZSwgYW5vdGhlciBob3N0IG9uIG5ldHdvcmsgMTAgd291bGQgdXNlIGV0aDAgb3IgZXRoMSBiZWZvcmUgYm9uZDApLgorCisJVGhlIEFSUCBtb25pdG9yIChhbmQgQVJQIGl0c2VsZikgbWF5IGJlY29tZSBjb25mdXNlZCBieSB0aGlzCitjb25maWd1cmF0aW9uLCBiZWNhdXNlIEFSUCByZXF1ZXN0cyAoZ2VuZXJhdGVkIGJ5IHRoZSBBUlAgbW9uaXRvcikKK3dpbGwgYmUgc2VudCBvbiBvbmUgaW50ZXJmYWNlIChib25kMCksIGJ1dCB0aGUgY29ycmVzcG9uZGluZyByZXBseQord2lsbCBhcnJpdmUgb24gYSBkaWZmZXJlbnQgaW50ZXJmYWNlIChldGgwKS4gIFRoaXMgcmVwbHkgbG9va3MgdG8gQVJQCithcyBhbiB1bnNvbGljaXRlZCBBUlAgcmVwbHkgKGJlY2F1c2UgQVJQIG1hdGNoZXMgcmVwbGllcyBvbiBhbgoraW50ZXJmYWNlIGJhc2lzKSwgYW5kIGlzIGRpc2NhcmRlZC4gIFRoZSBNSUkgbW9uaXRvciBpcyBub3QgYWZmZWN0ZWQKK2J5IHRoZSBzdGF0ZSBvZiB0aGUgcm91dGluZyB0YWJsZS4KKworCVRoZSBzb2x1dGlvbiBoZXJlIGlzIHNpbXBseSB0byBpbnN1cmUgdGhhdCBzbGF2ZXMgZG8gbm90IGhhdmUKK3JvdXRlcyBvZiB0aGVpciBvd24sIGFuZCBpZiBmb3Igc29tZSByZWFzb24gdGhleSBtdXN0LCB0aG9zZSByb3V0ZXMgZG8KK25vdCBzdXBlcmNlZGUgcm91dGVzIG9mIHRoZWlyIG1hc3Rlci4gIFRoaXMgc2hvdWxkIGdlbmVyYWxseSBiZSB0aGUKK2Nhc2UsIGJ1dCB1bnVzdWFsIGNvbmZpZ3VyYXRpb25zIG9yIGVycmFudCBtYW51YWwgb3IgYXV0b21hdGljIHN0YXRpYworcm91dGUgYWRkaXRpb25zIG1heSBjYXVzZSB0cm91YmxlLgorCis5LjIgRXRoZXJuZXQgRGV2aWNlIFJlbmFtaW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlPbiBzeXN0ZW1zIHdpdGggbmV0d29yayBjb25maWd1cmF0aW9uIHNjcmlwdHMgdGhhdCBkbyBub3QKK2Fzc29jaWF0ZSBwaHlzaWNhbCBkZXZpY2VzIGRpcmVjdGx5IHdpdGggbmV0d29yayBpbnRlcmZhY2UgbmFtZXMgKHNvCit0aGF0IHRoZSBzYW1lIHBoeXNpY2FsIGRldmljZSBhbHdheXMgaGFzIHRoZSBzYW1lICJldGhYIiBuYW1lKSwgaXQgbWF5CitiZSBuZWNlc3NhcnkgdG8gYWRkIHNvbWUgc3BlY2lhbCBsb2dpYyB0byBlaXRoZXIgL2V0Yy9tb2R1bGVzLmNvbmYgb3IKKy9ldGMvbW9kcHJvYmUuY29uZiAoZGVwZW5kaW5nIHVwb24gd2hpY2ggaXMgaW5zdGFsbGVkIG9uIHRoZSBzeXN0ZW0pLgorCisJRm9yIGV4YW1wbGUsIGdpdmVuIGEgbW9kdWxlcy5jb25mIGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZzoKKworYWxpYXMgYm9uZDAgYm9uZGluZworb3B0aW9ucyBib25kMCBtb2RlPXNvbWUtbW9kZSBtaWltb249NTAKK2FsaWFzIGV0aDAgdGczCithbGlhcyBldGgxIHRnMworYWxpYXMgZXRoMiBlMTAwMAorYWxpYXMgZXRoMyBlMTAwMAorCisJSWYgbmVpdGhlciBldGgwIGFuZCBldGgxIGFyZSBzbGF2ZXMgdG8gYm9uZDAsIHRoZW4gd2hlbiB0aGUKK2JvbmQwIGludGVyZmFjZSBjb21lcyB1cCwgdGhlIGRldmljZXMgbWF5IGVuZCB1cCByZW9yZGVyZWQuICBUaGlzCitoYXBwZW5zIGJlY2F1c2UgYm9uZGluZyBpcyBsb2FkZWQgZmlyc3QsIHRoZW4gaXRzIHNsYXZlIGRldmljZSdzCitkcml2ZXJzIGFyZSBsb2FkZWQgbmV4dC4gIFNpbmNlIG5vIG90aGVyIGRyaXZlcnMgaGF2ZSBiZWVuIGxvYWRlZCwKK3doZW4gdGhlIGUxMDAwIGRyaXZlciBsb2FkcywgaXQgd2lsbCByZWNlaXZlIGV0aDAgYW5kIGV0aDEgZm9yIGl0cworZGV2aWNlcywgYnV0IHRoZSBib25kaW5nIGNvbmZpZ3VyYXRpb24gdHJpZXMgdG8gZW5zbGF2ZSBldGgyIGFuZCBldGgzCisod2hpY2ggbWF5IGxhdGVyIGJlIGFzc2lnbmVkIHRvIHRoZSB0ZzMgZGV2aWNlcykuCisKKwlBZGRpbmcgdGhlIGZvbGxvd2luZzoKKworYWRkIGFib3ZlIGJvbmRpbmcgZTEwMDAgdGczCisKKwljYXVzZXMgbW9kcHJvYmUgdG8gbG9hZCBlMTAwMCB0aGVuIHRnMywgaW4gdGhhdCBvcmRlciwgd2hlbgorYm9uZGluZyBpcyBsb2FkZWQuICBUaGlzIGNvbW1hbmQgaXMgZnVsbHkgZG9jdW1lbnRlZCBpbiB0aGUKK21vZHVsZXMuY29uZiBtYW51YWwgcGFnZS4KKworCU9uIHN5c3RlbXMgdXRpbGl6aW5nIG1vZHByb2JlLmNvbmYgKG9yIG1vZHByb2JlLmNvbmYubG9jYWwpLAorYW4gZXF1aXZhbGVudCBwcm9ibGVtIGNhbiBvY2N1ci4gIEluIHRoaXMgY2FzZSwgdGhlIGZvbGxvd2luZyBjYW4gYmUKK2FkZGVkIHRvIG1vZHByb2JlLmNvbmYgKG9yIG1vZHByb2JlLmNvbmYubG9jYWwsIGFzIGFwcHJvcHJpYXRlKSwgYXMKK2ZvbGxvd3MgKGFsbCBvbiBvbmUgbGluZTsgaXQgaGFzIGJlZW4gc3BsaXQgaGVyZSBmb3IgY2xhcml0eSk6CisKK2luc3RhbGwgYm9uZGluZyAvc2Jpbi9tb2Rwcm9iZSB0ZzM7IC9zYmluL21vZHByb2JlIGUxMDAwOworCS9zYmluL21vZHByb2JlIC0taWdub3JlLWluc3RhbGwgYm9uZGluZworCisJVGhpcyB3aWxsLCB3aGVuIGxvYWRpbmcgdGhlIGJvbmRpbmcgbW9kdWxlLCByYXRoZXIgdGhhbgorcGVyZm9ybWluZyB0aGUgbm9ybWFsIGFjdGlvbiwgaW5zdGVhZCBleGVjdXRlIHRoZSBwcm92aWRlZCBjb21tYW5kLgorVGhpcyBjb21tYW5kIGxvYWRzIHRoZSBkZXZpY2UgZHJpdmVycyBpbiB0aGUgb3JkZXIgbmVlZGVkLCB0aGVuIGNhbGxzCittb2Rwcm9iZSB3aXRoIC0taW5nb3JlLWluc3RhbGwgdG8gY2F1c2UgdGhlIG5vcm1hbCBhY3Rpb24gdG8gdGhlbiB0YWtlCitwbGFjZS4gIEZ1bGwgZG9jdW1lbnRhdGlvbiBvbiB0aGlzIGNhbiBiZSBmb3VuZCBpbiB0aGUgbW9kcHJvYmUuY29uZgorYW5kIG1vZHByb2JlIG1hbnVhbCBwYWdlcy4KKworOS4zLiBQYWluZnVsbHkgU2xvdyBPciBObyBGYWlsZWQgTGluayBEZXRlY3Rpb24gQnkgTWlpbW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCUJ5IGRlZmF1bHQsIGJvbmRpbmcgZW5hYmxlcyB0aGUgdXNlX2NhcnJpZXIgb3B0aW9uLCB3aGljaAoraW5zdHJ1Y3RzIGJvbmRpbmcgdG8gdHJ1c3QgdGhlIGRyaXZlciB0byBtYWludGFpbiBjYXJyaWVyIHN0YXRlLgorCisJQXMgZGlzY3Vzc2VkIGluIHRoZSBvcHRpb25zIHNlY3Rpb24sIGFib3ZlLCBzb21lIGRyaXZlcnMgZG8KK25vdCBzdXBwb3J0IHRoZSBuZXRpZl9jYXJyaWVyX29uL19vZmYgbGluayBzdGF0ZSB0cmFja2luZyBzeXN0ZW0uCitXaXRoIHVzZV9jYXJyaWVyIGVuYWJsZWQsIGJvbmRpbmcgd2lsbCBhbHdheXMgc2VlIHRoZXNlIGxpbmtzIGFzIHVwLAorcmVnYXJkbGVzcyBvZiB0aGVpciBhY3R1YWwgc3RhdGUuCisKKwlBZGRpdGlvbmFsbHksIG90aGVyIGRyaXZlcnMgZG8gc3VwcG9ydCBuZXRpZl9jYXJyaWVyLCBidXQgZG8KK25vdCBtYWludGFpbiBpdCBpbiByZWFsIHRpbWUsIGUuZy4sIG9ubHkgcG9sbGluZyB0aGUgbGluayBzdGF0ZSBhdAorc29tZSBmaXhlZCBpbnRlcnZhbC4gIEluIHRoaXMgY2FzZSwgbWlpbW9uIHdpbGwgZGV0ZWN0IGZhaWx1cmVzLCBidXQKK29ubHkgYWZ0ZXIgc29tZSBsb25nIHBlcmlvZCBvZiB0aW1lIGhhcyBleHBpcmVkLiAgSWYgaXQgYXBwZWFycyB0aGF0CittaWltb24gaXMgdmVyeSBzbG93IGluIGRldGVjdGluZyBsaW5rIGZhaWx1cmVzLCB0cnkgc3BlY2lmeWluZwordXNlX2NhcnJpZXI9MCB0byBzZWUgaWYgdGhhdCBpbXByb3ZlcyB0aGUgZmFpbHVyZSBkZXRlY3Rpb24gdGltZS4gIElmCitpdCBkb2VzLCB0aGVuIGl0IG1heSBiZSB0aGF0IHRoZSBkcml2ZXIgY2hlY2tzIHRoZSBjYXJyaWVyIHN0YXRlIGF0IGEKK2ZpeGVkIGludGVydmFsLCBidXQgZG9lcyBub3QgY2FjaGUgdGhlIE1JSSByZWdpc3RlciB2YWx1ZXMgKHNvIHRoZQordXNlX2NhcnJpZXI9MCBtZXRob2Qgb2YgcXVlcnlpbmcgdGhlIHJlZ2lzdGVycyBkaXJlY3RseSB3b3JrcykuICBJZgordXNlX2NhcnJpZXI9MCBkb2VzIG5vdCBpbXByb3ZlIHRoZSBmYWlsb3ZlciwgdGhlbiB0aGUgZHJpdmVyIG1heSBjYWNoZQordGhlIHJlZ2lzdGVycywgb3IgdGhlIHByb2JsZW0gbWF5IGJlIGVsc2V3aGVyZS4KKworCUFsc28sIHJlbWVtYmVyIHRoYXQgbWlpbW9uIG9ubHkgY2hlY2tzIGZvciB0aGUgZGV2aWNlJ3MKK2NhcnJpZXIgc3RhdGUuICBJdCBoYXMgbm8gd2F5IHRvIGRldGVybWluZSB0aGUgc3RhdGUgb2YgZGV2aWNlcyBvbiBvcgorYmV5b25kIG90aGVyIHBvcnRzIG9mIGEgc3dpdGNoLCBvciBpZiBhIHN3aXRjaCBpcyByZWZ1c2luZyB0byBwYXNzCit0cmFmZmljIHdoaWxlIHN0aWxsIG1haW50YWluaW5nIGNhcnJpZXIgb24uCisKKzEwLiBTTk1QIGFnZW50cworPT09PT09PT09PT09PT09CisKKwlJZiBydW5uaW5nIFNOTVAgYWdlbnRzLCB0aGUgYm9uZGluZyBkcml2ZXIgc2hvdWxkIGJlIGxvYWRlZAorYmVmb3JlIGFueSBuZXR3b3JrIGRyaXZlcnMgcGFydGljaXBhdGluZyBpbiBhIGJvbmQuICBUaGlzIHJlcXVpcmVtZW50CitpcyBkdWUgdG8gdGhlIHRoZSBpbnRlcmZhY2UgaW5kZXggKGlwQWRFbnRJZkluZGV4KSBiZWluZyBhc3NvY2lhdGVkIHRvCit0aGUgZmlyc3QgaW50ZXJmYWNlIGZvdW5kIHdpdGggYSBnaXZlbiBJUCBhZGRyZXNzLiAgVGhhdCBpcywgdGhlcmUgaXMKK29ubHkgb25lIGlwQWRFbnRJZkluZGV4IGZvciBlYWNoIElQIGFkZHJlc3MuICBGb3IgZXhhbXBsZSwgaWYgZXRoMCBhbmQKK2V0aDEgYXJlIHNsYXZlcyBvZiBib25kMCBhbmQgdGhlIGRyaXZlciBmb3IgZXRoMCBpcyBsb2FkZWQgYmVmb3JlIHRoZQorYm9uZGluZyBkcml2ZXIsIHRoZSBpbnRlcmZhY2UgZm9yIHRoZSBJUCBhZGRyZXNzIHdpbGwgYmUgYXNzb2NpYXRlZAord2l0aCB0aGUgZXRoMCBpbnRlcmZhY2UuICBUaGlzIGNvbmZpZ3VyYXRpb24gaXMgc2hvd24gYmVsb3csIHRoZSBJUAorYWRkcmVzcyAxOTIuMTY4LjEuMSBoYXMgYW4gaW50ZXJmYWNlIGluZGV4IG9mIDIgd2hpY2ggaW5kZXhlcyB0byBldGgwCitpbiB0aGUgaWZEZXNjciB0YWJsZSAoaWZEZXNjci4yKS4KKworICAgICBpbnRlcmZhY2VzLmlmVGFibGUuaWZFbnRyeS5pZkRlc2NyLjEgPSBsbworICAgICBpbnRlcmZhY2VzLmlmVGFibGUuaWZFbnRyeS5pZkRlc2NyLjIgPSBldGgwCisgICAgIGludGVyZmFjZXMuaWZUYWJsZS5pZkVudHJ5LmlmRGVzY3IuMyA9IGV0aDEKKyAgICAgaW50ZXJmYWNlcy5pZlRhYmxlLmlmRW50cnkuaWZEZXNjci40ID0gZXRoMgorICAgICBpbnRlcmZhY2VzLmlmVGFibGUuaWZFbnRyeS5pZkRlc2NyLjUgPSBldGgzCisgICAgIGludGVyZmFjZXMuaWZUYWJsZS5pZkVudHJ5LmlmRGVzY3IuNiA9IGJvbmQwCisgICAgIGlwLmlwQWRkclRhYmxlLmlwQWRkckVudHJ5LmlwQWRFbnRJZkluZGV4LjEwLjEwLjEwLjEwID0gNQorICAgICBpcC5pcEFkZHJUYWJsZS5pcEFkZHJFbnRyeS5pcEFkRW50SWZJbmRleC4xOTIuMTY4LjEuMSA9IDIKKyAgICAgaXAuaXBBZGRyVGFibGUuaXBBZGRyRW50cnkuaXBBZEVudElmSW5kZXguMTAuNzQuMjAuOTQgPSA0CisgICAgIGlwLmlwQWRkclRhYmxlLmlwQWRkckVudHJ5LmlwQWRFbnRJZkluZGV4LjEyNy4wLjAuMSA9IDEKKworCVRoaXMgcHJvYmxlbSBpcyBhdm9pZGVkIGJ5IGxvYWRpbmcgdGhlIGJvbmRpbmcgZHJpdmVyIGJlZm9yZQorYW55IG5ldHdvcmsgZHJpdmVycyBwYXJ0aWNpcGF0aW5nIGluIGEgYm9uZC4gIEJlbG93IGlzIGFuIGV4YW1wbGUgb2YKK2xvYWRpbmcgdGhlIGJvbmRpbmcgZHJpdmVyIGZpcnN0LCB0aGUgSVAgYWRkcmVzcyAxOTIuMTY4LjEuMSBpcworY29ycmVjdGx5IGFzc29jaWF0ZWQgd2l0aCBpZkRlc2NyLjIuCisKKyAgICAgaW50ZXJmYWNlcy5pZlRhYmxlLmlmRW50cnkuaWZEZXNjci4xID0gbG8KKyAgICAgaW50ZXJmYWNlcy5pZlRhYmxlLmlmRW50cnkuaWZEZXNjci4yID0gYm9uZDAKKyAgICAgaW50ZXJmYWNlcy5pZlRhYmxlLmlmRW50cnkuaWZEZXNjci4zID0gZXRoMAorICAgICBpbnRlcmZhY2VzLmlmVGFibGUuaWZFbnRyeS5pZkRlc2NyLjQgPSBldGgxCisgICAgIGludGVyZmFjZXMuaWZUYWJsZS5pZkVudHJ5LmlmRGVzY3IuNSA9IGV0aDIKKyAgICAgaW50ZXJmYWNlcy5pZlRhYmxlLmlmRW50cnkuaWZEZXNjci42ID0gZXRoMworICAgICBpcC5pcEFkZHJUYWJsZS5pcEFkZHJFbnRyeS5pcEFkRW50SWZJbmRleC4xMC4xMC4xMC4xMCA9IDYKKyAgICAgaXAuaXBBZGRyVGFibGUuaXBBZGRyRW50cnkuaXBBZEVudElmSW5kZXguMTkyLjE2OC4xLjEgPSAyCisgICAgIGlwLmlwQWRkclRhYmxlLmlwQWRkckVudHJ5LmlwQWRFbnRJZkluZGV4LjEwLjc0LjIwLjk0ID0gNQorICAgICBpcC5pcEFkZHJUYWJsZS5pcEFkZHJFbnRyeS5pcEFkRW50SWZJbmRleC4xMjcuMC4wLjEgPSAxCisKKwlXaGlsZSBzb21lIGRpc3RyaWJ1dGlvbnMgbWF5IG5vdCByZXBvcnQgdGhlIGludGVyZmFjZSBuYW1lIGluCitpZkRlc2NyLCB0aGUgYXNzb2NpYXRpb24gYmV0d2VlbiB0aGUgSVAgYWRkcmVzcyBhbmQgSWZJbmRleCByZW1haW5zCithbmQgU05NUCBmdW5jdGlvbnMgc3VjaCBhcyBJbnRlcmZhY2VfU2Nhbl9OZXh0IHdpbGwgcmVwb3J0IHRoYXQKK2Fzc29jaWF0aW9uLgorCisxMS4gUHJvbWlzY3VvdXMgbW9kZQorPT09PT09PT09PT09PT09PT09PT0KKworCVdoZW4gcnVubmluZyBuZXR3b3JrIG1vbml0b3JpbmcgdG9vbHMsIGUuZy4sIHRjcGR1bXAsIGl0IGlzCitjb21tb24gdG8gZW5hYmxlIHByb21pc2N1b3VzIG1vZGUgb24gdGhlIGRldmljZSwgc28gdGhhdCBhbGwgdHJhZmZpYworaXMgc2VlbiAoaW5zdGVhZCBvZiBzZWVpbmcgb25seSB0cmFmZmljIGRlc3RpbmVkIGZvciB0aGUgbG9jYWwgaG9zdCkuCitUaGUgYm9uZGluZyBkcml2ZXIgaGFuZGxlcyBwcm9taXNjdW91cyBtb2RlIGNoYW5nZXMgdG8gdGhlIGJvbmRpbmcKK21hc3RlciBkZXZpY2UgKGUuZy4sIGJvbmQwKSwgYW5kIHByb3BvZ2F0ZXMgdGhlIHNldHRpbmcgdG8gdGhlIHNsYXZlCitkZXZpY2VzLgorCisJRm9yIHRoZSBiYWxhbmNlLXJyLCBiYWxhbmNlLXhvciwgYnJvYWRjYXN0LCBhbmQgODAyLjNhZCBtb2RlcywKK3RoZSBwcm9taXNjdW91cyBtb2RlIHNldHRpbmcgaXMgcHJvcG9nYXRlZCB0byBhbGwgc2xhdmVzLgorCisJRm9yIHRoZSBhY3RpdmUtYmFja3VwLCBiYWxhbmNlLXRsYiBhbmQgYmFsYW5jZS1hbGIgbW9kZXMsIHRoZQorcHJvbWlzY3VvdXMgbW9kZSBzZXR0aW5nIGlzIHByb3BvZ2F0ZWQgb25seSB0byB0aGUgYWN0aXZlIHNsYXZlLgorCisJRm9yIGJhbGFuY2UtdGxiIG1vZGUsIHRoZSBhY3RpdmUgc2xhdmUgaXMgdGhlIHNsYXZlIGN1cnJlbnRseQorcmVjZWl2aW5nIGluYm91bmQgdHJhZmZpYy4KKworCUZvciBiYWxhbmNlLWFsYiBtb2RlLCB0aGUgYWN0aXZlIHNsYXZlIGlzIHRoZSBzbGF2ZSB1c2VkIGFzIGEKKyJwcmltYXJ5LiIgIFRoaXMgc2xhdmUgaXMgdXNlZCBmb3IgbW9kZS1zcGVjaWZpYyBjb250cm9sIHRyYWZmaWMsIGZvcgorc2VuZGluZyB0byBwZWVycyB0aGF0IGFyZSB1bmFzc2lnbmVkIG9yIGlmIHRoZSBsb2FkIGlzIHVuYmFsYW5jZWQuCisKKwlGb3IgdGhlIGFjdGl2ZS1iYWNrdXAsIGJhbGFuY2UtdGxiIGFuZCBiYWxhbmNlLWFsYiBtb2Rlcywgd2hlbgordGhlIGFjdGl2ZSBzbGF2ZSBjaGFuZ2VzIChlLmcuLCBkdWUgdG8gYSBsaW5rIGZhaWx1cmUpLCB0aGUKK3Byb21pc2N1b3VzIHNldHRpbmcgd2lsbCBiZSBwcm9wb2dhdGVkIHRvIHRoZSBuZXcgYWN0aXZlIHNsYXZlLgorCisxMi4gSGlnaCBBdmFpbGFiaWxpdHkgSW5mb3JtYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJSGlnaCBBdmFpbGFiaWxpdHkgcmVmZXJzIHRvIGNvbmZpZ3VyYXRpb25zIHRoYXQgcHJvdmlkZQorbWF4aW11bSBuZXR3b3JrIGF2YWlsYWJpbGl0eSBieSBoYXZpbmcgcmVkdW5kYW50IG9yIGJhY2t1cCBkZXZpY2VzLAorbGlua3MgYW5kIHN3aXRjaGVzIGJldHdlZW4gdGhlIGhvc3QgYW5kIHRoZSByZXN0IG9mIHRoZSB3b3JsZC4KKworCVRoZXJlIGFyZSBjdXJyZW50bHkgdHdvIGJhc2ljIG1ldGhvZHMgZm9yIGNvbmZpZ3VyaW5nIHRvCittYXhpbWl6ZSBhdmFpbGFiaWxpdHkuIFRoZXkgYXJlIGRlcGVuZGVudCBvbiB0aGUgbmV0d29yayB0b3BvbG9neSBhbmQKK3RoZSBwcmltYXJ5IGdvYWwgb2YgdGhlIGNvbmZpZ3VyYXRpb24sIGJ1dCBpbiBnZW5lcmFsLCBhIGNvbmZpZ3VyYXRpb24KK2NhbiBiZSBvcHRpbWl6ZWQgZm9yIG1heGltdW0gYXZhaWxhYmxlIGJhbmR3aWR0aCwgb3IgZm9yIG1heGltdW0KK25ldHdvcmsgYXZhaWxhYmlsaXR5LgorCisxMi4xIEhpZ2ggQXZhaWxhYmlsaXR5IGluIGEgU2luZ2xlIFN3aXRjaCBUb3BvbG9neQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCUlmIHR3byBob3N0cyAob3IgYSBob3N0IGFuZCBhIHN3aXRjaCkgYXJlIGRpcmVjdGx5IGNvbm5lY3RlZAordmlhIG11bHRpcGxlIHBoeXNpY2FsIGxpbmtzLCB0aGVuIHRoZXJlIGlzIG5vIG5ldHdvcmsgYXZhaWxhYmlsaXR5CitwZW5hbHR5IGZvciBvcHRpbWl6aW5nIGZvciBtYXhpbXVtIGJhbmR3aWR0aDogdGhlcmUgaXMgb25seSBvbmUgc3dpdGNoCisob3IgcGVlciksIHNvIGlmIGl0IGZhaWxzLCB5b3UgaGF2ZSBubyBhbHRlcm5hdGl2ZSBhY2Nlc3MgdG8gZmFpbCBvdmVyCit0by4KKworRXhhbXBsZSAxIDogaG9zdCB0byBzd2l0Y2ggKG9yIG90aGVyIGhvc3QpCisKKyAgICAgICAgICArLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tKworICAgICAgICAgIHwgICAgICAgICAgfGV0aDAgICAgICAgICAgICAgICAgICBldGgwfCAgc3dpdGNoICB8CisgICAgICAgICAgfCBIb3N0IEEgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgIG9yICAgIHwKKyAgICAgICAgICB8ICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgIG90aGVyICAgfAorICAgICAgICAgIHwgICAgICAgICAgfGV0aDEgICAgICAgICAgICAgICAgICBldGgxfCAgaG9zdCAgICB8CisgICAgICAgICAgKy0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLSsKKworCisxMi4xLjEgQm9uZGluZyBNb2RlIFNlbGVjdGlvbiBmb3Igc2luZ2xlIHN3aXRjaCB0b3BvbG9neQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCVRoaXMgY29uZmlndXJhdGlvbiBpcyB0aGUgZWFzaWVzdCB0byBzZXQgdXAgYW5kIHRvIHVuZGVyc3RhbmQsCithbHRob3VnaCB5b3Ugd2lsbCBoYXZlIHRvIGRlY2lkZSB3aGljaCBib25kaW5nIG1vZGUgYmVzdCBzdWl0cyB5b3VyCituZWVkcy4gIFRoZSB0cmFkZW9mZnMgZm9yIGVhY2ggbW9kZSBhcmUgZGV0YWlsZWQgYmVsb3c6CisKK2JhbGFuY2UtcnI6IFRoaXMgbW9kZSBpcyB0aGUgb25seSBtb2RlIHRoYXQgd2lsbCBwZXJtaXQgYSBzaW5nbGUKKwlUQ1AvSVAgY29ubmVjdGlvbiB0byBzdHJpcGUgdHJhZmZpYyBhY3Jvc3MgbXVsdGlwbGUKKwlpbnRlcmZhY2VzLiBJdCBpcyB0aGVyZWZvcmUgdGhlIG9ubHkgbW9kZSB0aGF0IHdpbGwgYWxsb3cgYQorCXNpbmdsZSBUQ1AvSVAgc3RyZWFtIHRvIHV0aWxpemUgbW9yZSB0aGFuIG9uZSBpbnRlcmZhY2UncworCXdvcnRoIG9mIHRocm91Z2hwdXQuICBUaGlzIGNvbWVzIGF0IGEgY29zdCwgaG93ZXZlcjogdGhlCisJc3RyaXBpbmcgb2Z0ZW4gcmVzdWx0cyBpbiBwZWVyIHN5c3RlbXMgcmVjZWl2aW5nIHBhY2tldHMgb3V0CisJb2Ygb3JkZXIsIGNhdXNpbmcgVENQL0lQJ3MgY29uZ2VzdGlvbiBjb250cm9sIHN5c3RlbSB0byBraWNrCisJaW4sIG9mdGVuIGJ5IHJldHJhbnNtaXR0aW5nIHNlZ21lbnRzLgorCisJSXQgaXMgcG9zc2libGUgdG8gYWRqdXN0IFRDUC9JUCdzIGNvbmdlc3Rpb24gbGltaXRzIGJ5CisJYWx0ZXJpbmcgdGhlIG5ldC5pcHY0LnRjcF9yZW9yZGVyaW5nIHN5c2N0bCBwYXJhbWV0ZXIuICBUaGUKKwl1c3VhbCBkZWZhdWx0IHZhbHVlIGlzIDMsIGFuZCB0aGUgbWF4aW11bSB1c2VmdWwgdmFsdWUgaXMgMTI3LgorCUZvciBhIGZvdXIgaW50ZXJmYWNlIGJhbGFuY2UtcnIgYm9uZCwgZXhwZWN0IHRoYXQgYSBzaW5nbGUKKwlUQ1AvSVAgc3RyZWFtIHdpbGwgdXRpbGl6ZSBubyBtb3JlIHRoYW4gYXBwcm94aW1hdGVseSAyLjMKKwlpbnRlcmZhY2UncyB3b3J0aCBvZiB0aHJvdWdocHV0LCBldmVuIGFmdGVyIGFkanVzdGluZworCXRjcF9yZW9yZGVyaW5nLgorCisJSWYgeW91IGFyZSB1dGlsaXppbmcgcHJvdG9jb2xzIG90aGVyIHRoYW4gVENQL0lQLCBVRFAgZm9yCisJZXhhbXBsZSwgYW5kIHlvdXIgYXBwbGljYXRpb24gY2FuIHRvbGVyYXRlIG91dCBvZiBvcmRlcgorCWRlbGl2ZXJ5LCB0aGVuIHRoaXMgbW9kZSBjYW4gYWxsb3cgZm9yIHNpbmdsZSBzdHJlYW0gZGF0YWdyYW0KKwlwZXJmb3JtYW5jZSB0aGF0IHNjYWxlcyBuZWFyIGxpbmVhcmx5IGFzIGludGVyZmFjZXMgYXJlIGFkZGVkCisJdG8gdGhlIGJvbmQuCisKKwlUaGlzIG1vZGUgcmVxdWlyZXMgdGhlIHN3aXRjaCB0byBoYXZlIHRoZSBhcHByb3ByaWF0ZSBwb3J0cworCWNvbmZpZ3VyZWQgZm9yICJldGhlcmNoYW5uZWwiIG9yICJ0cnVua2luZy4iCisKK2FjdGl2ZS1iYWNrdXA6IFRoZXJlIGlzIG5vdCBtdWNoIGFkdmFudGFnZSBpbiB0aGlzIG5ldHdvcmsgdG9wb2xvZ3kgdG8KKwl0aGUgYWN0aXZlLWJhY2t1cCBtb2RlLCBhcyB0aGUgaW5hY3RpdmUgYmFja3VwIGRldmljZXMgYXJlIGFsbAorCWNvbm5lY3RlZCB0byB0aGUgc2FtZSBwZWVyIGFzIHRoZSBwcmltYXJ5LiAgSW4gdGhpcyBjYXNlLCBhCisJbG9hZCBiYWxhbmNpbmcgbW9kZSAod2l0aCBsaW5rIG1vbml0b3JpbmcpIHdpbGwgcHJvdmlkZSB0aGUKKwlzYW1lIGxldmVsIG9mIG5ldHdvcmsgYXZhaWxhYmlsaXR5LCBidXQgd2l0aCBpbmNyZWFzZWQKKwlhdmFpbGFibGUgYmFuZHdpZHRoLiAgT24gdGhlIHBsdXMgc2lkZSwgaXQgZG9lcyBub3QgcmVxdWlyZQorCWFueSBjb25maWd1cmF0aW9uIG9mIHRoZSBzd2l0Y2guCisKK2JhbGFuY2UteG9yOiBUaGlzIG1vZGUgd2lsbCBsaW1pdCB0cmFmZmljIHN1Y2ggdGhhdCBwYWNrZXRzIGRlc3RpbmVkCisJZm9yIHNwZWNpZmljIHBlZXJzIHdpbGwgYWx3YXlzIGJlIHNlbnQgb3ZlciB0aGUgc2FtZQorCWludGVyZmFjZS4gIFNpbmNlIHRoZSBkZXN0aW5hdGlvbiBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBNQUMKKwlhZGRyZXNzZXMgaW52b2x2ZWQsIHRoaXMgbWF5IGJlIGRlc2lyYWJsZSBpZiB5b3UgaGF2ZSBhIGxhcmdlCisJbmV0d29yayB3aXRoIG1hbnkgaG9zdHMuICBJdCBpcyBsaWtlbHkgdG8gYmUgc3Vib3B0aW1hbCBpZiBhbGwKKwl5b3VyIHRyYWZmaWMgaXMgcGFzc2VkIHRocm91Z2ggYSBzaW5nbGUgcm91dGVyLCBob3dldmVyLiAgQXMKKwl3aXRoIGJhbGFuY2UtcnIsIHRoZSBzd2l0Y2ggcG9ydHMgbmVlZCB0byBiZSBjb25maWd1cmVkIGZvcgorCSJldGhlcmNoYW5uZWwiIG9yICJ0cnVua2luZy4iCisKK2Jyb2FkY2FzdDogTGlrZSBhY3RpdmUtYmFja3VwLCB0aGVyZSBpcyBub3QgbXVjaCBhZHZhbnRhZ2UgdG8gdGhpcworCW1vZGUgaW4gdGhpcyB0eXBlIG9mIG5ldHdvcmsgdG9wb2xvZ3kuCisKKzgwMi4zYWQ6IFRoaXMgbW9kZSBjYW4gYmUgYSBnb29kIGNob2ljZSBmb3IgdGhpcyB0eXBlIG9mIG5ldHdvcmsKKwl0b3BvbG9neS4gIFRoZSA4MDIuM2FkIG1vZGUgaXMgYW4gSUVFRSBzdGFuZGFyZCwgc28gYWxsIHBlZXJzCisJdGhhdCBpbXBsZW1lbnQgODAyLjNhZCBzaG91bGQgaW50ZXJvcGVyYXRlIHdlbGwuICBUaGUgODAyLjNhZAorCXByb3RvY29sIGluY2x1ZGVzIGF1dG9tYXRpYyBjb25maWd1cmF0aW9uIG9mIHRoZSBhZ2dyZWdhdGVzLAorCXNvIG1pbmltYWwgbWFudWFsIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHN3aXRjaCBpcyBuZWVkZWQKKwkodHlwaWNhbGx5IG9ubHkgdG8gZGVzaWduYXRlIHRoYXQgc29tZSBzZXQgb2YgZGV2aWNlcyBpcworCXVzYWJsZSBmb3IgODAyLjNhZCkuICBUaGUgODAyLjNhZCBzdGFuZGFyZCBhbHNvIG1hbmRhdGVzIHRoYXQKKwlmcmFtZXMgYmUgZGVsaXZlcmVkIGluIG9yZGVyICh3aXRoaW4gY2VydGFpbiBsaW1pdHMpLCBzbyBpbgorCWdlbmVyYWwgc2luZ2xlIGNvbm5lY3Rpb25zIHdpbGwgbm90IHNlZSBtaXNvcmRlcmluZyBvZgorCXBhY2tldHMuICBUaGUgODAyLjNhZCBtb2RlIGRvZXMgaGF2ZSBzb21lIGRyYXdiYWNrczogdGhlCisJc3RhbmRhcmQgbWFuZGF0ZXMgdGhhdCBhbGwgZGV2aWNlcyBpbiB0aGUgYWdncmVnYXRlIG9wZXJhdGUgYXQKKwl0aGUgc2FtZSBzcGVlZCBhbmQgZHVwbGV4LiAgQWxzbywgYXMgd2l0aCBhbGwgYm9uZGluZyBsb2FkCisJYmFsYW5jZSBtb2RlcyBvdGhlciB0aGFuIGJhbGFuY2UtcnIsIG5vIHNpbmdsZSBjb25uZWN0aW9uIHdpbGwKKwliZSBhYmxlIHRvIHV0aWxpemUgbW9yZSB0aGFuIGEgc2luZ2xlIGludGVyZmFjZSdzIHdvcnRoIG9mCisJYmFuZHdpZHRoLiAgQWRkaXRpb25hbGx5LCB0aGUgbGludXggYm9uZGluZyA4MDIuM2FkCisJaW1wbGVtZW50YXRpb24gZGlzdHJpYnV0ZXMgdHJhZmZpYyBieSBwZWVyICh1c2luZyBhbiBYT1Igb2YKKwlNQUMgYWRkcmVzc2VzKSwgc28gaW4gZ2VuZXJhbCBhbGwgdHJhZmZpYyB0byBhIHBhcnRpY3VsYXIKKwlkZXN0aW5hdGlvbiB3aWxsIHVzZSB0aGUgc2FtZSBpbnRlcmZhY2UuICBGaW5hbGx5LCB0aGUgODAyLjNhZAorCW1vZGUgbWFuZGF0ZXMgdGhlIHVzZSBvZiB0aGUgTUlJIG1vbml0b3IsIHRoZXJlZm9yZSwgdGhlIEFSUAorCW1vbml0b3IgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIG1vZGUuCisKK2JhbGFuY2UtdGxiOiBUaGlzIG1vZGUgaXMgYWxzbyBhIGdvb2QgY2hvaWNlIGZvciB0aGlzIHR5cGUgb2YKKwl0b3BvbG9neS4gIEl0IGhhcyBubyBzcGVjaWFsIHN3aXRjaCBjb25maWd1cmF0aW9uCisJcmVxdWlyZW1lbnRzLCBhbmQgYmFsYW5jZXMgb3V0Z29pbmcgdHJhZmZpYyBieSBwZWVyLCBpbiBhCisJdmFndWVseSBpbnRlbGxpZ2VudCBtYW5uZXIgKG5vdCBhIHNpbXBsZSBYT1IgYXMgaW4gYmFsYW5jZS14b3IKKwlvciA4MDIuM2FkIG1vZGUpLCBzbyB0aGF0IHVubHVja3kgTUFDIGFkZHJlc3NlcyB3aWxsIG5vdCBhbGwKKwkiYnVuY2ggdXAiIG9uIGEgc2luZ2xlIGludGVyZmFjZS4gIEludGVyZmFjZXMgbWF5IGJlIG9mCisJZGlmZmVyaW5nIHNwZWVkcy4gIE9uIHRoZSBkb3duIHNpZGUsIGluIHRoaXMgbW9kZSBhbGwgaW5jb21pbmcKKwl0cmFmZmljIGFycml2ZXMgb3ZlciBhIHNpbmdsZSBpbnRlcmZhY2UsIHRoaXMgbW9kZSByZXF1aXJlcworCWNlcnRhaW4gZXRodG9vbCBzdXBwb3J0IGluIHRoZSBuZXR3b3JrIGRldmljZSBkcml2ZXIgb2YgdGhlCisJc2xhdmUgaW50ZXJmYWNlcywgYW5kIHRoZSBBUlAgbW9uaXRvciBpcyBub3QgYXZhaWxhYmxlLgorCitiYWxhbmNlLWFsYjogVGhpcyBtb2RlIGlzIGV2ZXJ5dGhpbmcgdGhhdCBiYWxhbmNlLXRsYiBpcywgYW5kIG1vcmUuIEl0CisJaGFzIGFsbCBvZiB0aGUgZmVhdHVyZXMgKGFuZCByZXN0cmljdGlvbnMpIG9mIGJhbGFuY2UtdGxiLCBhbmQKKwl3aWxsIGFsc28gYmFsYW5jZSBpbmNvbWluZyB0cmFmZmljIGZyb20gcGVlcnMgKGFzIGRlc2NyaWJlZCBpbgorCXRoZSBCb25kaW5nIE1vZHVsZSBPcHRpb25zIHNlY3Rpb24sIGFib3ZlKS4gIFRoZSBvbmx5IGV4dHJhCisJZG93biBzaWRlIHRvIHRoaXMgbW9kZSBpcyB0aGF0IHRoZSBuZXR3b3JrIGRldmljZSBkcml2ZXIgbXVzdAorCXN1cHBvcnQgY2hhbmdpbmcgdGhlIGhhcmR3YXJlIGFkZHJlc3Mgd2hpbGUgdGhlIGRldmljZSBpcworCW9wZW4uCisKKzEyLjEuMiBMaW5rIE1vbml0b3JpbmcgZm9yIFNpbmdsZSBTd2l0Y2ggVG9wb2xvZ3kKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCVRoZSBjaG9pY2Ugb2YgbGluayBtb25pdG9yaW5nIG1heSBsYXJnZWx5IGRlcGVuZCB1cG9uIHdoaWNoCittb2RlIHlvdSBjaG9vc2UgdG8gdXNlLiAgVGhlIG1vcmUgYWR2YW5jZWQgbG9hZCBiYWxhbmNpbmcgbW9kZXMgZG8gbm90CitzdXBwb3J0IHRoZSB1c2Ugb2YgdGhlIEFSUCBtb25pdG9yLCBhbmQgYXJlIHRodXMgcmVzdHJpY3RlZCB0byB1c2luZwordGhlIE1JSSBtb25pdG9yICh3aGljaCBkb2VzIG5vdCBwcm92aWRlIGFzIGhpZ2ggYSBsZXZlbCBvZiBhc3N1cmFuY2UKK2FzIHRoZSBBUlAgbW9uaXRvcikuCisKKworMTIuMiBIaWdoIEF2YWlsYWJpbGl0eSBpbiBhIE11bHRpcGxlIFN3aXRjaCBUb3BvbG9neQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJV2l0aCBtdWx0aXBsZSBzd2l0Y2hlcywgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYm9uZGluZyBhbmQgdGhlCituZXR3b3JrIGNoYW5nZXMgZHJhbWF0aWNhbGx5LiAgSW4gbXVsdGlwbGUgc3dpdGNoIHRvcG9sb2dpZXMsIHRoZXJlIGlzCithIHRyYWRlb2ZmIGJldHdlZW4gbmV0d29yayBhdmFpbGFiaWxpdHkgYW5kIHVzYWJsZSBiYW5kd2lkdGguCisKKwlCZWxvdyBpcyBhIHNhbXBsZSBuZXR3b3JrLCBjb25maWd1cmVkIHRvIG1heGltaXplIHRoZQorYXZhaWxhYmlsaXR5IG9mIHRoZSBuZXR3b3JrOgorCisgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgfHBvcnQzICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydDN8CisgICAgICAgICAgKy0tLS0tKy0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0rLS0tLSsKKyAgICAgICAgICB8ICAgICAgICAgIHxwb3J0MiAgICAgICBJU0wgICAgICBwb3J0MnwgICAgICAgICAgfAorICAgICAgICAgIHwgc3dpdGNoIEEgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyBzd2l0Y2ggQiB8CisgICAgICAgICAgfCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwKKyAgICAgICAgICArLS0tLS0rLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLSsrLS0tKworICAgICAgICAgICAgICAgIHxwb3J0MSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQxfAorICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgKy0tLS0tLS0rICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tKyBob3N0MSArLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgICAgIGV0aDAgKy0tLS0tLS0rIGV0aDEKKworCUluIHRoaXMgY29uZmlndXJhdGlvbiwgdGhlcmUgaXMgYSBsaW5rIGJldHdlZW4gdGhlIHR3bworc3dpdGNoZXMgKElTTCwgb3IgaW50ZXIgc3dpdGNoIGxpbmspLCBhbmQgbXVsdGlwbGUgcG9ydHMgY29ubmVjdGluZyB0bwordGhlIG91dHNpZGUgd29ybGQgKCJwb3J0MyIgb24gZWFjaCBzd2l0Y2gpLiAgVGhlcmUgaXMgbm8gdGVjaG5pY2FsCityZWFzb24gdGhhdCB0aGlzIGNvdWxkIG5vdCBiZSBleHRlbmRlZCB0byBhIHRoaXJkIHN3aXRjaC4KKworMTIuMi4xIEJvbmRpbmcgTW9kZSBTZWxlY3Rpb24gZm9yIE11bHRpcGxlIFN3aXRjaCBUb3BvbG9neQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJSW4gYSB0b3BvbG9neSBzdWNoIGFzIHRoaXMsIHRoZSBhY3RpdmUtYmFja3VwIGFuZCBicm9hZGNhc3QKK21vZGVzIGFyZSB0aGUgb25seSB1c2VmdWwgYm9uZGluZyBtb2RlczsgdGhlIG90aGVyIG1vZGVzIHJlcXVpcmUgYWxsCitsaW5rcyB0byB0ZXJtaW5hdGUgb24gdGhlIHNhbWUgcGVlciBmb3IgdGhlbSB0byBiZWhhdmUgcmF0aW9uYWxseS4KKworYWN0aXZlLWJhY2t1cDogVGhpcyBpcyBnZW5lcmFsbHkgdGhlIHByZWZlcnJlZCBtb2RlLCBwYXJ0aWN1bGFybHkgaWYKKwl0aGUgc3dpdGNoZXMgaGF2ZSBhbiBJU0wgYW5kIHBsYXkgdG9nZXRoZXIgd2VsbC4gIElmIHRoZQorCW5ldHdvcmsgY29uZmlndXJhdGlvbiBpcyBzdWNoIHRoYXQgb25lIHN3aXRjaCBpcyBzcGVjaWZpY2FsbHkKKwlhIGJhY2t1cCBzd2l0Y2ggKGUuZy4sIGhhcyBsb3dlciBjYXBhY2l0eSwgaGlnaGVyIGNvc3QsIGV0YyksCisJdGhlbiB0aGUgcHJpbWFyeSBvcHRpb24gY2FuIGJlIHVzZWQgdG8gaW5zdXJlIHRoYXQgdGhlCisJcHJlZmVycmVkIGxpbmsgaXMgYWx3YXlzIHVzZWQgd2hlbiBpdCBpcyBhdmFpbGFibGUuCisKK2Jyb2FkY2FzdDogVGhpcyBtb2RlIGlzIHJlYWxseSBhIHNwZWNpYWwgcHVycG9zZSBtb2RlLCBhbmQgaXMgc3VpdGFibGUKKwlvbmx5IGZvciB2ZXJ5IHNwZWNpZmljIG5lZWRzLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSB0d28KKwlzd2l0Y2hlcyBhcmUgbm90IGNvbm5lY3RlZCAobm8gSVNMKSwgYW5kIHRoZSBuZXR3b3JrcyBiZXlvbmQKKwl0aGVtIGFyZSB0b3RhbGx5IGluZGVwZW5kYW50LiAgSW4gdGhpcyBjYXNlLCBpZiBpdCBpcworCW5lY2Vzc2FyeSBmb3Igc29tZSBzcGVjaWZpYyBvbmUtd2F5IHRyYWZmaWMgdG8gcmVhY2ggYm90aAorCWluZGVwZW5kZW50IG5ldHdvcmtzLCB0aGVuIHRoZSBicm9hZGNhc3QgbW9kZSBtYXkgYmUgc3VpdGFibGUuCisKKzEyLjIuMiBMaW5rIE1vbml0b3JpbmcgU2VsZWN0aW9uIGZvciBNdWx0aXBsZSBTd2l0Y2ggVG9wb2xvZ3kKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCVRoZSBjaG9pY2Ugb2YgbGluayBtb25pdG9yaW5nIHVsdGltYXRlbHkgZGVwZW5kcyB1cG9uIHlvdXIKK3N3aXRjaC4gIElmIHRoZSBzd2l0Y2ggY2FuIHJlbGlhYmx5IGZhaWwgcG9ydHMgaW4gcmVzcG9uc2UgdG8gb3RoZXIKK2ZhaWx1cmVzLCB0aGVuIGVpdGhlciB0aGUgTUlJIG9yIEFSUCBtb25pdG9ycyBzaG91bGQgd29yay4gIEZvcgorZXhhbXBsZSwgaW4gdGhlIGFib3ZlIGV4YW1wbGUsIGlmIHRoZSAicG9ydDMiIGxpbmsgZmFpbHMgYXQgdGhlIHJlbW90ZQorZW5kLCB0aGUgTUlJIG1vbml0b3IgaGFzIG5vIGRpcmVjdCBtZWFucyB0byBkZXRlY3QgdGhpcy4gIFRoZSBBUlAKK21vbml0b3IgY291bGQgYmUgY29uZmlndXJlZCB3aXRoIGEgdGFyZ2V0IGF0IHRoZSByZW1vdGUgZW5kIG9mIHBvcnQzLAordGh1cyBkZXRlY3RpbmcgdGhhdCBmYWlsdXJlIHdpdGhvdXQgc3dpdGNoIHN1cHBvcnQuCisKKwlJbiBnZW5lcmFsLCBob3dldmVyLCBpbiBhIG11bHRpcGxlIHN3aXRjaCB0b3BvbG9neSwgdGhlIEFSUAorbW9uaXRvciBjYW4gcHJvdmlkZSBhIGhpZ2hlciBsZXZlbCBvZiByZWxpYWJpbGl0eSBpbiBkZXRlY3RpbmcgbGluaworZmFpbHVyZXMuICBBZGRpdGlvbmFsbHksIGl0IHNob3VsZCBiZSBjb25maWd1cmVkIHdpdGggbXVsdGlwbGUgdGFyZ2V0cworKGF0IGxlYXN0IG9uZSBmb3IgZWFjaCBzd2l0Y2ggaW4gdGhlIG5ldHdvcmspLiAgVGhpcyB3aWxsIGluc3VyZSB0aGF0LAorcmVnYXJkbGVzcyBvZiB3aGljaCBzd2l0Y2ggaXMgYWN0aXZlLCB0aGUgQVJQIG1vbml0b3IgaGFzIGEgc3VpdGFibGUKK3RhcmdldCB0byBxdWVyeS4KKworCisxMi4zIFN3aXRjaCBCZWhhdmlvciBJc3N1ZXMgZm9yIEhpZ2ggQXZhaWxhYmlsaXR5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlZb3UgbWF5IGVuY291bnRlciBpc3N1ZXMgd2l0aCB0aGUgdGltaW5nIG9mIGxpbmsgdXAgYW5kIGRvd24KK3JlcG9ydGluZyBieSB0aGUgc3dpdGNoLgorCisJRmlyc3QsIHdoZW4gYSBsaW5rIGNvbWVzIHVwLCBzb21lIHN3aXRjaGVzIG1heSBpbmRpY2F0ZSB0aGF0Cit0aGUgbGluayBpcyB1cCAoY2FycmllciBhdmFpbGFibGUpLCBidXQgbm90IHBhc3MgdHJhZmZpYyBvdmVyIHRoZQoraW50ZXJmYWNlIGZvciBzb21lIHBlcmlvZCBvZiB0aW1lLiAgVGhpcyBkZWxheSBpcyB0eXBpY2FsbHkgZHVlIHRvCitzb21lIHR5cGUgb2YgYXV0b25lZ290aWF0aW9uIG9yIHJvdXRpbmcgcHJvdG9jb2wsIGJ1dCBtYXkgYWxzbyBvY2N1cgorZHVyaW5nIHN3aXRjaCBpbml0aWFsaXphdGlvbiAoZS5nLiwgZHVyaW5nIHJlY292ZXJ5IGFmdGVyIGEgc3dpdGNoCitmYWlsdXJlKS4gIElmIHlvdSBmaW5kIHRoaXMgdG8gYmUgYSBwcm9ibGVtLCBzcGVjaWZ5IGFuIGFwcHJvcHJpYXRlCit2YWx1ZSB0byB0aGUgdXBkZWxheSBib25kaW5nIG1vZHVsZSBvcHRpb24gdG8gZGVsYXkgdGhlIHVzZSBvZiB0aGUKK3JlbGV2YW50IGludGVyZmFjZShzKS4KKworCVNlY29uZCwgc29tZSBzd2l0Y2hlcyBtYXkgImJvdW5jZSIgdGhlIGxpbmsgc3RhdGUgb25lIG9yIG1vcmUKK3RpbWVzIHdoaWxlIGEgbGluayBpcyBjaGFuZ2luZyBzdGF0ZS4gIFRoaXMgb2NjdXJzIG1vc3QgY29tbW9ubHkgd2hpbGUKK3RoZSBzd2l0Y2ggaXMgaW5pdGlhbGl6aW5nLiAgQWdhaW4sIGFuIGFwcHJvcHJpYXRlIHVwZGVsYXkgdmFsdWUgbWF5CitoZWxwLCBidXQgbm90ZSB0aGF0IGlmIGFsbCBsaW5rcyBhcmUgZG93biwgdGhlbiB1cGRlbGF5IGlzIGlnbm9yZWQKK3doZW4gYW55IGxpbmsgYmVjb21lcyBhY3RpdmUgKHRoZSBzbGF2ZSBjbG9zZXN0IHRvIGNvbXBsZXRpbmcgaXRzCit1cGRlbGF5IGlzIGNob3NlbikuCisKKwlOb3RlIHRoYXQgd2hlbiBhIGJvbmRpbmcgaW50ZXJmYWNlIGhhcyBubyBhY3RpdmUgbGlua3MsIHRoZQorZHJpdmVyIHdpbGwgaW1tZWRpYXRlbHkgcmV1c2UgdGhlIGZpcnN0IGxpbmsgdGhhdCBnb2VzIHVwLCBldmVuIGlmCit1cGRlbGF5IHBhcmFtZXRlciB3YXMgc3BlY2lmaWVkLiAgSWYgdGhlcmUgYXJlIHNsYXZlIGludGVyZmFjZXMKK3dhaXRpbmcgZm9yIHRoZSB1cGRlbGF5IHRpbWVvdXQgdG8gZXhwaXJlLCB0aGUgaW50ZXJmYWNlIHRoYXQgZmlyc3QKK3dlbnQgaW50byB0aGF0IHN0YXRlIHdpbGwgYmUgaW1tZWRpYXRlbHkgcmV1c2VkLiAgVGhpcyByZWR1Y2VzIGRvd24KK3RpbWUgb2YgdGhlIG5ldHdvcmsgaWYgdGhlIHZhbHVlIG9mIHVwZGVsYXkgaGFzIGJlZW4gb3ZlcmVzdGltYXRlZC4KKworCUluIGFkZGl0aW9uIHRvIHRoZSBjb25jZXJucyBhYm91dCBzd2l0Y2ggdGltaW5ncywgaWYgeW91cgorc3dpdGNoZXMgdGFrZSBhIGxvbmcgdGltZSB0byBnbyBpbnRvIGJhY2t1cCBtb2RlLCBpdCBtYXkgYmUgZGVzaXJhYmxlCit0byBub3QgYWN0aXZhdGUgYSBiYWNrdXAgaW50ZXJmYWNlIGltbWVkaWF0ZWx5IGFmdGVyIGEgbGluayBnb2VzIGRvd24uCitGYWlsb3ZlciBtYXkgYmUgZGVsYXllZCB2aWEgdGhlIGRvd25kZWxheSBib25kaW5nIG1vZHVsZSBvcHRpb24uCisKKzEzLiBIYXJkd2FyZSBTcGVjaWZpYyBDb25zaWRlcmF0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlUaGlzIHNlY3Rpb24gY29udGFpbnMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBmb3IgY29uZmlndXJpbmcKK2JvbmRpbmcgb24gc3BlY2lmaWMgaGFyZHdhcmUgcGxhdGZvcm1zLCBvciBmb3IgaW50ZXJmYWNpbmcgYm9uZGluZword2l0aCBwYXJ0aWN1bGFyIHN3aXRjaGVzIG9yIG90aGVyIGRldmljZXMuCisKKzEzLjEgSUJNIEJsYWRlQ2VudGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJVGhpcyBhcHBsaWVzIHRvIHRoZSBKUzIwIGFuZCBzaW1pbGFyIHN5c3RlbXMuCisKKwlPbiB0aGUgSlMyMCBibGFkZXMsIHRoZSBib25kaW5nIGRyaXZlciBzdXBwb3J0cyBvbmx5CitiYWxhbmNlLXJyLCBhY3RpdmUtYmFja3VwLCBiYWxhbmNlLXRsYiBhbmQgYmFsYW5jZS1hbGIgbW9kZXMuICBUaGlzIGlzCitsYXJnZWx5IGR1ZSB0byB0aGUgbmV0d29yayB0b3BvbG9neSBpbnNpZGUgdGhlIEJsYWRlQ2VudGVyLCBkZXRhaWxlZAorYmVsb3cuCisKK0pTMjAgbmV0d29yayBhZGFwdGVyIGluZm9ybWF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJQWxsIEpTMjBzIGNvbWUgd2l0aCB0d28gQnJvYWRjb20gR2lnYWJpdCBFdGhlcm5ldCBwb3J0cworaW50ZWdyYXRlZCBvbiB0aGUgcGxhbmFyLiAgSW4gdGhlIEJsYWRlQ2VudGVyIGNoYXNzaXMsIHRoZSBldGgwIHBvcnQKK29mIGFsbCBKUzIwIGJsYWRlcyBpcyBoYXJkIHdpcmVkIHRvIEkvTyBNb2R1bGUgIzE7IHNpbWlsYXJseSwgYWxsIGV0aDEKK3BvcnRzIGFyZSB3aXJlZCB0byBJL08gTW9kdWxlICMyLiAgQW4gYWRkLW9uIEJyb2FkY29tIGRhdWdodGVyIGNhcmQKK2NhbiBiZSBpbnN0YWxsZWQgb24gYSBKUzIwIHRvIHByb3ZpZGUgdHdvIG1vcmUgR2lnYWJpdCBFdGhlcm5ldCBwb3J0cy4KK1RoZXNlIHBvcnRzLCBldGgyIGFuZCBldGgzLCBhcmUgd2lyZWQgdG8gSS9PIE1vZHVsZXMgMyBhbmQgNCwKK3Jlc3BlY3RpdmVseS4KKworCUVhY2ggSS9PIE1vZHVsZSBtYXkgY29udGFpbiBlaXRoZXIgYSBzd2l0Y2ggb3IgYSBwYXNzdGhyb3VnaAorbW9kdWxlICh3aGljaCBhbGxvd3MgcG9ydHMgdG8gYmUgZGlyZWN0bHkgY29ubmVjdGVkIHRvIGFuIGV4dGVybmFsCitzd2l0Y2gpLiAgU29tZSBib25kaW5nIG1vZGVzIHJlcXVpcmUgYSBzcGVjaWZpYyBCbGFkZUNlbnRlciBpbnRlcm5hbAorbmV0d29yayB0b3BvbG9neSBpbiBvcmRlciB0byBmdW5jdGlvbjsgdGhlc2UgYXJlIGRldGFpbGVkIGJlbG93LgorCisJQWRkaXRpb25hbCBCbGFkZUNlbnRlci1zcGVjaWZpYyBuZXR3b3JraW5nIGluZm9ybWF0aW9uIGNhbiBiZQorZm91bmQgaW4gdHdvIElCTSBSZWRib29rcyAod3d3LmlibS5jb20vcmVkYm9va3MpOgorCisiSUJNIGVTZXJ2ZXIgQmxhZGVDZW50ZXIgTmV0d29ya2luZyBPcHRpb25zIgorIklCTSBlU2VydmVyIEJsYWRlQ2VudGVyIExheWVyIDItNyBOZXR3b3JrIFN3aXRjaGluZyIKKworQmxhZGVDZW50ZXIgbmV0d29ya2luZyBjb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCUJlY2F1c2UgYSBCbGFkZUNlbnRlciBjYW4gYmUgY29uZmlndXJlZCBpbiBhIHZlcnkgbGFyZ2UgbnVtYmVyCitvZiB3YXlzLCB0aGlzIGRpc2N1c3Npb24gd2lsbCBiZSBjb25maW5lZCB0byBkZXNjcmliaW5nIGJhc2ljCitjb25maWd1cmF0aW9ucy4KKworCU5vcm1hbGx5LCBFdGhlcm5ldCBTd2l0Y2ggTW9kdWxlcyAoRVNNKSBhcmUgdXNlZCBpbiBJL08KK21vZHVsZXMgMSBhbmQgMi4gIEluIHRoaXMgY29uZmlndXJhdGlvbiwgdGhlIGV0aDAgYW5kIGV0aDEgcG9ydHMgb2YgYQorSlMyMCB3aWxsIGJlIGNvbm5lY3RlZCB0byBkaWZmZXJlbnQgaW50ZXJuYWwgc3dpdGNoZXMgKGluIHRoZQorcmVzcGVjdGl2ZSBJL08gbW9kdWxlcykuCisKKwlBbiBvcHRpY2FsIHBhc3N0aHJ1IG1vZHVsZSAoT1BNKSBjb25uZWN0cyB0aGUgSS9PIG1vZHVsZQorZGlyZWN0bHkgdG8gYW4gZXh0ZXJuYWwgc3dpdGNoLiAgQnkgdXNpbmcgT1BNcyBpbiBJL08gbW9kdWxlICMxIGFuZAorIzIsIHRoZSBldGgwIGFuZCBldGgxIGludGVyZmFjZXMgb2YgYSBKUzIwIGNhbiBiZSByZWRpcmVjdGVkIHRvIHRoZQorb3V0c2lkZSB3b3JsZCBhbmQgY29ubmVjdGVkIHRvIGEgY29tbW9uIGV4dGVybmFsIHN3aXRjaC4KKworCURlcGVuZGluZyB1cG9uIHRoZSBtaXggb2YgRVNNIGFuZCBPUE0gbW9kdWxlcywgdGhlIG5ldHdvcmsKK3dpbGwgYXBwZWFyIHRvIGJvbmRpbmcgYXMgZWl0aGVyIGEgc2luZ2xlIHN3aXRjaCB0b3BvbG9neSAoYWxsIE9QTQorbW9kdWxlcykgb3IgYXMgYSBtdWx0aXBsZSBzd2l0Y2ggdG9wb2xvZ3kgKG9uZSBvciBtb3JlIEVTTSBtb2R1bGVzLAoremVybyBvciBtb3JlIE9QTSBtb2R1bGVzKS4gIEl0IGlzIGFsc28gcG9zc2libGUgdG8gY29ubmVjdCBFU00gbW9kdWxlcwordG9nZXRoZXIsIHJlc3VsdGluZyBpbiBhIGNvbmZpZ3VyYXRpb24gbXVjaCBsaWtlIHRoZSBleGFtcGxlIGluICJIaWdoCitBdmFpbGFiaWxpdHkgaW4gYSBtdWx0aXBsZSBzd2l0Y2ggdG9wb2xvZ3kuIgorCitSZXF1aXJlbWVudHMgZm9yIHNwZWNpZmMgbW9kZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJVGhlIGJhbGFuY2UtcnIgbW9kZSByZXF1aXJlcyB0aGUgdXNlIG9mIE9QTSBtb2R1bGVzIGZvcgorZGV2aWNlcyBpbiB0aGUgYm9uZCwgYWxsIGNvbm5lY3RlZCB0byBhbiBjb21tb24gZXh0ZXJuYWwgc3dpdGNoLiAgVGhhdAorc3dpdGNoIG11c3QgYmUgY29uZmlndXJlZCBmb3IgImV0aGVyY2hhbm5lbCIgb3IgInRydW5raW5nIiBvbiB0aGUKK2FwcHJvcHJpYXRlIHBvcnRzLCBhcyBpcyB1c3VhbCBmb3IgYmFsYW5jZS1yci4KKworCVRoZSBiYWxhbmNlLWFsYiBhbmQgYmFsYW5jZS10bGIgbW9kZXMgd2lsbCBmdW5jdGlvbiB3aXRoCitlaXRoZXIgc3dpdGNoIG1vZHVsZXMgb3IgcGFzc3Rocm91Z2ggbW9kdWxlcyAob3IgYSBtaXgpLiAgVGhlIG9ubHkKK3NwZWNpZmljIHJlcXVpcmVtZW50IGZvciB0aGVzZSBtb2RlcyBpcyB0aGF0IGFsbCBuZXR3b3JrIGludGVyZmFjZXMKK211c3QgYmUgYWJsZSB0byByZWFjaCBhbGwgZGVzdGluYXRpb25zIGZvciB0cmFmZmljIHNlbnQgb3ZlciB0aGUKK2JvbmRpbmcgZGV2aWNlIChpLmUuLCB0aGUgbmV0d29yayBtdXN0IGNvbnZlcmdlIGF0IHNvbWUgcG9pbnQgb3V0c2lkZQordGhlIEJsYWRlQ2VudGVyKS4KKworCVRoZSBhY3RpdmUtYmFja3VwIG1vZGUgaGFzIG5vIGFkZGl0aW9uYWwgcmVxdWlyZW1lbnRzLgorCitMaW5rIG1vbml0b3JpbmcgaXNzdWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlXaGVuIGFuIEV0aGVybmV0IFN3aXRjaCBNb2R1bGUgaXMgaW4gcGxhY2UsIG9ubHkgdGhlIEFSUAorbW9uaXRvciB3aWxsIHJlbGlhYmx5IGRldGVjdCBsaW5rIGxvc3MgdG8gYW4gZXh0ZXJuYWwgc3dpdGNoLiAgVGhpcyBpcworbm90aGluZyB1bnVzdWFsLCBidXQgZXhhbWluYXRpb24gb2YgdGhlIEJsYWRlQ2VudGVyIGNhYmluZXQgd291bGQKK3N1Z2dlc3QgdGhhdCB0aGUgImV4dGVybmFsIiBuZXR3b3JrIHBvcnRzIGFyZSB0aGUgZXRoZXJuZXQgcG9ydHMgZm9yCit0aGUgc3lzdGVtLCB3aGVuIGl0IGZhY3QgdGhlcmUgaXMgYSBzd2l0Y2ggYmV0d2VlbiB0aGVzZSAiZXh0ZXJuYWwiCitwb3J0cyBhbmQgdGhlIGRldmljZXMgb24gdGhlIEpTMjAgc3lzdGVtIGl0c2VsZi4gIFRoZSBNSUkgbW9uaXRvciBpcworb25seSBhYmxlIHRvIGRldGVjdCBsaW5rIGZhaWx1cmVzIGJldHdlZW4gdGhlIEVTTSBhbmQgdGhlIEpTMjAgc3lzdGVtLgorCisJV2hlbiBhIHBhc3N0aHJvdWdoIG1vZHVsZSBpcyBpbiBwbGFjZSwgdGhlIE1JSSBtb25pdG9yIGRvZXMKK2RldGVjdCBmYWlsdXJlcyB0byB0aGUgImV4dGVybmFsIiBwb3J0LCB3aGljaCBpcyB0aGVuIGRpcmVjdGx5Citjb25uZWN0ZWQgdG8gdGhlIEpTMjAgc3lzdGVtLgorCitPdGhlciBjb25jZXJucworLS0tLS0tLS0tLS0tLS0KKworCVRoZSBTZXJpYWwgT3ZlciBMQU4gbGluayBpcyBlc3RhYmxpc2hlZCBvdmVyIHRoZSBwcmltYXJ5CitldGhlcm5ldCAoZXRoMCkgb25seSwgdGhlcmVmb3JlLCBhbnkgbG9zcyBvZiBsaW5rIHRvIGV0aDAgd2lsbCByZXN1bHQKK2luIGxvc2luZyB5b3VyIFNvTCBjb25uZWN0aW9uLiAgSXQgd2lsbCBub3QgZmFpbCBvdmVyIHdpdGggb3RoZXIKK25ldHdvcmsgdHJhZmZpYy4KKworCUl0IG1heSBiZSBkZXNpcmFibGUgdG8gZGlzYWJsZSBzcGFubmluZyB0cmVlIG9uIHRoZSBzd2l0Y2gKKyhlaXRoZXIgdGhlIGludGVybmFsIEV0aGVybmV0IFN3aXRjaCBNb2R1bGUsIG9yIGFuIGV4dGVybmFsIHN3aXRjaCkgdG8KK2F2b2lkIGZhaWwtb3ZlciBkZWxheXMgaXNzdWVzIHdoZW4gdXNpbmcgYm9uZGluZy4KKworCQorMTQuIEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMS4gIElzIGl0IFNNUCBzYWZlPworCisJWWVzLiBUaGUgb2xkIDIuMC54eCBjaGFubmVsIGJvbmRpbmcgcGF0Y2ggd2FzIG5vdCBTTVAgc2FmZS4KK1RoZSBuZXcgZHJpdmVyIHdhcyBkZXNpZ25lZCB0byBiZSBTTVAgc2FmZSBmcm9tIHRoZSBzdGFydC4KKworMi4gIFdoYXQgdHlwZSBvZiBjYXJkcyB3aWxsIHdvcmsgd2l0aCBpdD8KKworCUFueSBFdGhlcm5ldCB0eXBlIGNhcmRzICh5b3UgY2FuIGV2ZW4gbWl4IGNhcmRzIC0gYSBJbnRlbAorRXRoZXJFeHByZXNzIFBSTy8xMDAgYW5kIGEgM2NvbSAzYzkwNWIsIGZvciBleGFtcGxlKS4gIFRoZXkgbmVlZCBub3QKK2JlIG9mIHRoZSBzYW1lIHNwZWVkLgorCiszLiAgSG93IG1hbnkgYm9uZGluZyBkZXZpY2VzIGNhbiBJIGhhdmU/CisKKwlUaGVyZSBpcyBubyBsaW1pdC4KKworNC4gIEhvdyBtYW55IHNsYXZlcyBjYW4gYSBib25kaW5nIGRldmljZSBoYXZlPworCisJVGhpcyBpcyBsaW1pdGVkIG9ubHkgYnkgdGhlIG51bWJlciBvZiBuZXR3b3JrIGludGVyZmFjZXMgTGludXgKK3N1cHBvcnRzIGFuZC9vciB0aGUgbnVtYmVyIG9mIG5ldHdvcmsgY2FyZHMgeW91IGNhbiBwbGFjZSBpbiB5b3VyCitzeXN0ZW0uCisKKzUuICBXaGF0IGhhcHBlbnMgd2hlbiBhIHNsYXZlIGxpbmsgZGllcz8KKworCUlmIGxpbmsgbW9uaXRvcmluZyBpcyBlbmFibGVkLCB0aGVuIHRoZSBmYWlsaW5nIGRldmljZSB3aWxsIGJlCitkaXNhYmxlZC4gIFRoZSBhY3RpdmUtYmFja3VwIG1vZGUgd2lsbCBmYWlsIG92ZXIgdG8gYSBiYWNrdXAgbGluaywgYW5kCitvdGhlciBtb2RlcyB3aWxsIGlnbm9yZSB0aGUgZmFpbGVkIGxpbmsuICBUaGUgbGluayB3aWxsIGNvbnRpbnVlIHRvIGJlCittb25pdG9yZWQsIGFuZCBzaG91bGQgaXQgcmVjb3ZlciwgaXQgd2lsbCByZWpvaW4gdGhlIGJvbmQgKGluIHdoYXRldmVyCittYW5uZXIgaXMgYXBwcm9wcmlhdGUgZm9yIHRoZSBtb2RlKS4gU2VlIHRoZSBzZWN0aW9uIG9uIEhpZ2gKK0F2YWlsYWJpbGl0eSBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKwkKKwlMaW5rIG1vbml0b3JpbmcgY2FuIGJlIGVuYWJsZWQgdmlhIGVpdGhlciB0aGUgbWlpbW9uIG9yCithcnBfaW50ZXJ2YWwgcGFyYW10ZXJzIChkZXNjcmliZWQgaW4gdGhlIG1vZHVsZSBwYXJhbXRlcnMgc2VjdGlvbiwKK2Fib3ZlKS4gIEluIGdlbmVyYWwsIG1paW1vbiBtb25pdG9ycyB0aGUgY2FycmllciBzdGF0ZSBhcyBzZW5zZWQgYnkKK3RoZSB1bmRlcmx5aW5nIG5ldHdvcmsgZGV2aWNlLCBhbmQgdGhlIGFycCBtb25pdG9yIChhcnBfaW50ZXJ2YWwpCittb25pdG9ycyBjb25uZWN0aXZpdHkgdG8gYW5vdGhlciBob3N0IG9uIHRoZSBsb2NhbCBuZXR3b3JrLgorCisJSWYgbm8gbGluayBtb25pdG9yaW5nIGlzIGNvbmZpZ3VyZWQsIHRoZSBib25kaW5nIGRyaXZlciB3aWxsCitiZSB1bmFibGUgdG8gZGV0ZWN0IGxpbmsgZmFpbHVyZXMsIGFuZCB3aWxsIGFzc3VtZSB0aGF0IGFsbCBsaW5rcyBhcmUKK2Fsd2F5cyBhdmFpbGFibGUuICBUaGlzIHdpbGwgbGlrZWx5IHJlc3VsdCBpbiBsb3N0IHBhY2tldHMsIGFuZCBhCityZXN1bHRpbmcgZGVncmVkYXRpb24gb2YgcGVyZm9ybWFuY2UuICBUaGUgcHJlY2lzZSBwZXJmb3JtYW5jZSBsb3NzCitkZXBlbmRzIHVwb24gdGhlIGJvbmRpbmcgbW9kZSBhbmQgbmV0d29yayBjb25maWd1cmF0aW9uLgorCis2LiAgQ2FuIGJvbmRpbmcgYmUgdXNlZCBmb3IgSGlnaCBBdmFpbGFiaWxpdHk/CisKKwlZZXMuICBTZWUgdGhlIHNlY3Rpb24gb24gSGlnaCBBdmFpbGFiaWxpdHkgZm9yIGRldGFpbHMuCisKKzcuICBXaGljaCBzd2l0Y2hlcy9zeXN0ZW1zIGRvZXMgaXQgd29yayB3aXRoPworCisJVGhlIGZ1bGwgYW5zd2VyIHRvIHRoaXMgZGVwZW5kcyB1cG9uIHRoZSBkZXNpcmVkIG1vZGUuCisKKwlJbiB0aGUgYmFzaWMgYmFsYW5jZSBtb2RlcyAoYmFsYW5jZS1yciBhbmQgYmFsYW5jZS14b3IpLCBpdAord29ya3Mgd2l0aCBhbnkgc3lzdGVtIHRoYXQgc3VwcG9ydHMgZXRoZXJjaGFubmVsIChhbHNvIGNhbGxlZAordHJ1bmtpbmcpLiAgTW9zdCBtYW5hZ2VkIHN3aXRjaGVzIGN1cnJlbnRseSBhdmFpbGFibGUgaGF2ZSBzdWNoCitzdXBwb3J0LCBhbmQgbWFueSB1bm1hbmFuZ2VkIHN3aXRjaGVzIGFzIHdlbGwuCisKKwlUaGUgYWR2YW5jZWQgYmFsYW5jZSBtb2RlcyAoYmFsYW5jZS10bGIgYW5kIGJhbGFuY2UtYWxiKSBkbworbm90IGhhdmUgc3BlY2lhbCBzd2l0Y2ggcmVxdWlyZW1lbnRzLCBidXQgZG8gbmVlZCBkZXZpY2UgZHJpdmVycyB0aGF0CitzdXBwb3J0IHNwZWNpZmljIGZlYXR1cmVzIChkZXNjcmliZWQgaW4gdGhlIGFwcHJvcHJpYXRlIHNlY3Rpb24gdW5kZXIKK21vZHVsZSBwYXJhbXRlcnMsIGFib3ZlKS4KKworCUluIDgwMi4zYWQgbW9kZSwgaXQgd29ya3Mgd2l0aCB3aXRoIHN5c3RlbXMgdGhhdCBzdXBwb3J0IElFRUUKKzgwMi4zYWQgRHluYW1pYyBMaW5rIEFnZ3JlZ2F0aW9uLiAgTW9zdCBtYW5hZ2VkIGFuZCBtYW55IHVubWFuYWdlZAorc3dpdGNoZXMgY3VycmVudGx5IGF2YWlsYWJsZSBzdXBwb3J0IDgwMi4zYWQuCisKKyAgICAgICAgVGhlIGFjdGl2ZS1iYWNrdXAgbW9kZSBzaG91bGQgd29yayB3aXRoIGFueSBMYXllci1JSSBzd2l0Y2guCisKKzguICBXaGVyZSBkb2VzIGEgYm9uZGluZyBkZXZpY2UgZ2V0IGl0cyBNQUMgYWRkcmVzcyBmcm9tPworCisJSWYgbm90IGV4cGxpY2l0bHkgY29uZmlndXJlZCB3aXRoIGlmY29uZmlnLCB0aGUgTUFDIGFkZHJlc3Mgb2YKK3RoZSBib25kaW5nIGRldmljZSBpcyB0YWtlbiBmcm9tIGl0cyBmaXJzdCBzbGF2ZSBkZXZpY2UuIFRoaXMgTUFDCithZGRyZXNzIGlzIHRoZW4gcGFzc2VkIHRvIGFsbCBmb2xsb3dpbmcgc2xhdmVzIGFuZCByZW1haW5zIHBlcnNpc3RlbnQKKyhldmVuIGlmIHRoZSB0aGUgZmlyc3Qgc2xhdmUgaXMgcmVtb3ZlZCkgdW50aWwgdGhlIGJvbmRpbmcgZGV2aWNlIGlzCiticm91Z2h0IGRvd24gb3IgcmVjb25maWd1cmVkLgorCisJSWYgeW91IHdpc2ggdG8gY2hhbmdlIHRoZSBNQUMgYWRkcmVzcywgeW91IGNhbiBzZXQgaXQgd2l0aAoraWZjb25maWc6CisKKyMgaWZjb25maWcgYm9uZDAgaHcgZXRoZXIgMDA6MTE6MjI6MzM6NDQ6NTUKKworCVRoZSBNQUMgYWRkcmVzcyBjYW4gYmUgYWxzbyBjaGFuZ2VkIGJ5IGJyaW5naW5nIGRvd24vdXAgdGhlCitkZXZpY2UgYW5kIHRoZW4gY2hhbmdpbmcgaXRzIHNsYXZlcyAob3IgdGhlaXIgb3JkZXIpOgorCisjIGlmY29uZmlnIGJvbmQwIGRvd24gOyBtb2Rwcm9iZSAtciBib25kaW5nCisjIGlmY29uZmlnIGJvbmQwIC4uLi4gdXAKKyMgaWZlbnNsYXZlIGJvbmQwIGV0aC4uLgorCisJVGhpcyBtZXRob2Qgd2lsbCBhdXRvbWF0aWNhbGx5IHRha2UgdGhlIGFkZHJlc3MgZnJvbSB0aGUgbmV4dAorc2xhdmUgdGhhdCBpcyBhZGRlZC4KKworCVRvIHJlc3RvcmUgeW91ciBzbGF2ZXMnIE1BQyBhZGRyZXNzZXMsIHlvdSBuZWVkIHRvIGRldGFjaCB0aGVtCitmcm9tIHRoZSBib25kIChgaWZlbnNsYXZlIC1kIGJvbmQwIGV0aDAnKS4gVGhlIGJvbmRpbmcgZHJpdmVyIHdpbGwKK3RoZW4gcmVzdG9yZSB0aGUgTUFDIGFkZHJlc3NlcyB0aGF0IHRoZSBzbGF2ZXMgaGFkIGJlZm9yZSB0aGV5IHdlcmUKK2Vuc2xhdmVkLgorCisxNS4gUmVzb3VyY2VzIGFuZCBMaW5rcworPT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBib25kaW5nIGRyaXZlciBjYW4gYmUgZm91bmQgaW4gdGhlIGxhdGVzdAordmVyc2lvbiBvZiB0aGUgbGludXgga2VybmVsLCBmb3VuZCBvbiBodHRwOi8va2VybmVsLm9yZworCitEaXNjdXNzaW9ucyByZWdhcmRpbmcgdGhlIGJvbmRpbmcgZHJpdmVyIHRha2UgcGxhY2UgcHJpbWFyaWx5IG9uIHRoZQorYm9uZGluZy1kZXZlbCBtYWlsaW5nIGxpc3QsIGhvc3RlZCBhdCBzb3VyY2Vmb3JnZS5uZXQuICBJZiB5b3UgaGF2ZQorcXVlc3Rpb25zIG9yIHByb2JsZW1zLCBwb3N0IHRoZW0gdG8gdGhlIGxpc3QuCisKK2JvbmRpbmctZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0CisKK2h0dHBzOi8vbGlzdHMuc291cmNlZm9yZ2UubmV0L2xpc3RzL2xpc3RpbmZvL2JvbmRpbmctZGV2ZWwKKworVGhlcmUgaXMgYWxzbyBhIHByb2plY3Qgc2l0ZSBvbiBzb3VyY2Vmb3JnZS4KKworaHR0cDovL3d3dy5zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvYm9uZGluZworCitEb25hbGQgQmVja2VyJ3MgRXRoZXJuZXQgRHJpdmVycyBhbmQgZGlhZyBwcm9ncmFtcyBtYXkgYmUgZm91bmQgYXQgOgorIC0gaHR0cDovL3d3dy5zY3lsZC5jb20vbmV0d29yay8KKworWW91IHdpbGwgYWxzbyBmaW5kIGEgbG90IG9mIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBFdGhlcm5ldCwgTldheSwgTUlJLAorZXRjLiBhdCB3d3cuc2N5bGQuY29tLgorCistLSBFTkQgLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9icmlkZ2UudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JyaWRnZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRhZTJkYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9icmlkZ2UudHh0CkBAIC0wLDAgKzEsOCBAQAorSW4gb3JkZXIgdG8gdXNlIHRoZSBFdGhlcm5ldCBicmlkZ2luZyBmdW5jdGlvbmFsaXR5LCB5b3UnbGwgbmVlZCB0aGUKK3VzZXJzcGFjZSB0b29scy4gVGhlc2UgcHJvZ3JhbXMgYW5kIGRvY3VtZW50YXRpb24gYXJlIGF2YWlsYWJsZQorYXQgaHR0cDovL2JyaWRnZS5zb3VyY2Vmb3JnZS5uZXQuICBUaGUgZG93bmxvYWQgcGFnZSBpcworaHR0cDovL3ByZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9icmlkZ2UuCisKK0lmIHlvdSBzdGlsbCBoYXZlIHF1ZXN0aW9ucywgZG9uJ3QgaGVzaXRhdGUgdG8gcG9zdCB0byB0aGUgbWFpbGluZyBsaXN0IAorKG1vcmUgaW5mbyBodHRwOi8vbGlzdHMub3NkbC5vcmcvbWFpbG1hbi9saXN0aW5mby9icmlkZ2UpLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY29teC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY29teC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE1MjZlYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jb214LnR4dApAQCAtMCwwICsxLDI0OCBAQAorCisJCUNPTVggZHJpdmVycyBmb3IgdGhlIDIuMiBrZXJuZWwKKworT3JpZ2luYWxseSB3cml0dGVuIGJ5OiBUaXZhZGFyIFN6ZW1ldGh5LCA8dGl2QGl0Yy5odT4KK0N1cnJlbnRseSBtYWludGFpbmVkIGJ5OiBHZXJnZWx5IE1hZGFyYXN6IDxnb3Jnb0BpdGMuaHU+CisKK0xhc3QgY2hhbmdlOiAyMS8wNi8xOTk5LgorCitJTlRST0RVQ1RJT04KKworVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIHNvZnR3YXJlIGRyaXZlcnMgYW5kIHRoZWlyIHVzZSBmb3IgdGhlIAorQ09NWCBsaW5lIG9mIHN5bmNocm9ub3VzIHNlcmlhbCBhZGFwdGVycyBmb3IgTGludXggdmVyc2lvbiAyLjIuMCBhbmQKK2Fib3ZlLgorVGhlIGNhcmRzIGFyZSBwcm9kdWNlZCBhbmQgc29sZCBieSBJVEMtUHJvIEx0ZC4gQnVkYXBlc3QsIEh1bmdhcnkKK0ZvciBmdXJ0aGVyIGluZm8gY29udGFjdCA8aW5mb0BpdGMuaHU+IAorb3IgaHR0cDovL3d3dy5pdGMuaHUgKG1vc3RseSBpbiBIdW5nYXJpYW4pLgorVGhlIGZpcm13YXJlIGZpbGVzIGFuZCBzb2Z0d2FyZSBhcmUgYXZhaWxhYmxlIGZyb20gZnRwOi8vZnRwLml0Yy5odQorCitDdXJyZW50bHksIHRoZSBkcml2ZXJzIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBjYXJkcyBhbmQgcHJvdG9jb2xzOgorCitDT01YICgyeDY0IGticHMgaW50ZWxsaWdlbnQgYm9hcmQpCitDTVggKDF4MjU2ICsgMXgxMjgga2JwcyBpbnRlbGxpZ2VudCBib2FyZCkKK0hpQ09NWCAoMngyTWJwcyBpbnRlbGxpZ2VudCBib2FyZCkKK0xvQ09NWCAoMXg1MTIga2JwcyBwYXNzaXZlIGJvYXJkKQorTWl4Q09NICgxeDUxMiBvciAyeDUxMmticHMgcGFzc2l2ZSBib2FyZCB3aXRoIGEgaGFyZHdhcmUgd2F0Y2hkb2cgYW4KKwlvcHRpb25hbCBCUkkgaW50ZXJmYWNlIGFuZCBvcHRpb25hbCBmbGFzaFJPTSAoMS0zMk0pKQorU2xpY2VDT00JKDF4Mk1icHMgY2hhbm5lbGl6ZWQgRTEgYm9hcmQpCitQY2lDT00JKFgyMSkKKworQXQgdGhlIG1vbWVudCBvZiB3cml0aW5nIHRoaXMgZG9jdW1lbnQsIHRoZSAoQ2lzY28pLUhETEMsIExBUEIsIFN5bmNQUFAgYW5kCitGcmFtZSBSZWxheSAoRFRFLCByZmMxMjk0IElQIGVuY2Fwc3VsYXRpb24gd2l0aCBwYXJ0aWFsbHkgaW1wbGVtZW50ZWQgUTkzM2EgCitMTUkpIHByb3RvY29scyBhcmUgYXZhaWxhYmxlIGFzIGxpbmstbGV2ZWwgcHJvdG9jb2wuIAorWC4yNSBzdXBwb3J0IGlzIGJlaW5nIHdvcmtlZCBvbi4KKworVVNBR0UKKworTG9hZCB0aGUgY29teC5vIG1vZHVsZSBhbmQgdGhlIGhhcmR3YXJlLXNwZWNpZmljIGFuZCBwcm90b2NvbC1zcGVjaWZpYyAKK21vZHVsZXMgeW91J2xsIG5lZWQgaW50byB0aGUgcnVubmluZyBrZXJuZWwgdXNpbmcgdGhlIGluc21vZCB1dGlsaXR5LgorVGhpcyBjcmVhdGVzIHRoZSAvcHJvYy9jb214IGRpcmVjdG9yeS4KK1NlZSB0aGUgZXhhbXBsZSBzY3JpcHRzIGluIHRoZSAnZXRjJyBkaXJlY3RvcnkuCisKKy9wcm9jIElOVEVSRkFDRSBJTlRSTworCitUaGUgQ09NWCBkcml2ZXIgc2V0IGhhcyBhIG5ldyB0eXBlIG9mIHVzZXIgaW50ZXJmYWNlIGJhc2VkIG9uIHRoZSAvcHJvYyAKK2ZpbGVzeXN0ZW0gd2hpY2ggZWxpbWluYXRlcyB0aGUgbmVlZCBmb3IgZXh0ZXJuYWwgdXNlci1sYW5kIHNvZnR3YXJlIGRvaW5nIAorSU9DVEwgY2FsbHMuIAorRWFjaCBuZXR3b3JrIGludGVyZmFjZSBvciBkZXZpY2UgKGkuZS4gdGhvc2Ugb25lcyB5b3UgY29uZmlndXJlIHdpdGggJ2lmY29uZmlnJworYW5kICdyb3V0ZScgZXRjLikgaGFzIGEgY29ycmVzcG9uZGluZyBkaXJlY3RvcnkgdW5kZXIgL3Byb2MvY29teC4gWW91IGNhbgorZHluYW1pY2FsbHkgY3JlYXRlIGEgbmV3IGludGVyZmFjZSBieSBzYXlpbmcgJ21rZGlyIC9wcm9jL2NvbXgvY29teDAnIChvciB5b3UKK2NhbiBuYW1lIGl0IHdoYXRldmVyIHlvdSB3YW50IHVwIHRvIDggY2hhcmFjdGVycyBsb25nLCBjb214W25dIGlzIGp1c3QgYSAKK2NvbnZlbnRpb24pLgorR2VuZXJhbGx5IHRoZSBmaWxlcyBjb250YWluZWQgaW4gdGhlc2UgZGlyZWN0b3JpZXMgYXJlIHRleHQgZmlsZXMsIHdoaWNoIGNhbgorYmUgdmlld2VkIGJ5ICdjYXQgZmlsZW5hbWUnIGFuZCB5b3UgY2FuIHdyaXRlIGEgc3RyaW5nIHRvIHN1Y2ggYSBmaWxlIGJ5CitzYXlpbmcgJ2VjaG8gX3N0cmluZ18gPmZpbGVuYW1lJy4gVGhpcyBpcyB2ZXJ5IHNpbWlsYXIgdG8gdGhlIHN5c2N0bCBpbnRlcmZhY2UuCitEb24ndCB1c2UgYSB0ZXh0IGVkaXRvciB0byBlZGl0IHRoZXNlIGZpbGVzLCBhbHdheXMgdXNlICdlY2hvJyAob3IgJ2NhdCcKK3doZXJlIGFwcHJvcHJpYXRlKS4KK1doZW4geW91J3ZlIGNyZWF0ZWQgdGhlIGNvbXhbbl0gZGlyZWN0b3J5LCB0d28gZmlsZXMgYXJlIGNyZWF0ZWQgYXV0b21hZ2ljYWxseQoraW4gaXQ6ICdib2FyZHR5cGUnIGFuZCAncHJvdG9jb2wnLiBZb3UgaGF2ZSB0byBmaWxsIGluIHRoZXNlIGZpbGVzIGNvcnJlY3RseQorZm9yIHlvdXIgYm9hcmQgYW5kIHByb3RvY29sIHlvdSBpbnRlbmQgdG8gdXNlIChzZWUgdGhlIGJvYXJkIGFuZCBwcm90b2NvbCAKK2Rlc2NyaXB0aW9ucyBpbiB0aGlzIGZpbGUgYmVsb3cgb3IgdGhlIGV4YW1wbGUgc2NyaXB0cyBpbiB0aGUgJ2V0YycgZGlyZWN0b3J5KS4KK0FmdGVyIGZpbGxpbmcgaW4gdGhlc2UgZmlsZXMsIG90aGVyIGZpbGVzIHdpbGwgYXBwZWFyIGluIHRoZSBkaXJlY3RvcnkgZm9yIAorc2V0dGluZyB0aGUgdmFyaW91cyBoYXJkd2FyZS0gYW5kIHByb3RvY29sLXJlbGF0ZWQgaW5mb3JtYXRpb25zIChmb3IgZXhhbXBsZQoraXJxIGFuZCBpbyBhZGRyZXNzZXMsIGtlZXBhbGl2ZSB2YWx1ZXMgZXRjLikgVGhlc2UgZmlsZXMgYXJlIHNldCB0byBkZWZhdWx0IAordmFsdWVzIHVwb24gY3JlYXRpb24sIHNvIHlvdSBkb24ndCBuZWNlc3NhcmlseSBoYXZlIHRvIGNoYW5nZSBhbGwgb2YgdGhlbS4KKworV2hlbiB5b3UncmUgcmVhZHkgd2l0aCBmaWxsaW5nIGluIHRoZSBmaWxlcyBpbiB0aGUgY29teFtuXSBkaXJlY3RvcnksIHlvdSBjYW4KK2NvbmZpZ3VyZSB0aGUgY29ycmVzcG9uZGluZyBuZXR3b3JrIGludGVyZmFjZSB3aXRoIHRoZSBzdGFuZGFyZCBuZXR3b3JrIAorY29uZmlndXJhdGlvbiB1dGlsaXRpZXMuIElmIHlvdSdyZSB1bmFibGUgdG8gYnJpbmcgdGhlIGludGVyZmFjZXMgdXAsIGxvb2sgdXAKK3RoZSB2YXJpb3VzIGtlcm5lbCBsb2cgZmlsZXMgb24geW91ciBzeXN0ZW0sIGFuZCBjb25zdWx0IHRoZSBtZXNzYWdlcyBmb3IKK2EgcHJvYmFibGUgcmVhc29uLgorCitFWEFNUExFCisKK1RvIGNyZWF0ZSB0aGUgaW50ZXJmYWNlICdjb214MCcgd2hpY2ggaXMgdGhlIGZpcnN0IGNoYW5uZWwgb2YgYSBDT01YIGNhcmQ6CisKK2luc21vZCBjb214IAorIyBpbnNtb2QgY29teC1ody1jb214IDsgaW5zbW9kIGNvbXgtcHJvdG8tcHBwICAodGhlc2UgYXJlIHVzdWFsbHkKK2F1dG9sb2FkZWQgaWYgeW91IHVzZSB0aGUga2VybmVsIG1vZHVsZSBsb2FkZXIpCisKK21rZGlyIC9wcm9jL2NvbXgvY29teDAKK2VjaG8gY29teCA+L3Byb2MvY29teC9jb214MC9ib2FyZHR5cGUKK2VjaG8gMHgzNjAgPi9wcm9jL2NvbXgvY29teDAvaW8JCTwtIGp1bXBlci1zZWxlY3RhYmxlIEkvTyBwb3J0IAorZWNobyAweDBhID4vcHJvYy9jb214L2NvbXgwL2lycQkJPC0ganVtcGVyLXNlbGVjdGFibGUgSVJRIGxpbmUKK2VjaG8gMHhkMDAwID4vcHJvYy9jb214L2NvbXgwL21lbWFkZHIJPC0gc29mdHdhcmUtY29uZmlndXJhYmxlIG1lbW9yeQorCQkJCQkgICBhZGRyZXNzLiBDT01YIHVzZXMgNjQgS0IsIGFuZCB0aGlzCisJCQkJCSAgIGNhbiBiZTogMHhhMDAwLCAweGIwMDAsIDB4YzAwMCwgCisJCQkJCSAgIDB4ZDAwMCwgMHhlMDAwLiBBdm9pZCBjb25mbGljdHMKKwkJCQkJICAgd2l0aCBvdGhlciBoYXJkd2FyZS4KK2NhdCA8L2V0Yy9zaW9sMS5yb20gPi9wcm9jL2NvbXgvY29teDAvZmlybXdhcmUgPC0gdGhlIGZpcm13YXJlIGZvciB0aGUgY2FyZAorZWNobyBIRExDID4vcHJvYy9jb214L2NvbXgwL3Byb3RvY29sCTwtIHRoZSBkYXRhLWxpbmsgcHJvdG9jb2wKK2VjaG8gMTAgPi9wcm9jL2NvbXgvY29teDAva2VlcGFsaXZlCTwtIHRoZSBrZWVwYWxpdmUgZm9yIHRoZSBwcm90b2NvbAoraWZjb25maWcgY29teDAgMS4yLjMuNCBwb2ludG9wb2ludCA1LjYuNy44IG5ldG1hc2sgMjU1LjI1NS4yNTUuMjU1IDwtCisJCQkJCSAgIGZpbmFsbHkgY29uZmlndXJlIGl0IHdpdGggaWZjb25maWcKK0NoZWNrIGl0cyBzdGF0dXM6CitjYXQgL3Byb2MvY29teC9jb214MC9zdGF0dXMKKworSWYgeW91IHdhbnQgdG8gdXNlIHRoZSBzZWNvbmQgY2hhbm5lbCBvZiB0aGlzIGJvYXJkOgorCitta2RpciAvcHJvYy9jb214L2NvbXgxCitlY2hvIGNvbXggPi9wcm9jL2NvbXgvY29teDEvYm9hcmR0eXBlCitlY2hvIDB4MzYwID4vcHJvYy9jb214L2NvbXgxL2lvCQorZWNobyAxMCA+L3Byb2MvY29teC9jb214MS9pcnEJCQorZWNobyAweGQwMDAgPi9wcm9jL2NvbXgvY29teDEvbWVtYWRkcgorZWNobyAxID4vcHJvYy9jb214L2NvbXgxL2NoYW5uZWwJPC0gY2hhbm5lbHMgYXJlIG51bWJlcmVkIAorCQkJCQkgICBhcyAwIChkZWZhdWx0KSBhbmQgMQorCitOb3csIGNoZWNrIGlmIHRoZSBkcml2ZXIgcmVjb2duaXplZCB0aGF0IHlvdSdyZSBnb2luZyB0byB1c2UgdGhlIG90aGVyCitjaGFubmVsIG9mIHRoZSBzYW1lIGFkYXB0ZXI6CisKK2NhdCAvcHJvYy9jb214L2NvbXgwL3R3aW4KK2NvbXgxCitjYXQgL3Byb2MvY29teC9jb214MS90d2luCitjb214MAorCitZb3UgZG9uJ3QgaGF2ZSB0byBsb2FkIHRoZSBmaXJtd2FyZSB0d2ljZSwgaWYgeW91IHVzZSBib3RoIGNoYW5uZWxzIG9mCithbiBhZGFwdGVyLCBqdXN0IHdyaXRlIGl0IGludG8gdGhlIGNoYW5uZWwgMCdzIC9wcm9jIGZpcm13YXJlIGZpbGUuCisKK0RlZmF1bHQgdmFsdWVzOiBpbyAweDM2MCBmb3IgQ09NWCwgMHgzMjAgKEhJQ09NWCksIGlycSAxMCwgbWVtYWRkciAweGQwMDAwCisKK1RIRSBMT0NPTVggSEFSRFdBUkUgRFJJVkVSCisKK1RoZSBMb0NPTVggZHJpdmVyIGRvZXNuJ3QgcmVxdWlyZSBmaXJtd2FyZSwgYW5kIGl0IGRvZXNuJ3QgdXNlIG1lbW9yeSBlaXRoZXIsCitidXQgaXQgdXNlcyBETUEgY2hhbm5lbHMgMSBhbmQgMy4gWW91IGNhbiBzZXQgdGhlIGNsb2NrIHJhdGUgKGlmIGVuYWJsZWQgYnkKK2p1bXBlcnMgb24gdGhlIGJvYXJkKSBieSB3cml0aW5nIHRoZSBrYnBzIHZhbHVlIGludG8gdGhlIGZpbGUgbmFtZWQgJ2Nsb2NrJy4KK1NldCBpdCB0byAnZXh0ZXJuYWwnIChpdCBpcyB0aGUgZGVmYXVsdCkgaWYgeW91IGhhdmUgZXh0ZXJuYWwgY2xvY2sgc291cmNlLgorCisoTm90ZTogY3VycmVudGx5IHRoZSBMb0NPTVggZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgdGhlIGludGVybmFsIGNsb2NrKQorCitUSEUgQ09NWCwgQ01YIEFORCBISUNPTVggRFJJVkVSUworCitPbiB0aGUgSElDT01YLCBDT01YIGFuZCBDTVgsIHlvdSBoYXZlIHRvIGxvYWQgdGhlIGZpcm13YXJlIChpdCBpcyBkaWZmZXJlbnQgZm9yCit0aGUgdGhyZWUgY2FyZHMhKS4gQWxsIHRoZXNlIGFkYXB0ZXJzIGNhbiBzaGFyZSB0aGUgc2FtZSBtZW1vcnkKK2FkZHJlc3MgKHdlIHVzdWFsbHkgdXNlIDB4ZDAwMDApLiBPbiB0aGUgQ01YIHlvdSBjYW4gc2V0IHRoZSBpbnRlcm5hbAorY2xvY2sgcmF0ZSAoaWYgZW5hYmxlZCBieSBqdW1wZXJzIG9uIHRoZSBzbWFsbCBhZGFwdGVyIGJvYXJkcykgYnkgd3JpdGluZwordGhlIGticHMgdmFsdWUgaW50byB0aGUgJ2Nsb2NrJyBmaWxlLiBZb3UgaGF2ZSB0byBkbyB0aGlzIGJlZm9yZSBpbml0aWFsaXppbmcKK3RoZSBjYXJkLiBJZiB5b3UgdXNlIGJvdGggSElDT01YIGFuZCBDTVgvQ09NWCBjYXJkcywgaW5pdGlhbGl6ZSB0aGUgSElDT01YCitmaXJzdC4gVGhlIEkvTyBhZGRyZXNzIG9mIHRoZSBISUNPTVggYm9hcmQgaXMgbm90IGNvbmZpZ3VyYWJsZSBieSBhbnkKK21ldGhvZCBhdmFpbGFibGUgdG8gdGhlIHVzZXI6IGl0IGlzIGhhcmR3aXJlZCB0byAweDMyMCwgYW5kIGlmIHlvdSBoYXZlIHRvIAorY2hhbmdlIGl0LCBjb25zdWx0IElUQy1Qcm8gTHRkLgorCitUSEUgTUlYQ09NIERSSVZFUgorCitUaGUgTWl4Q09NIGJvYXJkIGRvZXNuJ3QgcmVxdWlyZSBmaXJtd2FyZSwgdGhlIGRyaXZlciBjb21tdW5pY2F0ZXMgd2l0aAoraXQgdGhyb3VnaCBJL08gcG9ydHMuIFlvdSBjYW4gaGF2ZSB0aHJlZSBvZiB0aGVzZSBjYXJkcyBpbiBvbmUgbWFjaGluZS4KKworVEhFIFNMSUNFQ09NIERSSVZFUgorCitUaGUgU2xpY2VDT00gYm9hcmQgZG9lc24ndCByZXF1aXJlIGZpcm13YXJlLiBZb3UgY2FuIGhhdmUgNCBvZiB0aGVzZSBjYXJkcworaW4gb25lIG1hY2hpbmUuIFRoZSBkcml2ZXIgZG9lc24ndCAoeWV0KSBzdXBwb3J0IHNoYXJlZCBpbnRlcnJ1cHRzLCBzbworeW91IHdpbGwgbmVlZCBhIHNlcGFyYXRlIElSUSBsaW5lIGZvciBldmVyeSBib2FyZC4KK1JlYWQgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NsaWNlY29tLnR4dCBmb3IgaGVscCBvbiBjb25maWd1cmluZwordGhpcyBhZGFwdGVyLgorCitUSEUgSERMQy9QUFAgTElORSBQUk9UT0NPTCBEUklWRVIKKworVGhlIEhETEMvU3luY1BQUCBsaW5lIHByb3RvY29sIGRyaXZlciB1c2VzIHRoZSBrZXJuZWwncyBidWlsdC1pbiBzeW5jcHBwCitkcml2ZXIgKHN5bmNwcHAubykuIFlvdSBkb24ndCBoYXZlIHRvIG1hbnVhbGx5IHNlbGVjdCBzeW5jcHBwLm8gd2hlbiBidWlsZGluZwordGhlIGtlcm5lbCwgdGhlIGRlcGVuZGVuY2llcyBjb21waWxlIGl0IGluIGF1dG9tYXRpY2FsbHkuCisKKworCisKK0VYQU1QTEUKKyhzZXR0aW5nIHVwIGh3IHBhcmFtZXRlcnMsIHNlZSBhYm92ZSkKKworIyB1c2luZyBIRExDOgorZWNobyBoZGxjID4vcHJvYy9jb214L2NvbXgwL3Byb3RvY29sCitlY2hvIDEwID4vcHJvYy9jb214L2NvbXgwL2tlZXBhbGl2ZQk8LSBub3QgbmVjZXNzYXJ5LCAxMCBpcyB0aGUgZGVmYXVsdAoraWZjb25maWcgY29teDAgMS4yLjMuNCBwb2ludG9wb2ludCA1LjYuNy44IG5ldG1hc2sgMjU1LjI1NS4yNTUuMjU1CisKKyhzZXR0aW5nIHVwIGh3IHBhcmFtZXRlcnMsIHNlZSBhYm92ZSkKKworIyB1c2luZyBQUFA6CitlY2hvIHBwcCA+L3Byb2MvY29teC9jb214MC9wcm90b2NvbAoraWZjb25maWcgY29teDAgdXAKK2lmY29uZmlnIGNvbXgwIDEuMi4zLjQgcG9pbnRvcG9pbnQgNS42LjcuOCBuZXRtYXNrIDI1NS4yNTUuMjU1LjI1NQorCisKK1RIRSBMQVBCIExJTkUgUFJPVE9DT0wgRFJJVkVSCisKK0ZvciB0aGlzLCB5b3UnbGwgbmVlZCB0byBjb25maWd1cmUgTEFQQiBzdXBwb3J0IChTZWUgJ0xBUEIgRGF0YSBMaW5rIERyaXZlcicgaW4KKydOZXR3b3JrIG9wdGlvbnMnIHNlY3Rpb24pIGludG8geW91ciBrZXJuZWwgKHRoYW5rcyB0byBKb25hdGhhbiBOYXlsb3IgZm9yIGhpcyAKK2V4Y2VsbGVudCBpbXBsZW1lbnRhdGlvbikuIAorY29teC1wcm90by1sYXBiLm8gcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBmaWxlcyBpbiB0aGUgYXBwcm9wcmlhdGUgZGlyZWN0b3J5CisodGhlIGRlZmF1bHQgdmFsdWVzIGluIHBhcmVucyk6IHQxICg1KSwgdDIgKDEpLCBuMiAoMjApLCBtb2RlIChEVEUsIFNURCkgYW5kCit3aW5kb3cgKDcpLiBBZ3JlZSB3aXRoIHRoZSBhZG1pbmlzdHJhdG9yIG9mIHlvdXIgcGVlciByb3V0ZXIgb24gdGhlc2UKK3NldHRpbmdzIChtb3N0IHBlb3BsZSB1c2UgZGVmYXVsdHMsIGJ1dCB5b3UgaGF2ZSB0byBrbm93IGlmIHlvdSBhcmUgRFRFIG9yCitEQ0UpLgorCitFWEFNUExFCisKKyhzZXR0aW5nIHVwIGh3IHBhcmFtZXRlcnMsIHNlZSBhYm92ZSkKK2VjaG8gbGFwYiA+L3Byb2MvY29teC9jb214MC9wcm90b2NvbAorZWNobyBkY2UgPi9wcm9jL2NvbXgvY29teDAvbW9kZQkJPC0gRENFIGludGVyZmFjZSBpbiB0aGlzIGV4YW1wbGUKK2lmY29uZmlnIGNvbXgwIDEuMi4zLjQgcG9pbnRvcG9pbnQgNS42LjcuOCBuZXRtYXNrIDI1NS4yNTUuMjU1LjI1NQorCisKK1RIRSBGUkFNRSBSRUxBWSBQUk9UT0NPTCBEUklWRVIKKworWW91IERPTidUIG5lZWQgYW55IG90aGVyIGZyYW1lIHJlbGF5IHJlbGF0ZWQgbW9kdWxlcyBmcm9tIHRoZSBrZXJuZWwgdG8gdXNlCitDT01YLUZyYW1lIFJlbGF5LiBUaGlzIHByb3RvY29sIGlzIGEgYml0IG1vcmUgY29tcGxpY2F0ZWQgdGhhbiB0aGUgb3RoZXJzLCAKK2JlY2F1c2UgaXQgYWxsb3dzIHRvIHVzZSAnc3ViaW50ZXJmYWNlcycgb3IgRExDSXMgd2l0aGluIG9uZSBwaHlzaWNhbCBkZXZpY2UuCitGaXJzdCB5b3UgaGF2ZSB0byBjcmVhdGUgdGhlICdtYXN0ZXInIGRldmljZSAodGhlIGFjdHVhbCBwaHlzaWNhbCBpbnRlcmZhY2UpCithcyB5b3Ugd291bGQgZG8gZm9yIG90aGVyIHByb3RvY29scy4gU3BlY2lmeSAnZnJhZCcgYXMgcHJvdG9jb2wgdHlwZS4KK05vdyB5b3UgY2FuIGJyaW5nIHRoaXMgaW50ZXJmYWNlIHVwIGJ5IHNheWluZyAnaWZjb25maWcgY29teDAgdXAnIChvciB3aGF0ZXZlcgoreW91J3ZlIG5hbWVkIHRoZSBpbnRlcmZhY2UpLiBEbyBub3QgYXNzaWduIGFueSBJUCBhZGRyZXNzIHRvIHRoaXMgaW50ZXJmYWNlCithbmQgZG8gbm90IHNldCBhbnkgcm91dGVzIHRocm91Z2ggaXQuCitUaGVuLCBzZXQgdXAgeW91ciBETENJcyB0aGUgZm9sbG93aW5nIHdheTogY3JlYXRlIGEgY29teCBpbnRlcmZhY2UgZm9yIGVhY2gKK0RMQ0kgeW91IGludGVuZCB0byB1c2UgKHdpdGggbWtkaXIpLCBhbmQgd3JpdGUgJ2RsY2knIHRvIHRoZSAnYm9hcmR0eXBlJyBmaWxlLCAKK2FuZCAnaWV0Zi1pcCcgdG8gdGhlICdwcm90b2NvbCcgZmlsZS4gQ3VycmVudGx5LCB0aGUgb25seSBzdXBwb3J0ZWQgCitlbmNhcHN1bGF0aW9uIHR5cGUgaXMgdGhpcyAoYWxzbyBjYWxsZWQgYXMgUkZDMTI5NC8xNDkwIElQIGVuY2Fwc3VsYXRpb24pLgorV3JpdGUgdGhlIERMQ0kgbnVtYmVyIHRvIHRoZSAnZGxjaScgZmlsZSwgYW5kIHdyaXRlIHRoZSBuYW1lIG9mIHRoZSBwaHlzaWNhbAorQ09NWCBkZXZpY2UgdG8gdGhlIGZpbGUgY2FsbGVkICdtYXN0ZXInLiAKK05vdyB5b3UgY2FuIGFzc2lnbiBhbiBJUCBhZGRyZXNzIHRvIHRoaXMgaW50ZXJmYWNlIGFuZCBzZXQgcm91dGVzIHVzaW5nIGl0LgorU2VlIHRoZSBleGFtcGxlIGZpbGUgZm9yIGZ1cnRoZXIgaW5mbyBhbmQgZXhhbXBsZSBjb25maWcgc2NyaXB0LgorTm90ZXM6IHRoaXMgZHJpdmVyIGltcGxlbWVudHMgYSBEVEUgaW50ZXJmYWNlIHdpdGggcGFydGlhbGx5IGltcGxlbWVudGVkCitROTMzYSBMTUkuCitZb3UgY2FuIGZpbmQgYW4gZXh0ZW5zaXZlbHkgY29tbWVudGVkIGV4YW1wbGUgaW4gdGhlICdldGMnIGRpcmVjdG9yeS4KKworRlVSVEhFUiAvcHJvYyBGSUxFUworCitib2FyZHR5cGU6CitUeXBlIG9mIHRoZSBoYXJkd2FyZS4gVmFsaWQgdmFsdWVzIGFyZToKKyAnY29teCcsICdoaWNvbXgnLCAnbG9jb214JywgJ2NteCcsICdzbGljZWNvbScuCisKK3Byb3RvY29sOgorRGF0YS1saW5rIHByb3RvY29sIG9uIHRoaXMgY2hhbm5lbC4gQ2FuIGJlOiBIRExDLCBMQVBCLCBQUFAsIEZSQUQKKworc3RhdHVzOgorWW91IGNhbiByZWFkIHRoZSBjaGFubmVsJ3MgYWN0dWFsIHN0YXR1cyBmcm9tIHRoZSAnc3RhdHVzJyBmaWxlLCBmb3IgZXhhbXBsZQorJ2NhdCAvcHJvYy9jb214L2NvbXgzL3N0YXR1cycuCisKK2xpbmV1cF9kZWxheToKK0ludGVycHJldGVkIGluIHNlY29uZHMgKGRlZmF1bHQgaXMgMSkuIFVzZWQgdG8gYXZvaWQgbGluZSBqaXR0ZXI6IHRoZSBzeXN0ZW0KK3dpbGwgY29uc2lkZXIgdGhlIGxpbmUgc3RhdHVzICdVUCcgb25seSBpZiBpdCBpcyB1cCBmb3IgYXQgbGVhc3QgdGhpcyBudW1iZXIKK29mIHNlY29uZHMuCisKK2RlYnVnOiAKK1lvdSBjYW4gc2V0IHZhcmlvdXMgZGVidWcgb3B0aW9ucyB0aHJvdWdoIHRoaXMgZmlsZS4gVmFsaWQgb3B0aW9ucyBhcmU6CisnY29teF9ldmVudHMnLCAnY29teF90eCcsICdjb214X3J4JywgJ2h3X2V2ZW50cycsICdod190eCcsICdod19yeCcuCitZb3UgY2FuIGVuYWJsZSBhIGRlYnVnIG9wdGlvbnMgYnkgd3JpdGluZyBpdHMgbmFtZSBwcmVwZW5kZWQgYnkgYSAnKycgaW50bwordGhlIGRlYnVnIGZpbGUsIGZvciBleGFtcGxlICdlY2hvICtjb214X3J4ID5jb214MC9kZWJ1ZycuIAorRGlzYWJsaW5nIGFuIG9wdGlvbiBoYXBwZW5zIHNpbWlsYXJseSwgdXNlIHRoZSAnLScgcHJlZml4IAorKGUuZy4gJ2VjaG8gLWh3X3J4ID5kZWJ1ZycpLgorRGVidWcgcmVzdWx0cyBjYW4gYmUgcmVhZCBmcm9tIHRoZSBkZWJ1ZyBmaWxlLCBmb3IgZXhhbXBsZTogCit0YWlsIC1mIC9wcm9jL2NvbXgvY29teDIvZGVidWcKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY29wcy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY29wcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UzNDRiNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jb3BzLnR4dApAQCAtMCwwICsxLDYzIEBACitUZXh0IEZpbGUgZm9yIHRoZSBDT1BTIExvY2FsVGFsayBMaW51eCBkcml2ZXIgKGNvcHMuYykuCisJQnkgSmF5IFNjaHVsaXN0IDxqc2NobHN0QHNhbWJhLm9yZz4KKworVGhpcyBkcml2ZXIgaGFzIHR3byBtb2RlcyBhbmQgdGhleSBhcmU6IERheW5hIG1vZGUgYW5kIFRhbmdlbnQgbW9kZS4KK0VhY2ggbW9kZSBjb3JyZXNwb25kcyB3aXRoIHRoZSB0eXBlIG9mIGNhcmQuIEl0IGhhcyBiZWVuIGZvdW5kCit0aGF0IHRoZXJlIGFyZSAyIG1haW4gdHlwZXMgb2YgY2FyZHMgYW5kIGFsbCBvdGhlciBjYXJkcyBhcmUKK3RoZSBzYW1lIGFuZCBqdXN0IGhhdmUgZGlmZmVyZW50IG5hbWVzIG9yIG9ubHkgaGF2ZSBtaW5vciBkaWZmZXJlbmNlcworc3VjaCBhcyBtb3JlIElPIHBvcnRzLiBBcyB0aGlzIGRyaXZlciBpcyB0ZXN0ZWQgaXQgd2lsbAorYmVjb21lIG1vcmUgY2xlYXIgZXhhY3RseSB3aGF0IGNhcmRzIGFyZSBzdXBwb3J0ZWQuIAorCitSaWdodCBub3cgdGhlc2UgY2FyZHMgYXJlIGtub3duIHRvIHdvcmsgd2l0aCB0aGUgQ09QUyBkcml2ZXIuIFRoZQorTFQtMjAwIGNhcmRzIHdvcmsgaW4gYSBzb21ld2hhdCBtb3JlIGxpbWl0ZWQgY2FwYWNpdHkgdGhhbiB0aGUKK0RMMjAwIGNhcmRzLCB3aGljaCB3b3JrIHZlcnkgd2VsbCBhbmQgYXJlIGluIHVzZSBieSBtYW55IHBlb3BsZS4KKworVEFOR0VOVCBkcml2ZXIgbW9kZToKKwlUYW5nZW50IEFUQi1JSSwgTm92ZWxsIE5MLTEwMDAsIERheXN0YXIgRGlnaXRhbCBMVC0yMDAKK0RBWU5BIGRyaXZlciBtb2RlOgorCURheW5hIERMMjAwMC9EYXluYVRhbGsgUEMgKEhhbGYgTGVuZ3RoKSwgQ09QUyBMVC05NSwKKwlGYXJhbGxvbiBQaG9uZU5FVCBQQyBJSUksIEZhcmFsbG9uIFBob25lTkVUIFBDIElJCitPdGhlciBjYXJkcyBwb3NzaWJseSBzdXBwb3J0ZWQgbW9kZSB1bmtub3duIHRob3VnaDoKKwlEYXluYSBETDIwMDAgKEZ1bGwgbGVuZ3RoKQorCitUaGUgQ09QUyBkcml2ZXIgZGVmYXVsdHMgdG8gdXNpbmcgRGF5bmEgbW9kZS4gVG8gY2hhbmdlIHRoZSBkcml2ZXIncyAKK21vZGUgaWYgeW91IGJ1aWx0IGEgZHJpdmVyIHdpdGggZHVhbCBzdXBwb3J0IHVzZSBib2FyZF90eXBlPTEgb3IKK2JvYXJkX3R5cGU9MiBmb3IgRGF5bmEgb3IgVGFuZ2VudCB3aXRoIGluc21vZC4KKworKiogT3BlcmF0aW9uL2xvYWRpbmcgb2YgdGhlIGRyaXZlci4KK1VzZSBtb2Rwcm9iZSBsaWtlIHRoaXM6CS9zYmluL21vZHByb2JlIGNvcHMubyAoSU8gIykgKElSUSAjKQorSWYgeW91IGRvIG5vdCBzcGVjaWZ5IGFueSBvcHRpb25zIHRoZSBkcml2ZXIgd2lsbCB0cnkgYW5kIHVzZSB0aGUgSU8gPSAweDI0MCwKK0lSUSA9IDUuIEFzIG9mIHJpZ2h0IG5vdyBJIHdvdWxkIG9ubHkgdXNlIElSUSA1IGZvciB0aGUgY2FyZCwgaWYgYXV0b3Byb2JpbmcuCisKK1RvIGxvYWQgbXVsdGlwbGUgQ09QUyBkcml2ZXIgTG9jYWx0YWxrIGNhcmRzIHlvdSBjYW4gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmcuCisKK2luc21vZCBjb3BzIGlvPTB4MjQwIGlycT01CitpbnNtb2QgLW8gY29wczIgY29wcyBpbz0weDI2MCBpcnE9MworCitPciBpbiBsaWxvLmNvbmYgcHV0IHNvbWV0aGluZyBsaWtlIHRoaXM6CisJYXBwZW5kPSJldGhlcj01LDB4MjQwLGx0MCBldGhlcj0zLDB4MjYwLGx0MSIKKworVGhlbiBicmluZyB1cCB0aGUgaW50ZXJmYWNlIHdpdGggaWZjb25maWcuIEl0IHdpbGwgbG9vayBzb21ldGhpbmcgbGlrZSB0aGlzOgorbHQwICAgICAgIExpbmsgZW5jYXA6VU5TUEVDICBIV2FkZHIgMDAtMDAtMDAtMDAtMDAtMDAtMDAtRjctMDAtMDAtMDAtMDAtMDAtMDAtMDAtMDAKKyAgICAgICAgICBpbmV0IGFkZHI6MTkyLjE2OC4xLjIgIEJjYXN0OjE5Mi4xNjguMS4yNTUgIE1hc2s6MjU1LjI1NS4yNTUuMAorICAgICAgICAgIFVQIEJST0FEQ0FTVCBSVU5OSU5HIE5PQVJQIE1VTFRJQ0FTVCAgTVRVOjYwMCAgTWV0cmljOjEKKyAgICAgICAgICBSWCBwYWNrZXRzOjAgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAgZnJhbWU6MAorICAgICAgICAgIFRYIHBhY2tldHM6MCBlcnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1bnM6MCBjYXJyaWVyOjAgY29sbDowCisKKyoqIE5ldGF0YWxrIENvbmZpZ3VyYXRpb24KK1lvdSB3aWxsIG5lZWQgdG8gY29uZmlndXJlIGF0YWxrZCB3aXRoIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcgdG8gbWFrZQoraXQgd29yayB3aXRoIHRoZSBjb3BzLmMgZHJpdmVyLgorCisqIEZvciBzaW5nbGUgTFRhbGsgY2FyZCB1c2UuCitkdW1teSAtc2VlZCAtcGhhc2UgMiAtbmV0IDIwMDAgLWFkZHIgMjAwMC4xMCAtem9uZSAiMTAzMyIKK2x0MCAtc2VlZCAtcGhhc2UgMSAtbmV0IDEwMDAgLWFkZHIgMTAwMC41MCAtem9uZSAiMTAzMyIKKworKiBGb3IgbXVsdGlwbGUgY2FyZHMsIEV0aGVybmV0IGFuZCBMb2NhbFRhbGsuCitldGgwIC1zZWVkIC1waGFzZSAyIC1uZXQgMzAwMCAtYWRkciAzMDAwLjIwIC16b25lICIxMDMzIgorbHQwIC1zZWVkIC1waGFzZSAxIC1uZXQgMTAwMCAtYWRkciAxMDAwLjUwIC16b25lICIxMDMzIgorCisqIEZvciBtdWx0aXBsZSBMb2NhbFRhbGsgY2FyZHMsIGFuZCBhbiBFdGhlcm5ldCBjYXJkLgorKiBPcmRlciBzZWVtcyB0byBtYXR0ZXIgaGVyZSwgRXRoZXJuZXQgbGFzdC4KK2x0MCAtc2VlZCAtcGhhc2UgMSAtbmV0IDEwMDAgLWFkZHIgMTAwMC4xMCAtem9uZSAiTG9jYWxUYWxrMSIKK2x0MSAtc2VlZCAtcGhhc2UgMSAtbmV0IDIwMDAgLWFkZHIgMjAwMC4yMCAtem9uZSAiTG9jYWxUYWxrMiIKK2V0aDAgLXNlZWQgLXBoYXNlIDIgLW5ldCAzMDAwIC1hZGRyIDMwMDAuMzAgLXpvbmUgIkV0aGVyVGFsayIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jczg5eDAudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2NzODl4MC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg4YmViNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jczg5eDAudHh0CkBAIC0wLDAgKzEsNzAzIEBACisKK05PVEUKKy0tLS0KKworVGhpcyBkb2N1bWVudCB3YXMgY29udHJpYnV0ZWQgYnkgQ2lycnVzIExvZ2ljIGZvciBrZXJuZWwgMi4yLjUuICBUaGlzIHZlcnNpb24KK2hhcyBiZWVuIHVwZGF0ZWQgZm9yIDIuMy40OCBieSBBbmRyZXcgTW9ydG9uIDxhbmRyZXdtQHVvdy5lZHUuYXU+CisKK0NpcnJ1cyBtYWtlIGEgY29weSBvZiB0aGlzIGRyaXZlciBhdmFpbGFibGUgYXQgdGhlaXIgd2Vic2l0ZSwgYXMKK2Rlc2NyaWJlZCBiZWxvdy4gIEluIGdlbmVyYWwsIHlvdSBzaG91bGQgdXNlIHRoZSBkcml2ZXIgdmVyc2lvbiB3aGljaAorY29tZXMgd2l0aCB5b3VyIExpbnV4IGRpc3RyaWJ1dGlvbi4KKworCisKK0NJUlJVUyBMT0dJQyBMQU4gQ1M4OTAwL0NTODkyMCBFVEhFUk5FVCBBREFQVEVSUworTGludXggTmV0d29yayBJbnRlcmZhY2UgRHJpdmVyIHZlci4gMi4wMCA8a2VybmVsIDIuMy40OD4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAKKworVEFCTEUgT0YgQ09OVEVOVFMKKworMS4wIENJUlJVUyBMT0dJQyBMQU4gQ1M4OTAwL0NTODkyMCBFVEhFUk5FVCBBREFQVEVSUworICAgIDEuMSBQcm9kdWN0IE92ZXJ2aWV3IAorICAgIDEuMiBEcml2ZXIgRGVzY3JpcHRpb24KKwkxLjIuMSBEcml2ZXIgTmFtZQorCTEuMi4yIEZpbGUgaW4gdGhlIERyaXZlciBQYWNrYWdlCisgICAgMS4zIFN5c3RlbSBSZXF1aXJlbWVudHMKKyAgICAxLjQgTGljZW5zaW5nIEluZm9ybWF0aW9uCisKKzIuMCBBREFQVEVSIElOU1RBTExBVElPTiBhbmQgQ09ORklHVVJBVElPTgorICAgIDIuMSBDUzg5MDAtYmFzZWQgQWRhcHRlciBDb25maWd1cmF0aW9uCisgICAgMi4yIENTODkyMC1iYXNlZCBBZGFwdGVyIENvbmZpZ3VyYXRpb24gCisKKzMuMCBMT0FESU5HIFRIRSBEUklWRVIgQVMgQSBNT0RVTEUKKworNC4wIENPTVBJTElORyBUSEUgRFJJVkVSCisgICAgNC4xIENvbXBpbGluZyB0aGUgRHJpdmVyIGFzIGEgTG9hZGFibGUgTW9kdWxlCisgICAgNC4yIENvbXBpbGluZyB0aGUgZHJpdmVyIHRvIHN1cHBvcnQgbWVtb3J5IG1vZGUKKyAgICA0LjMgQ29tcGlsaW5nIHRoZSBkcml2ZXIgdG8gc3VwcG9ydCBSeCBETUEgCisgICAgNC40IENvbXBpbGluZyB0aGUgRHJpdmVyIGludG8gdGhlIEtlcm5lbAorCis1LjAgVEVTVElORyBBTkQgVFJPVUJMRVNIT09USU5HCisgICAgNS4xIEtub3duIERlZmVjdHMgYW5kIExpbWl0YXRpb25zCisgICAgNS4yIFRlc3RpbmcgdGhlIEFkYXB0ZXIKKyAgICAgICAgNS4yLjEgRGlhZ25vc3RpYyBTZWxmLVRlc3QKKyAgICAgICAgNS4yLjIgRGlhZ25vc3RpYyBOZXR3b3JrIFRlc3QKKyAgICA1LjMgVXNpbmcgdGhlIEFkYXB0ZXIncyBMRURzCisgICAgNS40IFJlc29sdmluZyBJL08gQ29uZmxpY3RzCisKKzYuMCBURUNITklDQUwgU1VQUE9SVAorICAgIDYuMSBDb250YWN0aW5nIENpcnJ1cyBMb2dpYydzIFRlY2huaWNhbCBTdXBwb3J0CisgICAgNi4yIEluZm9ybWF0aW9uIFJlcXVpcmVkIEJlZm9yZSBDb250YWN0aW5nIFRlY2huaWNhbCBTdXBwb3J0CisgICAgNi4zIE9idGFpbmluZyB0aGUgTGF0ZXN0IERyaXZlciBWZXJzaW9uCisgICAgNi40IEN1cnJlbnQgbWFpbnRhaW5lcgorICAgIDYuNSBLZXJuZWwgYm9vdCBwYXJhbWV0ZXJzCisKKworMS4wIENJUlJVUyBMT0dJQyBMQU4gQ1M4OTAwL0NTODkyMCBFVEhFUk5FVCBBREFQVEVSUworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKzEuMSBQUk9EVUNUIE9WRVJWSUVXCisKK1RoZSBDUzg5MDAtYmFzZWQgSVNBIEV0aGVybmV0IEFkYXB0ZXJzIGZyb20gQ2lycnVzIExvZ2ljIGZvbGxvdyAKK0lFRUUgODAyLjMgc3RhbmRhcmRzIGFuZCBzdXBwb3J0IGhhbGYgb3IgZnVsbC1kdXBsZXggb3BlcmF0aW9uIGluIElTQSBidXMgCitjb21wdXRlcnMgb24gMTAgTWJwcyBFdGhlcm5ldCBuZXR3b3Jrcy4gIFRoZSBhZGFwdGVycyBhcmUgZGVzaWduZWQgZm9yIG9wZXJhdGlvbiAKK2luIDE2LWJpdCBJU0Egb3IgRUlTQSBidXMgZXhwYW5zaW9uIHNsb3RzIGFuZCBhcmUgYXZhaWxhYmxlIGluIAorMTBCYXNlVC1vbmx5IG9yIDMtbWVkaWEgY29uZmlndXJhdGlvbnMgKDEwQmFzZVQsIDEwQmFzZTIsIGFuZCBBVUkgZm9yIDEwQmFzZS01IAorb3IgZmliZXIgbmV0d29ya3MpLiAgCisKK0NTODkyMC1iYXNlZCBhZGFwdGVycyBhcmUgc2ltaWxhciB0byB0aGUgQ1M4OTAwLWJhc2VkIGFkYXB0ZXIgd2l0aCBhZGRpdGlvbmFsIAorZmVhdHVyZXMgZm9yIFBsdWcgYW5kIFBsYXkgKFBuUCkgc3VwcG9ydCBhbmQgV2FrZXVwIEZyYW1lIHJlY29nbml0aW9uLiAgQXMgCitzdWNoLCB0aGUgY29uZmlndXJhdGlvbiBwcm9jZWR1cmVzIGRpZmZlciBzb21ld2hhdCBiZXR3ZWVuIHRoZSB0d28gdHlwZXMgb2YgCithZGFwdGVycy4gIFJlZmVyIHRvIHRoZSAiQWRhcHRlciBDb25maWd1cmF0aW9uIiBzZWN0aW9uIGZvciBkZXRhaWxzIG9uIAorY29uZmlndXJpbmcgYm90aCB0eXBlcyBvZiBhZGFwdGVycy4KKworCisxLjIgRFJJVkVSIERFU0NSSVBUSU9OCisKK1RoZSBDUzg5MDAvQ1M4OTIwIEV0aGVybmV0IEFkYXB0ZXIgZHJpdmVyIGZvciBMaW51eCBzdXBwb3J0cyB0aGUgTGludXgKK3YyLjMuNDggb3IgZ3JlYXRlciBrZXJuZWwuICBJdCBjYW4gYmUgY29tcGlsZWQgZGlyZWN0bHkgaW50byB0aGUga2VybmVsCitvciBsb2FkZWQgYXQgcnVuLXRpbWUgYXMgYSBkZXZpY2UgZHJpdmVyIG1vZHVsZS4KKworMS4yLjEgRHJpdmVyIE5hbWU6IGNzODl4MAorCisxLjIuMiBGaWxlcyBpbiB0aGUgRHJpdmVyIEFyY2hpdmU6CisKK1RoZSBmaWxlcyBpbiB0aGUgZHJpdmVyIGF0IENpcnJ1cycgd2Vic2l0ZSBpbmNsdWRlOgorCisgIHJlYWRtZS50eHQgICAgICAgICAtIHRoaXMgZmlsZQorICBidWlsZCAgICAgICAgICAgICAgLSBiYXRjaCBmaWxlIHRvIGNvbXBpbGUgY3M4OXgwLmMuCisgIGNzODl4MC5jICAgICAgICAgICAtIGRyaXZlciBDIGNvZGUKKyAgY3M4OXgwLmggICAgICAgICAgIC0gZHJpdmVyIGhlYWRlciBmaWxlCisgIGNzODl4MC5vICAgICAgICAgICAtIHByZS1jb21waWxlZCBtb2R1bGUgKGZvciB2Mi4yLjUga2VybmVsKQorICBjb25maWcvQ29uZmlnLmluICAgLSBzYW1wbGUgZmlsZSB0byBpbmNsdWRlIGNzODl4MCBkcml2ZXIgaW4gdGhlIGtlcm5lbC4KKyAgY29uZmlnL01ha2VmaWxlICAgIC0gc2FtcGxlIGZpbGUgdG8gaW5jbHVkZSBjczg5eDAgZHJpdmVyIGluIHRoZSBrZXJuZWwuCisgIGNvbmZpZy9TcGFjZS5jICAgICAtIHNhbXBsZSBmaWxlIHRvIGluY2x1ZGUgY3M4OXgwIGRyaXZlciBpbiB0aGUga2VybmVsLgorCisKKworMS4zIFNZU1RFTSBSRVFVSVJFTUVOVFMKKworVGhlIGZvbGxvd2luZyBoYXJkd2FyZSBpcyByZXF1aXJlZDoKKworICAgKiBDaXJydXMgTG9naWMgTEFOIChDUzg5MDAvMjAtYmFzZWQpIEV0aGVybmV0IElTQSBBZGFwdGVyICAgCisKKyAgICogSUJNIG9yIElCTS1jb21wYXRpYmxlIFBDIHdpdGg6CisgICAgICogQW4gODAzODYgb3IgaGlnaGVyIHByb2Nlc3NvcgorICAgICAqIDE2IGJ5dGVzIG9mIGNvbnRpZ3VvdXMgSU8gc3BhY2UgYXZhaWxhYmxlIGJldHdlZW4gMjEwaCAtIDM3MGgKKyAgICAgKiBPbmUgYXZhaWxhYmxlIElSUSAoNSwxMCwxMSxvciAxMiBmb3IgdGhlIENTODkwMCwgMy03LDktMTUgZm9yIENTODkyMCkuCisKKyAgICogQXBwcm9wcmlhdGUgY2FibGUgKGFuZCBjb25uZWN0b3IgZm9yIEFVSSwgMTBCQVNFLTIpIGZvciB5b3VyIG5ldHdvcmsKKyAgICAgdG9wb2xvZ3kuCisKK1RoZSBmb2xsb3dpbmcgc29mdHdhcmUgaXMgcmVxdWlyZWQ6CisKKyogTElOVVgga2VybmVsIHZlcnNpb24gMi4zLjQ4IG9yIGhpZ2hlcgorCisgICAqIENTODkwMC8yMCBTZXR1cCBVdGlsaXR5IChET1MtYmFzZWQpCisKKyAgICogTElOVVgga2VybmVsIHNvdXJjZXMgZm9yIHlvdXIga2VybmVsIChpZiBjb21waWxpbmcgaW50byBrZXJuZWwpCisKKyAgICogR05VIFRvb2xraXQgKGdjYyBhbmQgbWFrZSkgdjIuNiBvciBhYm92ZSAoaWYgY29tcGlsaW5nIGludG8ga2VybmVsIAorICAgICBvciBhIG1vZHVsZSkgICAKKworCisKKzEuNCBMSUNFTlNJTkcgSU5GT1JNQVRJT04KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLCB2ZXJzaW9uIDEuCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciAKK21vcmUgZGV0YWlscy4KKworRm9yIGEgZnVsbCBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisKKworMi4wIEFEQVBURVIgSU5TVEFMTEFUSU9OIGFuZCBDT05GSUdVUkFUSU9OCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0JvdGggdGhlIENTODkwMCBhbmQgQ1M4OTIwLWJhc2VkIGFkYXB0ZXJzIGNhbiBiZSBjb25maWd1cmVkIHVzaW5nIHBhcmFtZXRlcnMgCitzdG9yZWQgaW4gYW4gb24tYm9hcmQgRUVQUk9NLiBZb3UgbXVzdCB1c2UgdGhlIERPUy1iYXNlZCBDUzg5MDAvMjAgU2V0dXAgCitVdGlsaXR5IGlmIHlvdSB3YW50IHRvIGNoYW5nZSB0aGUgYWRhcHRlcidzIGNvbmZpZ3VyYXRpb24gaW4gRUVQUk9NLiAgCisKK1doZW4gbG9hZGluZyB0aGUgZHJpdmVyIGFzIGEgbW9kdWxlLCB5b3UgY2FuIHNwZWNpZnkgbWFueSBvZiB0aGUgYWRhcHRlcidzIAorY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIG9uIHRoZSBjb21tYW5kLWxpbmUgdG8gb3ZlcnJpZGUgdGhlIEVFUFJPTSdzIHNldHRpbmdzIAorb3IgZm9yIGludGVyZmFjZSBjb25maWd1cmF0aW9uIHdoZW4gYW4gRUVQUk9NIGlzIG5vdCB1c2VkLiAoQ1M4OTIwLWJhc2VkIAorYWRhcHRlcnMgbXVzdCB1c2UgYW4gRUVQUk9NLikgU2VlIFNlY3Rpb24gMy4wIExPQURJTkcgVEhFIERSSVZFUiBBUyBBIE1PRFVMRS4KKworU2luY2UgdGhlIENTODkwMC8yMCBTZXR1cCBVdGlsaXR5IGlzIGEgRE9TLWJhc2VkIGFwcGxpY2F0aW9uLCB5b3UgbXVzdCBpbnN0YWxsIAorYW5kIGNvbmZpZ3VyZSB0aGUgYWRhcHRlciBpbiBhIERPUy1iYXNlZCBzeXN0ZW0gdXNpbmcgdGhlIENTODkwMC8yMCBTZXR1cCAKK1V0aWxpdHkgYmVmb3JlIGluc3RhbGxhdGlvbiBpbiB0aGUgdGFyZ2V0IExJTlVYIHN5c3RlbS4gIChOb3QgcmVxdWlyZWQgaWYgCitpbnN0YWxsaW5nIGEgQ1M4OTAwLWJhc2VkIGFkYXB0ZXIgYW5kIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaXMgYWNjZXB0YWJsZS4pCisgICAgIAorCisyLjEgQ1M4OTAwLUJBU0VEIEFEQVBURVIgQ09ORklHVVJBVElPTgorCitDUzg5MDAtYmFzZWQgYWRhcHRlcnMgc2hpcHBlZCBmcm9tIENpcnJ1cyBMb2dpYyBoYXZlIGJlZW4gY29uZmlndXJlZCAKK3dpdGggdGhlIGZvbGxvd2luZyAiZGVmYXVsdCIgc2V0dGluZ3M6CisKKyAgT3BlcmF0aW9uIE1vZGU6ICAgICAgTWVtb3J5IE1vZGUKKyAgSVJROiAgICAgICAgICAgICAgICAgMTAKKyAgQmFzZSBJL08gQWRkcmVzczogICAgMzAwCisgIE1lbW9yeSBCYXNlIEFkZHJlc3M6IEQwMDAwCisgIE9wdGltaXphdGlvbjoJICAgICAgIERPUyBDbGllbnQKKyAgVHJhbnNtaXNzaW9uIE1vZGU6ICAgSGFsZi1kdXBsZXgKKyAgQm9vdFByb206ICAgICAgICAgICAgTm9uZQorICBNZWRpYSBUeXBlOgkgICAgICAgQXV0b2RldGVjdCAoMy1tZWRpYSBjYXJkcykgb3IgCisgICAgICAgICAgICAgICAgICAgICAgIDEwQkFTRS1UICgxMEJBU0UtVCBvbmx5IGFkYXB0ZXIpCisKK1lvdSBzaG91bGQgb25seSBjaGFuZ2UgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBpZiBjb25mbGljdHMgd2l0aCAKK2Fub3RoZXIgYWRhcHRlciBleGlzdHMuIFRvIGNoYW5nZSB0aGUgYWRhcHRlcidzIGNvbmZpZ3VyYXRpb24sIHJ1biB0aGUgCitDUzg5MDAvMjAgU2V0dXAgVXRpbGl0eS4gCisKKworMi4yIENTODkyMC1CQVNFRCBBREFQVEVSIENPTkZJR1VSQVRJT04KKworQ1M4OTIwLWJhc2VkIGFkYXB0ZXJzIGFyZSBzaGlwcGVkIGZyb20gQ2lycnVzIExvZ2ljIGNvbmZpZ3VyZWQgYXMgUGx1ZworYW5kIFBsYXkgKFBuUCkgZW5hYmxlZC4gIEhvd2V2ZXIsIHNpbmNlIHRoZSBjczg5eDAgZHJpdmVyIGRvZXMgTk9UCitzdXBwb3J0IFBuUCwgeW91IG11c3QgaW5zdGFsbCB0aGUgQ1M4OTIwIGFkYXB0ZXIgaW4gYSBET1MtYmFzZWQgUEMgYW5kCitydW4gdGhlIENTODkwMC8yMCBTZXR1cCBVdGlsaXR5IHRvIGRpc2FibGUgUG5QIGFuZCBjb25maWd1cmUgdGhlCithZGFwdGVyIGJlZm9yZSBpbnN0YWxsYXRpb24gaW4gdGhlIHRhcmdldCBMaW51eCBzeXN0ZW0uICBGYWlsdXJlIHRvIGRvCit0aGlzIHdpbGwgbGVhdmUgdGhlIGFkYXB0ZXIgaW5hY3RpdmUgYW5kIHRoZSBkcml2ZXIgd2lsbCBiZSB1bmFibGUgdG8KK2NvbW11bmljYXRlIHdpdGggdGhlIGFkYXB0ZXIuICAKKworCisgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisgICAgICAgICogICAgICAgICAgICAgICAgICAgIENTODkyMC1CQVNFRCBBREFQVEVSUzogICAgICAgICAgICAgICAgICAgICoKKyAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAKKyAgICAgICAgKiBDUzg5MjAtQkFTRUQgQURBUFRFUlMgQVJFIFBMVUcgYW5kIFBMQVkgRU5BQkxFRCBCWSBERUZBVUxULiAgKiAKKyAgICAgICAgKiBUSEUgQ1M4OVgwIERSSVZFUiBET0VTIE5PVCBTVVBQT1JUIFBuUC4gVEhFUkVGT1JFLCBZT1UgTVVTVCAgKgorICAgICAgICAqIFJVTiBUSEUgQ1M4OTAwLzIwIFNFVFVQIFVUSUxJVFkgVE8gRElTQUJMRSBQblAgU1VQUE9SVCBBTkQgICAqCisgICAgICAgICogVE8gQUNUSVZBVEUgVEhFIEFEQVBURVIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisKKworCiszLjAgTE9BRElORyBUSEUgRFJJVkVSIEFTIEEgTU9EVUxFCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0lmIHRoZSBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBsb2FkYWJsZSBtb2R1bGUsIHlvdSBjYW4gbG9hZCB0aGUgZHJpdmVyIG1vZHVsZQord2l0aCB0aGUgJ21vZHByb2JlJyBjb21tYW5kLiAgTWFueSBvZiB0aGUgYWRhcHRlcidzIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBjYW4gCitiZSBzcGVjaWZpZWQgYXMgY29tbWFuZC1saW5lIGFyZ3VtZW50cyB0byB0aGUgbG9hZCBjb21tYW5kLiAgVGhpcyBmYWNpbGl0eSAKK3Byb3ZpZGVzIGEgbWVhbnMgdG8gb3ZlcnJpZGUgdGhlIEVFUFJPTSdzIHNldHRpbmdzIG9yIGZvciBpbnRlcmZhY2UgCitjb25maWd1cmF0aW9uIHdoZW4gYW4gRUVQUk9NIGlzIG5vdCB1c2VkLgorCitFeGFtcGxlOgorCisgICAgaW5zbW9kIGNzODl4MC5vIGlvPTB4MjAwIGlycT0weEEgbWVkaWE9YXVpCisKK1RoaXMgZXhhbXBsZSBsb2FkcyB0aGUgbW9kdWxlIGFuZCBjb25maWd1cmVzIHRoZSBhZGFwdGVyIHRvIHVzZSBhbiBJTyBwb3J0IGJhc2UKK2FkZHJlc3Mgb2YgMjAwaCwgaW50ZXJydXB0IDEwLCBhbmQgdXNlIHRoZSBBVUkgbWVkaWEgY29ubmVjdGlvbi4gIFRoZSBmb2xsb3dpbmcKK2NvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYXZhaWxhYmxlIG9uIHRoZSBjb21tYW5kIGxpbmU6CisKKyogaW89IyMjICAgICAgICAgICAgICAgLSBzcGVjaWZ5IElPIGFkZHJlc3MgKDIwMGgtMzYwaCkKKyogaXJxPSMjICAgICAgICAgICAgICAgLSBzcGVjaWZ5IGludGVycnVwdCBsZXZlbAorKiB1c2VfZG1hPTEgICAgICAgICAgICAtIEVuYWJsZSBETUEKKyogZG1hPSMgICAgICAgICAgICAgICAgLSBzcGVjaWZ5IGRtYSBjaGFubmVsIChEcml2ZXIgaXMgY29tcGlsZWQgdG8gc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICAgICAgIFJ4IERNQSBvbmx5KQorKiBkbWFzaXplPSMgKDE2IG9yIDY0KSAtIERNQSBzaXplIDE2SyBvciA2NEsuICBEZWZhdWx0IHZhbHVlIGlzIHNldCB0byAxNi4KKyogbWVkaWE9cmo0NSAgICAgICAgICAgLSBzcGVjaWZ5IG1lZGlhIHR5cGUKKyAgIG9yIG1lZGlhPWJuYworICAgb3IgbWVkaWE9YXVpCisgICBvciBtZWRhaT1hdXRvCisqIGR1cGxleD1mdWxsICAgICAgICAgIC0gc3BlY2lmeSBmb3JjZWQgaGFsZi9mdWxsL2F1dG9uZWdvdGlhdGUgZHVwbGV4CisgICBvciBkdXBsZXg9aGFsZgorICAgb3IgZHVwbGV4PWF1dG8KKyogZGVidWc9IyAgICAgICAgICAgICAgLSBkZWJ1ZyBsZXZlbCAob25seSBhdmFpbGFibGUgaWYgdGhlIGRyaXZlciB3YXMgY29tcGlsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZGVidWdnaW5nKQorCitOT1RFUzoKKworYSkgSWYgYW4gRUVQUk9NIGlzIHByZXNlbnQsIGFueSBzcGVjaWZpZWQgY29tbWFuZC1saW5lIHBhcmFtZXRlcgorICAgd2lsbCBvdmVycmlkZSB0aGUgY29ycmVzcG9uZGluZyBjb25maWd1cmF0aW9uIHZhbHVlIHN0b3JlZCBpbgorICAgRUVQUk9NLgorCitiKSBUaGUgImlvIiBwYXJhbWV0ZXIgbXVzdCBiZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQtbGluZS4gIAorCitjKSBUaGUgZHJpdmVyJ3MgaGFyZHdhcmUgcHJvYmUgcm91dGluZSBpcyBkZXNpZ25lZCB0byBhdm9pZAorICAgd3JpdGluZyB0byBJL08gc3BhY2UgdW50aWwgaXQga25vd3MgdGhhdCB0aGVyZSBpcyBhIGNzODl4MAorICAgY2FyZCBhdCB0aGUgd3JpdHRlbiBhZGRyZXNzZXMuICBUaGlzIGNvdWxkIGNhdXNlIHByb2JsZW1zCisgICB3aXRoIGRldmljZSBwcm9iaW5nLiAgVG8gYXZvaWQgdGhpcyBiZWhhdmlvdXIsIGFkZCBvbmUKKyAgIHRvIHRoZSBgaW89JyBtb2R1bGUgcGFyYW1ldGVyLiAgVGhpcyBkb2Vzbid0IGFjdHVhbGx5IGNoYW5nZQorICAgdGhlIEkvTyBhZGRyZXNzLCBidXQgaXQgaXMgYSBmbGFnIHRvIHRlbGwgdGhlIGRyaXZlcgorICAgdG9wYXJ0aWFsbHkgaW5pdGlhbGlzZSB0aGUgaGFyZHdhcmUgYmVmb3JlIHRyeWluZyB0bworICAgaWRlbnRpZnkgdGhlIGNhcmQuICBUaGlzIGNvdWxkIGJlIGRhbmdlcm91cyBpZiB5b3UgYXJlCisgICBub3Qgc3VyZSB0aGF0IHRoZXJlIGlzIGEgY3M4OXgwIGNhcmQgYXQgdGhlIHByb3ZpZGVkIGFkZHJlc3MuCisKKyAgIEZvciBleGFtcGxlLCB0byBzY2FuIGZvciBhbiBhZGFwdGVyIGxvY2F0ZWQgYXQgSU8gYmFzZSAweDMwMCwKKyAgIHNwZWNpZnkgYW4gSU8gYWRkcmVzcyBvZiAweDMwMS4gIAorCitkKSBUaGUgImR1cGxleD1hdXRvIiBwYXJhbWV0ZXIgaXMgb25seSBzdXBwb3J0ZWQgZm9yIHRoZSBDUzg5MjAuCisKK2UpIFRoZSBtaW5pbXVtIGNvbW1hbmQtbGluZSBjb25maWd1cmF0aW9uIHJlcXVpcmVkIGlmIGFuIEVFUFJPTSBpcworICAgbm90IHByZXNlbnQgaXM6CisKKyAgIGlvIAorICAgaXJxIAorICAgbWVkaWEgdHlwZSAobm8gYXV0b2RldGVjdCkKKworZikgVGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgYXJlIENTODlYWCBkZWZhdWx0cyAodmFsdWVzCisgICB1c2VkIHdpdGggbm8gRUVQUk9NIG9yIGNvbW1hbmQtbGluZSBhcmd1bWVudCkuCisKKyAgICogRE1BIEJ1cnN0ID0gZW5hYmxlZAorICAgKiBJT0NIUkRZIEVuYWJsZWQgPSBlbmFibGVkCisgICAqIFVzZVNBID0gZW5hYmxlZAorICAgKiBDUzg5MDAgZGVmYXVsdHMgdG8gaGFsZi1kdXBsZXggaWYgbm90IHNwZWNpZmllZCBvbiBjb21tYW5kLWxpbmUKKyAgICogQ1M4OTIwIGRlZmF1bHRzIHRvIGF1dG9uZWcgaWYgbm90IHNwZWNpZmllZCBvbiBjb21tYW5kLWxpbmUKKyAgICogVXNlIHJlc2V0IGRlZmF1bHRzIGZvciBvdGhlciBjb25maWcgcGFyYW1ldGVycworICAgKiBkbWFfbW9kZSA9IDAKKworZykgWW91IGNhbiB1c2UgaWZjb25maWcgdG8gc2V0IHRoZSBhZGFwdGVyJ3MgRXRoZXJuZXQgYWRkcmVzcy4KKworaCkgTWFueSBMaW51eCBkaXN0cmlidXRpb25zIHVzZSB0aGUgJ21vZHByb2JlJyBjb21tYW5kIHRvIGxvYWQKKyAgIG1vZHVsZXMuICBUaGlzIHByb2dyYW0gdXNlcyB0aGUgJy9ldGMvY29uZi5tb2R1bGVzJyBmaWxlIHRvCisgICBkZXRlcm1pbmUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiB3aGljaCBpcyBwYXNzZWQgdG8gYSBkcml2ZXIKKyAgIG1vZHVsZSB3aGVuIGl0IGlzIGxvYWRlZC4gIEFsbCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdoaWNoIGFyZQorICAgZGVzY3JpYmVkIGFib3ZlIG1heSBiZSBwbGFjZWQgd2l0aGluIC9ldGMvY29uZi5tb2R1bGVzLgorCisgICBGb3IgZXhhbXBsZToKKworICAgPiBjYXQgL2V0Yy9jb25mLm1vZHVsZXMKKyAgIC4uLgorICAgYWxpYXMgZXRoMCBjczg5eDAKKyAgIG9wdGlvbnMgY3M4OXgwIGlvPTB4MDIwMCBkbWE9NSB1c2VfZG1hPTEKKyAgIC4uLgorCisgICBJbiB0aGlzIGV4YW1wbGUgd2UgYXJlIHRlbGxpbmcgdGhlIG1vZHVsZSBzeXN0ZW0gdGhhdCB0aGUKKyAgIGV0aGVybmV0IGRyaXZlciBmb3IgdGhpcyBtYWNoaW5lIHNob3VsZCB1c2UgdGhlIGNzODl4MCBkcml2ZXIuICBXZQorICAgYXJlIGFza2luZyAnbW9kcHJvYmUnIHRvIHBhc3MgdGhlICdpbycsICdkbWEnIGFuZCAndXNlX2RtYScKKyAgIGFyZ3VtZW50cyB0byB0aGUgZHJpdmVyIHdoZW4gaXQgaXMgbG9hZGVkLgorCitpKSBDaXJydXMgcmVjb21tZW5kIHRoYXQgdGhlIGNzODl4MCB1c2UgdGhlIElTQSBETUEgY2hhbm5lbHMgNSwgNiBvcgorICAgNy4gIFlvdSB3aWxsIHByb2JhYmx5IGZpbmQgdGhhdCBvdGhlciBETUEgY2hhbm5lbHMgd2lsbCBub3Qgd29yay4KKworaikgVGhlIGNzODl4MCBzdXBwb3J0cyBETUEgZm9yIHJlY2VpdmluZyBvbmx5LiAgRE1BIG1vZGUgaXMKKyAgIHNpZ25pZmljYW50bHkgbW9yZSBlZmZpY2llbnQuICBGbG9vZGluZyBhIDQwMCBNSHogQ2VsZXJvbiBtYWNoaW5lCisgICB3aXRoIGxhcmdlIHBpbmcgcGFja2V0cyBjb25zdW1lcyA4MiUgb2YgaXRzIENQVSBjYXBhY2l0eSBpbiBub24tRE1BCisgICBtb2RlLiAgV2l0aCBETUEgdGhpcyBpcyByZWR1Y2VkIHRvIDQ1JS4KKworaykgSWYgeW91ciBMaW51eCBrZXJuZWwgd2FzIGNvbXBpbGVkIHdpdGggaW5idWlsdCBwbHVnLWFuZC1wbGF5CisgICBzdXBwb3J0IHlvdSB3aWxsIGJlIGFibGUgdG8gZmluZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3M4OXgwIGNhcmQKKyAgIHdpdGggdGhlIGNvbW1hbmQKKworICAgY2F0IC9wcm9jL2lzYXBucAorCitsKSBJZiBkdXJpbmcgRE1BIG9wZXJhdGlvbiB5b3UgZmluZCBlcnJhdGljIGJlaGF2aW9yIG9yIG5ldHdvcmsgZGF0YQorICAgY29ycnVwdGlvbiB5b3Ugc2hvdWxkIHVzZSB5b3VyIFBDJ3MgQklPUyB0byBzbG93IHRoZSBFSVNBIGJ1cyBjbG9jay4KKworbSkgSWYgdGhlIGNzODl4MCBkcml2ZXIgaXMgY29tcGlsZWQgZGlyZWN0bHkgaW50byB0aGUga2VybmVsCisgICAobm9uLW1vZHVsYXIpIHRoZW4gaXRzIEkvTyBhZGRyZXNzIGlzIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lZCBieQorICAgSVNBIGJ1cyBwcm9iaW5nLiAgVGhlIElSUSBudW1iZXIsIG1lZGlhIG9wdGlvbnMsIGV0YyBhcmUgZGV0ZXJtaW5lZAorICAgZnJvbSB0aGUgY2FyZCdzIEVFUFJPTS4KKworbikgSWYgdGhlIGNzODl4MCBkcml2ZXIgaXMgY29tcGlsZWQgZGlyZWN0bHkgaW50byB0aGUga2VybmVsLCBETUEKKyAgIG1vZGUgbWF5IGJlIHNlbGVjdGVkIGJ5IHByb3ZpZGluZyB0aGUga2VybmVsIHdpdGggYSBib290IG9wdGlvbgorICAgJ2NzODl4MF9kbWE9Ticgd2hlcmUgJ04nIGlzIHRoZSBkZXNpcmVkIERNQSBjaGFubmVsIG51bWJlciAoNSwgNiBvciA3KS4KKworICAgS2VybmVsIGJvb3Qgb3B0aW9ucyBtYXkgYmUgcHJvdmlkZWQgb24gdGhlIExJTE8gY29tbWFuZCBsaW5lOgorCisJTElMTyBib290OiBsaW51eCBjczg5eDBfZG1hPTUKKworICAgb3IgdGhleSBtYXkgYmUgcGxhY2VkIGluIC9ldGMvbGlsby5jb25mOgorCisJaW1hZ2U9L2Jvb3QvYnpJbWFnZS0yLjMuNDgKKwkgIGFwcGVuZD0iY3M4OXgwX2RtYT01IgorCSAgbGFiZWw9bGludXgKKwkgIHJvb3Q9L2Rldi9oZGE1CisJICByZWFkLW9ubHkKKworICAgVGhlIERNQSBSeCBidWZmZXIgc2l6ZSBpcyBoYXJkd2lyZWQgdG8gMTYga2J5dGVzIGluIHRoaXMgbW9kZS4KKyAgICg2NGsgbW9kZSBpcyBub3QgYXZhaWxhYmxlKS4KKworCis0LjAgQ09NUElMSU5HIFRIRSBEUklWRVIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGNzODl4MCBkcml2ZXIgY2FuIGJlIGNvbXBpbGVkIGRpcmVjdGx5IGludG8gdGhlIGtlcm5lbCBvciBjb21waWxlZCBpbnRvCithIGxvYWRhYmxlIGRldmljZSBkcml2ZXIgbW9kdWxlLgorCisKKzQuMSBDT01QSUxJTkcgVEhFIERSSVZFUiBBUyBBIExPQURBQkxFIE1PRFVMRQorCitUbyBjb21waWxlIHRoZSBkcml2ZXIgaW50byBhIGxvYWRhYmxlIG1vZHVsZSwgdXNlIHRoZSBmb2xsb3dpbmcgY29tbWFuZCAKKyhzaW5nbGUgY29tbWFuZCBsaW5lLCB3aXRob3V0IHF1b3Rlcyk6CisKKyJnY2MgLURfX0tFUk5FTF9fIC1JL3Vzci9zcmMvbGludXgvaW5jbHVkZSAtSS91c3Ivc3JjL2xpbnV4L25ldC9pbmV0IC1XYWxsIAorLVdzdHJpY3QtcHJvdG90eXBlcyAtTzIgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLURNT0RVTEUgLURDT05GSUdfTU9EVkVSU0lPTlMgCistYyBjczg5eDAuYyIKKworNC4yIENPTVBJTElORyBUSEUgRFJJVkVSIFRPIFNVUFBPUlQgTUVNT1JZIE1PREUKKworU3VwcG9ydCBmb3IgbWVtb3J5IG1vZGUgd2FzIG5vdCBjYXJyaWVkIG92ZXIgaW50byB0aGUgMi4zIHNlcmllcyBrZXJuZWxzLgorCis0LjMgQ09NUElMSU5HIFRIRSBEUklWRVIgVE8gU1VQUE9SVCBSeCBETUEKKworVGhlIGNvbXBpbGUtdGltZSBvcHRpb25hbGl0eSBmb3IgRE1BIHdhcyByZW1vdmVkIGluIHRoZSAyLjMga2VybmVsCitzZXJpZXMuICBETUEgc3VwcG9ydCBpcyBub3cgdW5jb25kaXRpb25hbGx5IHBhcnQgb2YgdGhlIGRyaXZlci4gIEl0IGlzCitlbmFibGVkIGJ5IHRoZSAndXNlX2RtYT0xJyBtb2R1bGUgb3B0aW9uLgorCis0LjQgQ09NUElMSU5HIFRIRSBEUklWRVIgSU5UTyBUSEUgS0VSTkVMCisKK0lmIHlvdXIgTGludXggZGlzdHJpYnV0aW9uIGFscmVhZHkgaGFzIHN1cHBvcnQgZm9yIHRoZSBjczg5eDAgZHJpdmVyCit0aGVuIHNpbXBseSBjb3B5IHRoZSBzb3VyY2UgZmlsZSB0byB0aGUgL3Vzci9zcmMvbGludXgvZHJpdmVycy9uZXQKK2RpcmVjdG9yeSB0byByZXBsYWNlIHRoZSBvcmlnaW5hbCBvbmVzIGFuZCBydW4gdGhlIG1ha2UgdXRpbGl0eSB0bworcmVidWlsZCB0aGUga2VybmVsLiAgU2VlIFN0ZXAgMyBmb3IgcmVidWlsZGluZyB0aGUga2VybmVsLgorCitJZiB5b3VyIExpbnV4IGRvZXMgbm90IGluY2x1ZGUgdGhlIGNzODl4MCBkcml2ZXIsIHlvdSBuZWVkIHRvIGVkaXQgdGhyZWUgCitjb25maWd1cmF0aW9uIGZpbGVzLCBjb3B5IHRoZSBzb3VyY2UgZmlsZSB0byB0aGUgL3Vzci9zcmMvbGludXgvZHJpdmVycy9uZXQKK2RpcmVjdG9yeSwgYW5kIHRoZW4gcnVuIHRoZSBtYWtlIHV0aWxpdHkgdG8gcmVidWlsZCB0aGUga2VybmVsLgorCisxLiBFZGl0IHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiBmaWxlcyBieSBhZGRpbmcgdGhlIHN0YXRlbWVudHMgYXMKK2luZGljYXRlZC4gIChXaGVuIHBvc3NpYmxlLCB0cnkgdG8gbG9jYXRlIHRoZSBhZGRlZCB0ZXh0IHRvIHRoZSBzZWN0aW9uIG9mIHRoZQorZmlsZSBjb250YWluaW5nIHNpbWlsYXIgc3RhdGVtZW50cykuCisKKworYS4pIEluIC91c3Ivc3JjL2xpbnV4L2RyaXZlcnMvbmV0L0NvbmZpZy5pbiwgYWRkOgorCit0cmlzdGF0ZSAnQ1M4OXgwIHN1cHBvcnQnIENPTkZJR19DUzg5eDAKKworRXhhbXBsZToKKworICAgICBpZiBbICIkQ09ORklHX0VYUEVSSU1FTlRBTCIgPSAieSIgXTsgdGhlbgorICAgICAgIHRyaXN0YXRlICdJQ0wgRXRoZXJUZWFtIDE2aS8zMiBzdXBwb3J0JyBDT05GSUdfRVRIMTZJCisgICAgIGZpCisKKyAgICAgdHJpc3RhdGUgJ0NTODl4MCBzdXBwb3J0JyBDT05GSUdfQ1M4OXgwCisKKyAgICAgdHJpc3RhdGUgJ05FMjAwMC9ORTEwMDAgc3VwcG9ydCcgQ09ORklHX05FMjAwMAorICAgICBpZiBbICIkQ09ORklHX0VYUEVSSU1FTlRBTCIgPSAieSIgXTsgdGhlbgorICAgICAgIHRyaXN0YXRlICdOSTUyMTAgc3VwcG9ydCcgQ09ORklHX05JNTIKKworCitiLikgSW4gL3Vzci9zcmMvbGludXgvZHJpdmVycy9uZXQvTWFrZWZpbGUsIGFkZCB0aGUgZm9sbG93aW5nIGxpbmVzOiAKKworaWZlcSAoJChDT05GSUdfQ1M4OXgwKSx5KQorTF9PQkpTICs9IGNzODl4MC5vCitlbHNlCisgIGlmZXEgKCQoQ09ORklHX0NTODl4MCksbSkKKyAgTV9PQkpTICs9IGNzODl4MC5vCisgIGVuZGlmCitlbmRpZgorCisKK2MuKSBJbiAvbGludXgvZHJpdmVycy9uZXQvU3BhY2UuYyBmaWxlLCBhZGQgdGhlIGxpbmU6CisKK2V4dGVybiBpbnQgY3M4OXgwX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldik7CisKKworRXhhbXBsZToKKworIGV4dGVybiBpbnQgdWx0cmFfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KTsKKyBleHRlcm4gaW50IHdkX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldik7CisgZXh0ZXJuIGludCBlbDJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KTsKKworIGV4dGVybiBpbnQgY3M4OXgwX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldik7CisKKyBleHRlcm4gaW50IG5lX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldik7CisgZXh0ZXJuIGludCBocF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworIGV4dGVybiBpbnQgaHBfcGx1c19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCisKK0Fsc28gYWRkOgorCisgI2lmZGVmIENPTkZJR19DUzg5eDAKKyAJeyBjczg5eDBfcHJvYmUsMCB9LAorICNlbmRpZgorCisKKzIuKSBDb3B5IHRoZSBkcml2ZXIgc291cmNlIGZpbGVzIChjczg5eDAuYyBhbmQgY3M4OXgwLmgpIAoraW50byB0aGUgL3Vzci9zcmMvbGludXgvZHJpdmVycy9uZXQgZGlyZWN0b3J5LgorCisKKzMuKSBHbyB0byAvdXNyL3NyYy9saW51eCBkaXJlY3RvcnkgYW5kIHJ1biAnbWFrZSBjb25maWcnIGZvbGxvd2VkIGJ5ICdtYWtlJyAKKyhvciBtYWtlIGJ6SW1hZ2UpIHRvIHJlYnVpbGQgdGhlIGtlcm5lbC4gCisKKzQuKSBVc2UgdGhlIERPUyAnc2V0dXAnIHV0aWxpdHkgdG8gZGlzYWJsZSBwbHVnIGFuZCBwbGF5IG9uIHRoZSBOSUMuCisKKworNS4wIFRFU1RJTkcgQU5EIFRST1VCTEVTSE9PVElORworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCis1LjEgS05PV04gREVGRUNUUyBhbmQgTElNSVRBVElPTlMKKworUmVmZXIgdG8gdGhlIFJFTEVBU0UuVFhUIGZpbGUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiB0aGlzIGFyY2hpdmUgZm9yIGEgbGlzdCBvZiAKK2tub3duIGRlZmVjdHMsIGRyaXZlciBsaW1pdGF0aW9ucywgYW5kIHdvcmsgYXJvdW5kcy4KKworCis1LjIgVEVTVElORyBUSEUgQURBUFRFUgorCitPbmNlIHRoZSBhZGFwdGVyIGhhcyBiZWVuIGluc3RhbGxlZCBhbmQgY29uZmlndXJlZCwgdGhlIGRpYWdub3N0aWMgb3B0aW9uIG9mIAordGhlIENTODkwMC8yMCBTZXR1cCBVdGlsaXR5IGNhbiBiZSB1c2VkIHRvIHRlc3QgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIAorYWRhcHRlciBhbmQgaXRzIG5ldHdvcmsgY29ubmVjdGlvbi4gIFVzZSB0aGUgZGlhZ25vc3RpY3MgJ1NlbGYgVGVzdCcgb3B0aW9uIHRvCit0ZXN0IHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBhZGFwdGVyIHdpdGggdGhlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24geW91IGhhdmUKK2Fzc2lnbmVkLiBZb3UgY2FuIHVzZSB0aGUgZGlhZ25vc3RpY3MgJ05ldHdvcmsgVGVzdCcgdG8gdGVzdCB0aGUgYWJpbGl0eSBvZiB0aGUKK2FkYXB0ZXIgdG8gY29tbXVuaWNhdGUgYWNyb3NzIHRoZSBFdGhlcm5ldCB3aXRoIGFub3RoZXIgUEMgZXF1aXBwZWQgd2l0aCBhIAorQ1M4OTAwLzIwLWJhc2VkIGFkYXB0ZXIgY2FyZCAoaXQgbXVzdCBhbHNvIGJlIHJ1bm5pbmcgdGhlIENTODkwMC8yMCBTZXR1cCAKK1V0aWxpdHkpLgorCisgICAgICAgICBOT1RFOiBUaGUgU2V0dXAgVXRpbGl0eSdzIGRpYWdub3N0aWNzIGFyZSBkZXNpZ25lZCB0byBydW4gaW4gYQorICAgICAgICAgRE9TLW9ubHkgb3BlcmF0aW5nIHN5c3RlbSBlbnZpcm9ubWVudC4gIERPIE5PVCBydW4gdGhlIGRpYWdub3N0aWNzIAorICAgICAgICAgZnJvbSBhIERPUyBvciBjb21tYW5kIHByb21wdCBzZXNzaW9uIHVuZGVyIFdpbmRvd3MgOTUsIFdpbmRvd3MgTlQsIAorICAgICAgICAgT1MvMiwgb3Igb3RoZXIgb3BlcmF0aW5nIHN5c3RlbS4KKworVG8gcnVuIHRoZSBkaWFnbm9zdGljcyB0ZXN0cyBvbiB0aGUgQ1M4OTAwLzIwIGFkYXB0ZXI6CisKKyAgIDEuKSBCb290IERPUyBvbiB0aGUgUEMgYW5kIHN0YXJ0IHRoZSBDUzg5MDAvMjAgU2V0dXAgVXRpbGl0eS4KKworICAgMi4pIFRoZSBhZGFwdGVyJ3MgY3VycmVudCBjb25maWd1cmF0aW9uIGlzIGRpc3BsYXllZC4gIEhpdCB0aGUgRU5URVIga2V5IHRvCisgICAgICAgZ2V0IHRvIHRoZSBtYWluIG1lbnUuCisKKyAgIDQuKSBTZWxlY3QgJ0RpYWdub3N0aWNzJyAoQUxULUcpIGZyb20gdGhlIG1haW4gbWVudS4gIAorICAgICAgICogU2VsZWN0ICdTZWxmLVRlc3QnIHRvIHRlc3QgdGhlIGFkYXB0ZXIncyBiYXNpYyBmdW5jdGlvbmFsaXR5LgorICAgICAgICogU2VsZWN0ICdOZXR3b3JrIFRlc3QnIHRvIHRlc3QgdGhlIG5ldHdvcmsgY29ubmVjdGlvbiBhbmQgY2FibGluZy4KKworCis1LjIuMSBESUFHTk9TVElDIFNFTEYtVEVTVAorCitUaGUgZGlhZ25vc3RpYyBzZWxmLXRlc3QgY2hlY2tzIHRoZSBhZGFwdGVyJ3MgYmFzaWMgZnVuY3Rpb25hbGl0eSBhcyB3ZWxsIGFzIAoraXRzIGFiaWxpdHkgdG8gY29tbXVuaWNhdGUgYWNyb3NzIHRoZSBJU0EgYnVzIGJhc2VkIG9uIHRoZSBzeXN0ZW0gcmVzb3VyY2VzIAorYXNzaWduZWQgZHVyaW5nIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24uICBUaGUgZm9sbG93aW5nIHRlc3RzIGFyZSBwZXJmb3JtZWQ6CisKKyAgICogSU8gUmVnaXN0ZXIgUmVhZC9Xcml0ZSBUZXN0CisgICAgIFRoZSBJTyBSZWdpc3RlciBSZWFkL1dyaXRlIHRlc3QgaW5zdXJlcyB0aGF0IHRoZSBDUzg5MDAvMjAgY2FuIGJlIAorICAgICBhY2Nlc3NlZCBpbiBJTyBtb2RlLCBhbmQgdGhhdCB0aGUgSU8gYmFzZSBhZGRyZXNzIGlzIGNvcnJlY3QuCisKKyAgICogU2hhcmVkIE1lbW9yeSBUZXN0CisgICAgIFRoZSBTaGFyZWQgTWVtb3J5IHRlc3QgaW5zdXJlcyB0aGUgQ1M4OTAwLzIwIGNhbiBiZSBhY2Nlc3NlZCBpbiBtZW1vcnkgCisgICAgIG1vZGUgYW5kIHRoYXQgdGhlIHJhbmdlIG9mIG1lbW9yeSBhZGRyZXNzZXMgYXNzaWduZWQgZG9lcyBub3QgY29uZmxpY3QgCisgICAgIHdpdGggb3RoZXIgZGV2aWNlcyBpbiB0aGUgc3lzdGVtLgorCisgICAqIEludGVycnVwdCBUZXN0CisgICAgIFRoZSBJbnRlcnJ1cHQgdGVzdCBpbnN1cmVzIHRoZXJlIGFyZSBubyBjb25mbGljdHMgd2l0aCB0aGUgYXNzaWduZWQgSVJRCisgICAgIHNpZ25hbC4KKworICAgKiBFRVBST00gVGVzdAorICAgICBUaGUgRUVQUk9NIHRlc3QgaW5zdXJlcyB0aGUgRUVQUk9NIGNhbiBiZSByZWFkLgorCisgICAqIENoaXAgUkFNIFRlc3QKKyAgICAgVGhlIENoaXAgUkFNIHRlc3QgaW5zdXJlcyB0aGUgNEsgb2YgbWVtb3J5IGludGVybmFsIHRvIHRoZSBDUzg5MDAvMjAgaXMKKyAgICAgd29ya2luZyBwcm9wZXJseS4KKworICAgKiBJbnRlcm5hbCBMb29wLWJhY2sgVGVzdAorICAgICBUaGUgSW50ZXJuYWwgTG9vcCBCYWNrIHRlc3QgaW5zdXJlcyB0aGUgYWRhcHRlcidzIHRyYW5zbWl0dGVyIGFuZCAKKyAgICAgcmVjZWl2ZXIgYXJlIG9wZXJhdGluZyBwcm9wZXJseS4gIElmIHRoaXMgdGVzdCBmYWlscywgbWFrZSBzdXJlIHRoZSAKKyAgICAgYWRhcHRlcidzIGNhYmxlIGlzIGNvbm5lY3RlZCB0byB0aGUgbmV0d29yayAoY2hlY2sgZm9yIExFRCBhY3Rpdml0eSBmb3IgCisgICAgIGV4YW1wbGUpLgorCisgICAqIEJvb3QgUFJPTSBUZXN0CisgICAgIFRoZSBCb290IFBST00gIHRlc3QgaW5zdXJlcyB0aGUgQm9vdCBQUk9NIGlzIHByZXNlbnQsIGFuZCBjYW4gYmUgcmVhZC4KKyAgICAgRmFpbHVyZSBpbmRpY2F0ZXMgdGhlIEJvb3QgUFJPTSAgd2FzIG5vdCBzdWNjZXNzZnVsbHkgcmVhZCBkdWUgdG8gYQorICAgICBoYXJkd2FyZSBwcm9ibGVtIG9yIGR1ZSB0byBhIGNvbmZsaWN0cyBvbiB0aGUgQm9vdCBQUk9NIGFkZHJlc3MKKyAgICAgYXNzaWdubWVudC4gKFRlc3Qgb25seSBhcHBsaWVzIGlmIHRoZSBhZGFwdGVyIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZQorICAgICBCb290IFBST00gb3B0aW9uLikKKworRmFpbHVyZSBvZiBhIHRlc3QgaXRlbSBpbmRpY2F0ZXMgYSBwb3NzaWJsZSBzeXN0ZW0gcmVzb3VyY2UgY29uZmxpY3Qgd2l0aCAKK2Fub3RoZXIgZGV2aWNlIG9uIHRoZSBJU0EgYnVzLiAgSW4gdGhpcyBjYXNlLCB5b3Ugc2hvdWxkIHVzZSB0aGUgTWFudWFsIFNldHVwIAorb3B0aW9uIHRvIHJlY29uZmlndXJlIHRoZSBhZGFwdGVyIGJ5IHNlbGVjdGluZyBhIGRpZmZlcmVudCB2YWx1ZSBmb3IgdGhlIHN5c3RlbQorcmVzb3VyY2UgdGhhdCBmYWlsZWQuCisKKworNS4yLjIgRElBR05PU1RJQyBORVRXT1JLIFRFU1QKKworVGhlIERpYWdub3N0aWMgTmV0d29yayBUZXN0IHZlcmlmaWVzIGEgd29ya2luZyBuZXR3b3JrIGNvbm5lY3Rpb24gYnkgCit0cmFuc2ZlcnJpbmcgZGF0YSBiZXR3ZWVuIHR3byBDUzg5MDAvMjAgYWRhcHRlcnMgaW5zdGFsbGVkIGluIGRpZmZlcmVudCBQQ3MgCitvbiB0aGUgc2FtZSBuZXR3b3JrLiAoTm90ZTogdGhlIGRpYWdub3N0aWMgbmV0d29yayB0ZXN0IHNob3VsZCBub3QgYmUgcnVuIAorYmV0d2VlbiB0d28gbm9kZXMgYWNyb3NzIGEgcm91dGVyLikgCisKK1RoaXMgdGVzdCByZXF1aXJlcyB0aGF0IGVhY2ggb2YgdGhlIHR3byBQQ3MgaGF2ZSBhIENTODkwMC8yMC1iYXNlZCBhZGFwdGVyCitpbnN0YWxsZWQgYW5kIGhhdmUgdGhlIENTODkwMC8yMCBTZXR1cCBVdGlsaXR5IHJ1bm5pbmcuICBUaGUgZmlyc3QgUEMgaXMgCitjb25maWd1cmVkIGFzIGEgUmVzcG9uZGVyIGFuZCB0aGUgb3RoZXIgUEMgaXMgY29uZmlndXJlZCBhcyBhbiBJbml0aWF0b3IuICAKK09uY2UgdGhlIEluaXRpYXRvciBpcyBzdGFydGVkLCBpdCBzZW5kcyBkYXRhIGZyYW1lcyB0byB0aGUgUmVzcG9uZGVyIHdoaWNoIAorcmV0dXJucyB0aGUgZnJhbWVzIHRvIHRoZSBJbml0aWF0b3IuCisKK1RoZSB0b3RhbCBudW1iZXIgb2YgZnJhbWVzIHJlY2VpdmVkIGFuZCB0cmFuc21pdHRlZCBhcmUgZGlzcGxheWVkIG9uIHRoZSAKK0luaXRpYXRvcidzIGRpc3BsYXksIGFsb25nIHdpdGggYSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGZyYW1lcyByZWNlaXZlZCBhbmQgCit0cmFuc21pdHRlZCBPSyBvciBpbiBlcnJvci4gIFRoZSB0ZXN0IGNhbiBiZSB0ZXJtaW5hdGVkIGFueXRpbWUgYnkgdGhlIHVzZXIgYXQgCitlaXRoZXIgUEMuCisKK1RvIHNldHVwIHRoZSBEaWFnbm9zdGljIE5ldHdvcmsgVGVzdDoKKworICAgIDEuKSBTZWxlY3QgYSBQQyB3aXRoIGEgQ1M4OTAwLzIwLWJhc2VkIGFkYXB0ZXIgYW5kIGEga25vd24gd29ya2luZyBuZXR3b3JrCisgICAgICAgIGNvbm5lY3Rpb24gdG8gYWN0IGFzIHRoZSBSZXNwb25kZXIuICBSdW4gdGhlIENTODkwMC8yMCBTZXR1cCBVdGlsaXR5IAorICAgICAgICBhbmQgc2VsZWN0ICdEaWFnbm9zdGljcyAtPiBOZXR3b3JrIFRlc3QgLT4gUmVzcG9uZGVyJyBmcm9tIHRoZSBtYWluIAorICAgICAgICBtZW51LiAgSGl0IEVOVEVSIHRvIHN0YXJ0IHRoZSBSZXNwb25kZXIuCisKKyAgICAyLikgUmV0dXJuIHRvIHRoZSBQQyB3aXRoIHRoZSBDUzg5MDAvMjAtYmFzZWQgYWRhcHRlciB5b3Ugd2FudCB0byB0ZXN0IGFuZAorICAgICAgICBzdGFydCB0aGUgQ1M4OTAwLzIwIFNldHVwIFV0aWxpdHkuIAorCisgICAgMy4pIEZyb20gdGhlIG1haW4gbWVudSwgU2VsZWN0ICdEaWFnbm9zdGljIC0+IE5ldHdvcmsgVGVzdCAtPiBJbml0aWF0b3InLgorICAgICAgICBIaXQgRU5URVIgdG8gc3RhcnQgdGhlIHRlc3QuCisgCitZb3UgbWF5IHN0b3AgdGhlIHRlc3Qgb24gdGhlIEluaXRpYXRvciBhdCBhbnkgdGltZSB3aGlsZSBhbGxvd2luZyB0aGUgUmVzcG9uZGVyCit0byBjb250aW51ZSBydW5uaW5nLiAgSW4gdGhpcyBtYW5uZXIsIHlvdSBjYW4gbW92ZSB0byBhZGRpdGlvbmFsIFBDcyBhbmQgdGVzdCAKK3RoZW0gYnkgc3RhcnRpbmcgdGhlIEluaXRpYXRvciBvbiBhbm90aGVyIFBDIHdpdGhvdXQgaGF2aW5nIHRvIHN0b3Avc3RhcnQgdGhlIAorUmVzcG9uZGVyLgorIAorCisKKzUuMyBVU0lORyBUSEUgQURBUFRFUidTIExFRHMKKworVGhlIDIgYW5kIDMtbWVkaWEgYWRhcHRlcnMgaGF2ZSB0d28gTEVEcyB2aXNpYmxlIG9uIHRoZSBiYWNrIGVuZCBvZiB0aGUgYm9hcmQgCitsb2NhdGVkIG5lYXIgdGhlIDEwQmFzZS1UIGNvbm5lY3Rvci4gIAorCitMaW5rIEludGVncml0eSBMRUQ6IEEgInN0ZWFkeSIgT04gb2YgdGhlIGdyZWVuIExFRCBpbmRpY2F0ZXMgYSB2YWxpZCAxMEJhc2UtVCAKK2Nvbm5lY3Rpb24uICAoT25seSBhcHBsaWVzIHRvIDEwQmFzZS1ULiAgVGhlIGdyZWVuIExFRCBoYXMgbm8gc2lnbmlmaWNhbmNlIGZvcgorYSAxMEJhc2UtMiBvciBBVUkgY29ubmVjdGlvbi4pCisKK1RYL1JYIExFRDogVGhlIHllbGxvdyBMRUQgbGlnaHRzIGJyaWVmbHkgZWFjaCB0aW1lIHRoZSBhZGFwdGVyIHRyYW5zbWl0cyBvciAKK3JlY2VpdmVzIGRhdGEuIChUaGUgeWVsbG93IExFRCB3aWxsIGFwcGVhciB0byAiZmxpY2tlciIgb24gYSB0eXBpY2FsIG5ldHdvcmsuKQorCisKKzUuNCBSRVNPTFZJTkcgSS9PIENPTkZMSUNUUworCitBbiBJTyBjb25mbGljdCBvY2N1cnMgd2hlbiB0d28gb3IgbW9yZSBhZGFwdGVyIHVzZSB0aGUgc2FtZSBJU0EgcmVzb3VyY2UgKElPIAorYWRkcmVzcywgbWVtb3J5IGFkZHJlc3Mgb3IgSVJRKS4gIFlvdSBjYW4gdXN1YWxseSBkZXRlY3QgYW4gSU8gY29uZmxpY3QgaW4gb25lIAorb2YgZm91ciB3YXlzIGFmdGVyIGluc3RhbGxpbmcgYW5kIG9yIGNvbmZpZ3VyaW5nIHRoZSBDUzg5MDAvMjAtYmFzZWQgYWRhcHRlcjoKKworICAgIDEuKSBUaGUgc3lzdGVtIGRvZXMgbm90IGJvb3QgcHJvcGVybHkgKG9yIGF0IGFsbCkuCisKKyAgICAyLikgVGhlIGRyaXZlciBjYW4gbm90IGNvbW11bmljYXRlIHdpdGggdGhlIGFkYXB0ZXIsIHJlcG9ydGluZyBhbiAiQWRhcHRlcgorICAgICAgICBub3QgZm91bmQiIGVycm9yIG1lc3NhZ2UuCisKKyAgICAzLikgWW91IGNhbm5vdCBjb25uZWN0IHRvIHRoZSBuZXR3b3JrIG9yIHRoZSBkcml2ZXIgd2lsbCBub3QgbG9hZC4KKworICAgIDQuKSBJZiB5b3UgaGF2ZSBjb25maWd1cmVkIHRoZSBhZGFwdGVyIHRvIHJ1biBpbiBtZW1vcnkgbW9kZSBidXQgdGhlIGRyaXZlcgorICAgICAgICByZXBvcnRzIGl0IGlzIHVzaW5nIElPIG1vZGUgd2hlbiBsb2FkaW5nLCB0aGlzIGlzIGFuIGluZGljYXRpb24gb2YgYQorICAgICAgICBtZW1vcnkgYWRkcmVzcyBjb25mbGljdC4KKworSWYgYW4gSU8gY29uZmxpY3Qgb2NjdXJzLCBydW4gdGhlIENTODkwMC8yMCBTZXR1cCBVdGlsaXR5IGFuZCBwZXJmb3JtIGEgCitkaWFnbm9zdGljIHNlbGYtdGVzdC4gIE5vcm1hbGx5LCB0aGUgSVNBIHJlc291cmNlIGluIGNvbmZsaWN0IHdpbGwgZmFpbCB0aGUgCitzZWxmLXRlc3QuICBJZiBzbywgcmVjb25maWd1cmUgdGhlIGFkYXB0ZXIgc2VsZWN0aW5nIGFub3RoZXIgY2hvaWNlIGZvciB0aGUgCityZXNvdXJjZSBpbiBjb25mbGljdC4gIFJ1biB0aGUgZGlhZ25vc3RpY3MgYWdhaW4gdG8gY2hlY2sgZm9yIGZ1cnRoZXIgSU8gCitjb25mbGljdHMuCisKK0luIHNvbWUgY2FzZXMsIHN1Y2ggYXMgd2hlbiB0aGUgUEMgd2lsbCBub3QgYm9vdCwgaXQgbWF5IGJlIG5lY2Vzc2FyeSB0byByZW1vdmUKK3RoZSBhZGFwdGVyIGFuZCByZWNvbmZpZ3VyZSBpdCBieSBpbnN0YWxsaW5nIGl0IGluIGFub3RoZXIgUEMgdG8gcnVuIHRoZSAKK0NTODkwMC8yMCBTZXR1cCBVdGlsaXR5LiAgT25jZSByZWluc3RhbGxlZCBpbiB0aGUgdGFyZ2V0IHN5c3RlbSwgcnVuIHRoZSAKK2RpYWdub3N0aWNzIHNlbGYtdGVzdCB0byBlbnN1cmUgdGhlIG5ldyBjb25maWd1cmF0aW9uIGlzIGZyZWUgb2YgY29uZmxpY3RzIAorYmVmb3JlIGxvYWRpbmcgdGhlIGRyaXZlciBhZ2Fpbi4KKworV2hlbiBtYW51YWxseSBjb25maWd1cmluZyB0aGUgYWRhcHRlciwga2VlcCBpbiBtaW5kIHRoZSB0eXBpY2FsIElTQSBzeXN0ZW0gCityZXNvdXJjZSB1c2FnZSBhcyBpbmRpY2F0ZWQgaW4gdGhlIHRhYmxlcyBiZWxvdy4KKworSS9PIEFkZHJlc3MgICAgCURldmljZSAgICAgICAgICAgICAgICAgICAgICAgIElSUSAgICAgIERldmljZQorLS0tLS0tLS0tLS0gICAgCS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgIC0tLSAgICAgIC0tLS0tLS0tCisgMjAwLTIwRiAgICAgICAJR2FtZSBJL08gYWRhcHRlciAgICAgICAgICAgICAgIDMgICAgICAgQ09NMiwgQnVzIE1vdXNlCisgMjMwLTIzRiAgICAgICAJQnVzIE1vdXNlICAgICAgICAgICAgICAgICAgICAgIDQgICAgICAgQ09NMQorIDI3MC0yN0YgICAgICAgCUxQVDM6IHRoaXJkIHBhcmFsbGVsIHBvcnQgICAgICA1ICAgICAgIExQVDIKKyAyRjAtMkZGICAgICAgIAlDT00yOiBzZWNvbmQgc2VyaWFsIHBvcnQgICAgICAgNiAgICAgICBGbG9wcHkgRGlzayBjb250cm9sbGVyCisgMzIwLTMyRiAgICAgICAJRml4ZWQgZGlzayBjb250cm9sbGVyICAgICAgICAgIDcgICAgICAgTFBUMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJICAgICAgIDggICAgICAgUmVhbC10aW1lIENsb2NrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOSAgICAgICBFR0EvVkdBIGRpc3BsYXkgYWRhcHRlciAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyICAgICAgIE1vdXNlIChQUy8yKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorTWVtb3J5IEFkZHJlc3MgIERldmljZSAgICAgICAgICAgICAgICAgICAgICAgICAgMTMgICAgICAgTWF0aCBDb3Byb2Nlc3NvcgorLS0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgMTQgICAgICAgSGFyZCBEaXNrIGNvbnRyb2xsZXIKK0EwMDAtQkZGRglFR0EgR3JhcGhpY3MgQWRwYXRlcgorQTAwMC1DN0ZGCVZHQSBHcmFwaGljcyBBZHBhdGVyCitCMDAwLUJGRkYJTW9ubyBHcmFwaGljcyBBZGFwdGVyCitCODAwLUJGRkYJQ29sb3IgR3JhcGhpY3MgQWRhcHRlcgorRTAwMC1GRkZGCUFUIEJJT1MKKworCisKKworNi4wIFRFQ0hOSUNBTCBTVVBQT1JUCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzYuMSBDT05UQUNUSU5HIENJUlJVUyBMT0dJQydTIFRFQ0hOSUNBTCBTVVBQT1JUCisKK0NpcnJ1cyBMb2dpYydzIENTODlYWCBUZWNobmljYWwgQXBwbGljYXRpb24gU3VwcG9ydCBjYW4gYmUgcmVhY2hlZCBhdDoKKworVGVsZXBob25lICA6KDgwMCkgODg4LTUwMTYgKGZyb20gaW5zaWRlIFUuUy4gYW5kIENhbmFkYSkKKyAgICAgICAgICAgOig1MTIpIDQ0Mi03NTU1IChmcm9tIG91dHNpZGUgdGhlIFUuUy4gYW5kIENhbmFkYSkKK0ZheCAgICAgICAgOig1MTIpIDkxMi0zODcxCitFbWFpbCAgICAgIDpldGhlcm5ldEBjcnlzdGFsLmNpcnJ1cy5jb20KK1dXVyAgICAgICAgOmh0dHA6Ly93d3cuY2lycnVzLmNvbQorCisKKzYuMiBJTkZPUk1BVElPTiBSRVFVSVJFRCBCRUZPUkUgQ09OVEFDVElORyBURUNITklDQUwgU1VQUE9SVAorCitCZWZvcmUgY29udGFjdGluZyBDaXJydXMgTG9naWMgZm9yIHRlY2huaWNhbCBzdXBwb3J0LCBiZSBwcmVwYXJlZCB0byBwcm92aWRlIGFzIAorTXVjaCBvZiB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGFzIHBvc3NpYmxlLiAKKworMS4pIEFkYXB0ZXIgdHlwZSAoQ1JEODkwMCwgQ0RCODkwMCwgQ0RCODkyMCwgZXRjLikKKworMi4pIEFkYXB0ZXIgY29uZmlndXJhdGlvbgorCisgICAgKiBJTyBCYXNlLCBNZW1vcnkgQmFzZSwgSU8gb3IgbWVtb3J5IG1vZGUgZW5hYmxlZCwgSVJRLCBETUEgY2hhbm5lbAorICAgICogUGx1ZyBhbmQgUGxheSBlbmFibGVkL2Rpc2FibGVkIChDUzg5MjAtYmFzZWQgYWRhcHRlcnMgb25seSkKKyAgICAqIENvbmZpZ3VyZWQgZm9yIG1lZGlhIGF1dG8tZGV0ZWN0IG9yIHNwZWNpZmljIG1lZGlhIHR5cGUgKHdoaWNoIHR5cGUpLiAgICAKKworMy4pIFBDIFN5c3RlbSdzIENvbmZpZ3VyYXRpb24KKworICAgICogUGx1ZyBhbmQgUGxheSBzeXN0ZW0gKHllcy9ubykKKyAgICAqIEJJT1MgKG1ha2UgYW5kIHZlcnNpb24pCisgICAgKiBTeXN0ZW0gbWFrZSBhbmQgbW9kZWwKKyAgICAqIENQVSAodHlwZSBhbmQgc3BlZWQpCisgICAgKiBTeXN0ZW0gUkFNCisgICAgKiBTQ1NJIEFkYXB0ZXIKKworNC4pIFNvZnR3YXJlCisKKyAgICAqIENTODlYWCBkcml2ZXIgYW5kIHZlcnNpb24KKyAgICAqIFlvdXIgbmV0d29yayBvcGVyYXRpbmcgc3lzdGVtIGFuZCB2ZXJzaW9uCisgICAgKiBZb3VyIHN5c3RlbSdzIE9TIHZlcnNpb24gCisgICAgKiBWZXJzaW9uIG9mIGFsbCBwcm90b2NvbCBzdXBwb3J0IGZpbGVzCisKKzUuKSBBbnkgRXJyb3IgTWVzc2FnZSBkaXNwbGF5ZWQuCisKKworCis2LjMgT0JUQUlOSU5HIFRIRSBMQVRFU1QgRFJJVkVSIFZFUlNJT04KKworWW91IGNhbiBvYnRhaW4gdGhlIGxhdGVzdCBDUzg5WFggZHJpdmVycyBhbmQgc3VwcG9ydCBzb2Z0d2FyZSBmcm9tIENpcnJ1cyBMb2dpYydzIAorV2ViIHNpdGUuICBZb3UgY2FuIGFsc28gY29udGFjdCBDaXJydXMgTG9naWMncyBUZWNobmljYWwgU3VwcG9ydCAoZW1haWw6CitldGhlcm5ldEBjcnlzdGFsLmNpcnJ1cy5jb20pIGFuZCByZXF1ZXN0IHRoYXQgeW91IGJlIHJlZ2lzdGVyZWQgZm9yIGF1dG9tYXRpYyAKK3NvZnR3YXJlLXVwZGF0ZSBub3RpZmljYXRpb24uCisKK0NpcnJ1cyBMb2dpYyBtYWludGFpbnMgYSB3ZWIgcGFnZSBhdCBodHRwOi8vd3d3LmNpcnJ1cy5jb20gd2l0aCB0aGUKK3RoZSBsYXRlc3QgZHJpdmVycyBhbmQgdGVjaG5pY2FsIHB1YmxpY2F0aW9ucy4KKworCis2LjQgQ3VycmVudCBtYWludGFpbmVyCisKK0luIEZlYnJ1YXJ5IDIwMDAgdGhlIG1haW50ZW5hbmNlIG9mIHRoaXMgZHJpdmVyIHdhcyBhc3N1bWVkIGJ5IEFuZHJldworTW9ydG9uIDxha3BtQHppcC5jb20uYXU+CisKKzYuNSBLZXJuZWwgbW9kdWxlIHBhcmFtZXRlcnMKKworRm9yIHVzZSBpbiBlbWJlZGRlZCBlbnZpcm9ubWVudHMgd2l0aCBubyBjczg5eDAgRUVQUk9NLCB0aGUga2VybmVsIGJvb3QKK3BhcmFtZXRlciBgY3M4OXgwX21lZGlhPScgaGFzIGJlZW4gaW1wbGVtZW50ZWQuICBVc2FnZSBpczoKKworCWNzODl4MF9tZWRpYT1yajQ1ICAgIG9yCisJY3M4OXgwX21lZGlhPWF1aSAgICAgb3IKKwljczg5eDBfbWVkaWE9Ym5jCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZTR4NS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGU0eDUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZTRjYTkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGU0eDUudHh0CkBAIC0wLDAgKzEsMTc4IEBACisgICAgT3JpZ2luYWxseSwgICB0aGlzICBkcml2ZXIgIHdhcyAgICB3cml0dGVuICBmb3IgdGhlICBEaWdpdGFsICAgRXF1aXBtZW50CisgICAgQ29ycG9yYXRpb24gc2VyaWVzIG9mIEV0aGVyV09SS1MgRXRoZXJuZXQgY2FyZHM6CisKKyAgICAgICAgREU0MjUgVFAvQ09BWCBFSVNBCisJREU0MzQgVFAgUENJCisJREU0MzUgVFAvQ09BWC9BVUkgUENJCisJREU0NTAgVFAvQ09BWC9BVUkgUENJCisJREU1MDAgMTAvMTAwIFBDSSBGYXN0ZXJuZXQKKworICAgIGJ1dCBpdCAgd2lsbCAgbm93IGF0dGVtcHQgIHRvICBzdXBwb3J0IGFsbCAgY2FyZHMgd2hpY2ggICBjb25mb3JtIHRvIHRoZQorICAgIERpZ2l0YWwgU2VtaWNvbmR1Y3RvciAgIFNST00gICBTcGVjaWZpY2F0aW9uLiAgICBUaGUgIGRyaXZlciAgIGN1cnJlbnRseQorICAgIHJlY29nbmlzZXMgdGhlIGZvbGxvd2luZyBjaGlwczoKKworICAgICAgICBEQzIxMDQwICAobm8gU1JPTSkgCisJREMyMTA0MVtBXSAgCisJREMyMTE0MFtBXSAKKwlEQzIxMTQyIAorCURDMjExNDMgCisKKyAgICBTbyBmYXIgdGhlIGRyaXZlciBpcyBrbm93biB0byB3b3JrIHdpdGggdGhlIGZvbGxvd2luZyBjYXJkczoKKworICAgICAgICBLSU5HU1RPTgorCUxpbmtzeXMKKwlaTllYMzQyCisJU01DODQzMgorCVNNQzkzMzIgKHcvbmV3IFNST00pCisJWk5ZWDMxWzQ1XQorCVpOWVgzNDYgMTAvMTAwIDQgcG9ydCAoY2FuIGFjdCBhcyBhIDEwLzEwMCBicmlkZ2UhKSAKKworICAgIFRoZSBkcml2ZXIgaGFzIGJlZW4gdGVzdGVkIG9uIGEgcmVsYXRpdmVseSBidXN5IG5ldHdvcmsgdXNpbmcgdGhlIERFNDI1LAorICAgIERFNDM0LCBERTQzNSBhbmQgREU1MDAgY2FyZHMgYW5kIGJlbmNobWFya2VkIHdpdGggJ3R0Y3AnOiBpdCB0cmFuc2ZlcnJlZAorICAgIDE2TSBvZiBkYXRhIHRvIGEgREVDc3RhdGlvbiA1MDAwLzIwMCBhcyBmb2xsb3dzOgorCisgICAgICAgICAgICAgICAgVENQICAgICAgICAgICBVRFAKKyAgICAgICAgICAgICBUWCAgICAgUlggICAgIFRYICAgICBSWAorICAgIERFNDI1ICAgMTAzMGsgIDk5N2sgICAxMTcwayAgMTEyOGsKKyAgICBERTQzNCAgIDEwNjNrICA5OTVrICAgMTE3MGsgIDExMjVrCisgICAgREU0MzUgICAxMDYzayAgOTk1ayAgIDExNzBrICAxMTI1aworICAgIERFNTAwICAgMTA2M2sgIDk5OGsgICAxMTcwayAgMTEyNWsgIGluIDEwTWIvcyBtb2RlCisKKyAgICBBbGwgIHZhbHVlcyBhcmUgdHlwaWNhbCAoaW4gICBrQnl0ZXMvc2VjKSBmcm9tIGEgIHNhbXBsZSAgb2YgNCBmb3IgIGVhY2gKKyAgICBtZWFzdXJlbWVudC4gVGhlaXIgZXJyb3IgaXMgKy8tMjBrIG9uIGEgcXVpZXQgKHByaXZhdGUpIG5ldHdvcmsgYW5kIGFsc28KKyAgICBkZXBlbmQgb24gd2hhdCBsb2FkIHRoZSBDUFUgaGFzLgorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgVGhlIGFiaWxpdHkgdG8gbG9hZCB0aGlzICBkcml2ZXIgYXMgYSBsb2FkYWJsZSAgbW9kdWxlIGhhcyBiZWVuIGluY2x1ZGVkCisgICAgYW5kIHVzZWQgZXh0ZW5zaXZlbHkgIGR1cmluZyB0aGUgZHJpdmVyIGRldmVsb3BtZW50ICAodG8gc2F2ZSB0aG9zZSBsb25nCisgICAgcmVib290IHNlcXVlbmNlcykuICBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydCAgdW5kZXIgUENJIGFuZCBFSVNBIGhhcyBiZWVuCisgICAgYWNoaWV2ZWQgYnkgbGV0dGluZyB0aGUgZHJpdmVyIGF1dG9wcm9iZSBhcyBpZiBpdCB3ZXJlIGNvbXBpbGVkIGludG8gdGhlCisgICAga2VybmVsLiBEbyBtYWtlIHN1cmUgIHlvdSdyZSBub3Qgc2hhcmluZyAgaW50ZXJydXB0cyB3aXRoIGFueXRoaW5nICB0aGF0CisgICAgY2Fubm90IGFjY29tbW9kYXRlICBpbnRlcnJ1cHQgIHNoYXJpbmchCisKKyAgICBUbyB1dGlsaXNlIHRoaXMgYWJpbGl0eSwgeW91IGhhdmUgdG8gZG8gOCB0aGluZ3M6CisKKyAgICAwKSBoYXZlIGEgY29weSBvZiB0aGUgbG9hZGFibGUgbW9kdWxlcyBjb2RlIGluc3RhbGxlZCBvbiB5b3VyIHN5c3RlbS4KKyAgICAxKSBjb3B5IGRlNHg1LmMgZnJvbSB0aGUgIC9saW51eC9kcml2ZXJzL25ldCBkaXJlY3RvcnkgdG8geW91ciBmYXZvdXJpdGUKKyAgICB0ZW1wb3JhcnkgZGlyZWN0b3J5LgorICAgIDIpIGZvciBmaXhlZCAgYXV0b3Byb2JlcyAobm90ICByZWNvbW1lbmRlZCksICBlZGl0IHRoZSBzb3VyY2UgY29kZSAgbmVhcgorICAgIGxpbmUgNTU5NCB0byByZWZsZWN0IHRoZSBJL08gYWRkcmVzcyAgeW91J3JlIHVzaW5nLCBvciBhc3NpZ24gdGhlc2Ugd2hlbgorICAgIGxvYWRpbmcgYnk6CisKKyAgICAgICAgICAgICAgICAgICBpbnNtb2QgZGU0eDUgaW89MHhnaGggICAgICAgICAgIHdoZXJlIGcgPSBidXMgbnVtYmVyCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaCA9IGRldmljZSBudW1iZXIgICAKKworICAgICAgIE5COiBhdXRvcHJvYmluZyBmb3IgbW9kdWxlcyBpcyBub3cgc3VwcG9ydGVkIGJ5IGRlZmF1bHQuIFlvdSBtYXkganVzdAorICAgICAgICAgICB1c2U6CisKKyAgICAgICAgICAgICAgICAgICBpbnNtb2QgZGU0eDUKKworICAgICAgICAgICB0byBsb2FkIGFsbCBhdmFpbGFibGUgYm9hcmRzLiBGb3IgYSBzcGVjaWZpYyBib2FyZCwgc3RpbGwgdXNlCisJICAgdGhlICdpbz0/JyBhYm92ZS4KKyAgICAzKSBjb21waWxlICBkZTR4NS5jLCBidXQgaW5jbHVkZSAtRE1PRFVMRSBpbiAgdGhlIGNvbW1hbmQgbGluZSB0byBlbnN1cmUKKyAgICB0aGF0IHRoZSBjb3JyZWN0IGJpdHMgYXJlIGNvbXBpbGVkIChzZWUgZW5kIG9mIHNvdXJjZSBjb2RlKS4KKyAgICA0KSBpZiB5b3UgYXJlIHdhbnRpbmcgdG8gYWRkIGEgbmV3ICBjYXJkLCBnb3RvIDUuIE90aGVyd2lzZSwgcmVjb21waWxlIGEKKyAgICBrZXJuZWwgd2l0aCB0aGUgZGU0eDUgY29uZmlndXJhdGlvbiB0dXJuZWQgb2ZmIGFuZCByZWJvb3QuCisgICAgNSkgaW5zbW9kIGRlNHg1IFtpbz0weGdoaF0KKyAgICA2KSBydW4gdGhlIG5ldCBzdGFydHVwIGJpdHMgZm9yIHlvdXIgbmV3IGV0aD8/IGludGVyZmFjZShzKSBtYW51YWxseSAKKyAgICAodXN1YWxseSAvZXRjL3JjLmluZXRbMTJdIGF0IGJvb3QgdGltZSkuIAorICAgIDcpIGVuam95IQorCisgICAgVG8gdW5sb2FkIGEgbW9kdWxlLCB0dXJuIG9mZiB0aGUgYXNzb2NpYXRlZCBpbnRlcmZhY2UocykgCisgICAgJ2lmY29uZmlnIGV0aD8/IGRvd24nIHRoZW4gJ3JtbW9kIGRlNHg1Jy4KKworICAgIEF1dG9tZWRpYSBkZXRlY3Rpb24gaXMgaW5jbHVkZWQgc28gdGhhdCBpbiAgcHJpbmNpcGxlIHlvdSBjYW4gZGlzY29ubmVjdAorICAgIGZyb20sIGUuZy4gIFRQLCByZWNvbm5lY3QgIHRvIEJOQyAgYW5kICB0aGluZ3Mgd2lsbCBzdGlsbCB3b3JrICAoYWZ0ZXIgYQorICAgIHBhdXNlIHdoaWxzdCB0aGUgICBkcml2ZXIgZmlndXJlcyBvdXQgICB3aGVyZSBpdHMgbWVkaWEgd2VudCkuICBNeSB0ZXN0cworICAgIHVzaW5nIHBpbmcgc2hvd2VkIHRoYXQgaXQgYXBwZWFycyB0byB3b3JrLi4uLgorCisgICAgQnkgIGRlZmF1bHQsICB0aGUgZHJpdmVyIHdpbGwgIG5vdyAgIGF1dG9kZXRlY3QgYW55ICBERUNjaGlwIGJhc2VkIGNhcmQuCisgICAgU2hvdWxkIHlvdSBoYXZlIGEgbmVlZCB0byByZXN0cmljdCB0aGUgZHJpdmVyIHRvIERJR0lUQUwgb25seSBjYXJkcywgeW91CisgICAgY2FuIGNvbXBpbGUgd2l0aCBhICBERUNfT05MWSBkZWZpbmUsIG9yIGlmICBsb2FkaW5nIGFzIGEgbW9kdWxlLCB1c2UgdGhlCisgICAgJ2RlY19vbmx5PTEnICBwYXJhbWV0ZXIuIAorCisgICAgSSd2ZSBjaGFuZ2VkIHRoZSB0aW1pbmcgcm91dGluZXMgdG8gIHVzZSB0aGUga2VybmVsIHRpbWVyIGFuZCBzY2hlZHVsaW5nCisgICAgZnVuY3Rpb25zICBzbyB0aGF0IHRoZSAgaGFuZ3MgIGFuZCBvdGhlciBhc3NvcnRlZCBwcm9ibGVtcyB0aGF0IG9jY3VycmVkCisgICAgd2hpbGUgYXV0b3NlbnNpbmcgdGhlICBtZWRpYSAgc2hvdWxkIGJlIGdvbmUuICBBICBib251cyAgZm9yIHRoZSBEQzIxMDQwCisgICAgYXV0byAgbWVkaWEgc2Vuc2UgYWxnb3JpdGhtIGlzICB0aGF0IGl0IGNhbiBub3cgIHVzZSBvbmUgdGhhdCBpcyBtb3JlIGluCisgICAgbGluZSB3aXRoIHRoZSAgcmVzdCAodGhlIERDMjEwNDAgIGNoaXAgZG9lc24ndCAgaGF2ZSBhIGhhcmR3YXJlICB0aW1lcikuCisgICAgVGhlIGRvd25zaWRlIGlzIHRoZSAxICdqaWZmaWVzJyAoMTBtcykgcmVzb2x1dGlvbi4KKworICAgIElFRUUgODAyLjN1IE1JSSBpbnRlcmZhY2UgY29kZSBoYXMgIGJlZW4gYWRkZWQgaW4gYW50aWNpcGF0aW9uIHRoYXQgc29tZQorICAgIHByb2R1Y3RzIG1heSB1c2UgaXQgaW4gdGhlIGZ1dHVyZS4KKworICAgIFRoZSBTTUM5MzMyIGNhcmQgIGhhcyBhIG5vbi1jb21wbGlhbnQgU1JPTSAgd2hpY2ggbmVlZHMgZml4aW5nIC0gIEkgaGF2ZQorICAgIHBhdGNoZWQgdGhpcyAgZHJpdmVyIHRvIGRldGVjdCBpdCAgYmVjYXVzZSB0aGUgU1JPTSBmb3JtYXQgdXNlZCBjb21wbGllcworICAgIHRvIGEgcHJldmlvdXMgREVDLVNURCBmb3JtYXQuCisKKyAgICBJIGhhdmUgcmVtb3ZlZCB0aGUgYnVmZmVyIGNvcGllcyBuZWVkZWQgZm9yIHJlY2VpdmUgb24gSW50ZWxzLiAgSSBjYW5ub3QKKyAgICByZW1vdmUgdGhlbSBmb3IgICBBbHBoYXMgc2luY2UgIHRoZSAgVHVsaXAgaGFyZHdhcmUgICBvbmx5IGRvZXMgbG9uZ3dvcmQKKyAgICBhbGlnbmVkICBETUEgdHJhbnNmZXJzICBhbmQgIHRoZSAgQWxwaGFzIGdldCAgIGFsaWdubWVudCB0cmFwcyB3aXRoICBub24KKyAgICBsb25nd29yZCBhbGlnbmVkIGRhdGEgY29waWVzICh3aGljaCBtYWtlcyB0aGVtIHJlYWxseSBzbG93KS4gTm8gY29tbWVudC4KKworICAgIEkgIGhhdmUgYWRkZWQgU1JPTSBkZWNvZGluZyAgcm91dGluZXMgdG8gbWFrZSB0aGlzICBkcml2ZXIgd29yayB3aXRoIGFueQorICAgIGNhcmQgdGhhdCAgc3VwcG9ydHMgdGhlIERpZ2l0YWwgIFNlbWljb25kdWN0b3IgU1JPTSBzcGVjLiBUaGlzIHdpbGwgaGVscAorICAgIGFsbCAgY2FyZHMgcnVubmluZyB0aGUgZGMyMTE0eCAgc2VyaWVzIGNoaXBzIGluIHBhcnRpY3VsYXIuICBDYXJkcyB1c2luZworICAgIHRoZSBkYzIxMDR4ICBjaGlwcyBzaG91bGQgcnVuIGNvcnJlY3RseSB3aXRoICB0aGUgYmFzaWMgIGRyaXZlci4gIEknbSBpbgorICAgIGRlYnQgdG8gPG1qYWNvYkBmZXJhbC5jb20+IGZvciB0aGUgIHRlc3RpbmcgYW5kIGZlZWRiYWNrIHRoYXQgaGVscGVkIGdldAorICAgIHRoaXMgZmVhdHVyZSB3b3JraW5nLiAgU28gZmFyIHdlIGhhdmUgIHRlc3RlZCBLSU5HU1RPTiwgU01DODQzMiwgU01DOTMzMgorICAgICh3aXRoIHRoZSBsYXRlc3QgU1JPTSBjb21wbHlpbmcgIHdpdGggdGhlIFNST00gc3BlYyAgVjM6IHRoZWlyIGZpcnN0IHdhcworICAgIGJyb2tlbiksIFpOWVgzNDIgIGFuZCAgTGlua1N5cy4gWk5ZWDMxNCAoZHVhbCAgMjEwNDEgIE1BQykgYW5kICBaTllYIDMxNQorICAgIChxdWFkIDIxMDQxIE1BQykgIGNhcmRzIGFsc28gIGFwcGVhciAgdG8gd29yayBkZXNwaXRlIHRoZWlyICBpbmNvcnJlY3RseQorICAgIHdpcmVkIElSUXMuCisKKyAgICBJIGhhdmUgYWRkZWQgYSB0ZW1wb3JhcnkgZml4IGZvciBpbnRlcnJ1cHQgcHJvYmxlbXMgd2hlbiBzb21lIFNDU0kgY2FyZHMKKyAgICBzaGFyZSB0aGUgc2FtZSBpbnRlcnJ1cHQgYXMgdGhlIERFQ2NoaXAgYmFzZWQgIGNhcmRzLiBUaGUgcHJvYmxlbSBvY2N1cnMKKyAgICBiZWNhdXNlICB0aGUgU0NTSSBjYXJkIHdhbnRzIHRvICBncmFiIHRoZSBpbnRlcnJ1cHQgIGFzIGEgZmFzdCBpbnRlcnJ1cHQKKyAgICAocnVucyB0aGUgICBzZXJ2aWNlIHJvdXRpbmUgd2l0aCBpbnRlcnJ1cHRzIHR1cm5lZCAgIG9mZikgdnMuICB0aGlzIGNhcmQKKyAgICB3aGljaCByZWFsbHkgbmVlZHMgdG8gcnVuIHRoZSBzZXJ2aWNlIHJvdXRpbmUgd2l0aCBpbnRlcnJ1cHRzIHR1cm5lZCBvbi4KKyAgICBUaGlzIGRyaXZlciB3aWxsICBub3cgICBhZGQgdGhlIGludGVycnVwdCBzZXJ2aWNlICAgcm91dGluZSAgYXMgIGEgIGZhc3QKKyAgICBpbnRlcnJ1cHQgaWYgaXQgICBpcyBib3VuY2VkIGZyb20gdGhlICAgc2xvdyBpbnRlcnJ1cHQuICBUSElTIElTIE5PVCAgIEEKKyAgICBSRUNPTU1FTkRFRCBXQVkgVE8gUlVOIFRIRSBEUklWRVIgIGFuZCBoYXMgYmVlbiBkb25lICBmb3IgYSBsaW1pdGVkIHRpbWUKKyAgICB1bnRpbCAgcGVvcGxlICAgc29ydCAgb3V0IHRoZWlyICBjb21wYXRpYmlsaXR5ICAgIGlzc3VlcyBhbmQgdGhlICBrZXJuZWwKKyAgICBpbnRlcnJ1cHQgIHNlcnZpY2UgY29kZSAgaXMgIGZpeGVkLiAgIFlPVSAgU0hPVUxEIFNFUEFSQVRFIE9VVCAgVEhFIEZBU1QKKyAgICBJTlRFUlJVUFQgQ0FSRFMgRlJPTSBUSEUgU0xPVyBJTlRFUlJVUFQgQ0FSRFMgdG8gZW5zdXJlIHRoYXQgdGhleSBkbyBub3QKKyAgICBydW4gb24gdGhlIHNhbWUgaW50ZXJydXB0LiBQQ01DSUEvQ2FyZEJ1cyBpcyBhbm90aGVyIGNhbiBvZiB3b3Jtcy4uLgorCisgICAgRmluYWxseSwgSSB0aGluayAgSSBoYXZlIHJlYWxseSAgZml4ZWQgIHRoZSBtb2R1bGUgIGxvYWRpbmcgcHJvYmxlbSB3aXRoCisgICAgbW9yZSB0aGFuIG9uZSBERUNjaGlwIGJhc2VkICBjYXJkLiAgQXMgYSAgc2lkZSBlZmZlY3QsIEkgZG9uJ3QgbWVzcyB3aXRoCisgICAgdGhlICBkZXZpY2Ugc3RydWN0dXJlIGFueSAgbW9yZSB3aGljaCBtZWFucyB0aGF0ICBpZiBtb3JlIHRoYW4gMSBjYXJkIGluCisgICAgMi4wLnggaXMgICAgaW5zdGFsbGVkICg0ICBpbiAgIDIuMS54KSwgIHRoZSAgdXNlciAgIHdpbGwgaGF2ZSAgIHRvICBlZGl0CisgICAgbGludXgvZHJpdmVycy9uZXQvU3BhY2UuYyAgdG8gbWFrZSByb29tIGZvciAgdGhlbS4gSGVuY2UsIG1vZHVsZSBsb2FkaW5nCisgICAgaXMgIHRoZSBwcmVmZXJyZWQgd2F5IHRvIHVzZSAgIHRoaXMgZHJpdmVyLCBzaW5jZSAgaXQgIGRvZXNuJ3QgaGF2ZSB0aGlzCisgICAgbGltaXRhdGlvbi4KKworICAgIFdoZXJlIFNST00gbWVkaWEgIGRldGVjdGlvbiBpcyB1c2VkIGFuZCAgZnVsbCBkdXBsZXggaXMgc3BlY2lmaWVkIGluIHRoZQorICAgIFNST00sICB0aGUgZmVhdHVyZSBpcyAgaWdub3JlZCB1bmxlc3MgIGxwLT5wYXJhbXMuZmR4ICBpcyBzZXQgYXQgY29tcGlsZQorICAgIHRpbWUgIE9SIGR1cmluZyAgYSAgIG1vZHVsZSBsb2FkICAoaW5zbW9kICBkZTR4NSAgIGFyZ3M9J2V0aD8/OmZkeCcgW3NlZQorICAgIGJlbG93XSkuICBUaGlzIGlzIGJlY2F1c2UgdGhlcmUgIGlzIG5vIHdheSAgdG8gYXV0b21hdGljYWxseSBkZXRlY3QgZnVsbAorICAgIGR1cGxleCAgIGxpbmtzICBleGNlcHQgdGhyb3VnaCAgIGF1dG9uZWdvdGlhdGlvbi4gICAgV2hlbiBJICBpbmNsdWRlIHRoZQorICAgIGF1dG9uZWdvdGlhdGlvbiBmZWF0dXJlIGluICB0aGUgU1JPTSBhdXRvY29uZiAgY29kZSwgdGhpcyBkZXRlY3Rpb24gd2lsbAorICAgIG9jY3VyIGF1dG9tYXRpY2FsbHkgZm9yIHRoYXQgY2FzZS4KKworICAgIENvbW1hbmQgbGluZSAgYXJndW1lbnRzIGFyZSAgbm93IGFsbG93ZWQsIHNpbWlsYXIgdG8gIHBhc3NpbmcgIGFyZ3VtZW50cworICAgIHRocm91Z2ggTElMTy4gVGhpcyB3aWxsIGFsbG93IGEgcGVyIGFkYXB0ZXIgYm9hcmQgc2V0ICB1cCBvZiBmdWxsIGR1cGxleAorICAgIGFuZCBtZWRpYS4gVGhlIG9ubHkgbGV4aWNhbCBjb25zdHJhaW50cyBhcmU6ICB0aGUgYm9hcmQgbmFtZSAoZGV2LT5uYW1lKQorICAgIGFwcGVhcnMgaW4gIHRoZSBsaXN0IGJlZm9yZSBpdHMgcGFyYW1ldGVycy4gIFRoZSBsaXN0IG9mIHBhcmFtZXRlcnMgZW5kcworICAgIGVpdGhlciBhdCB0aGUgZW5kIG9mIHRoZSBwYXJhbWV0ZXIgbGlzdCBvciB3aXRoIGFub3RoZXIgYm9hcmQgbmFtZS4gIFRoZQorICAgIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBhbGxvd2VkOgorCisgICAgICAgICAgICBmZHggICAgICAgIGZvciBmdWxsIGR1cGxleAorCSAgICBhdXRvc2Vuc2UgIHRvIHNldCB0aGUgbWVkaWEvc3BlZWQ7IHdpdGggdGhlIGZvbGxvd2luZyAKKwkgICAgICAgICAgICAgICBzdWItcGFyYW1ldGVyczoKKwkJICAgICAgIFRQLCBUUF9OVywgQk5DLCBBVUksIEJOQ19BVUksIDEwME1iLCAxME1iLCBBVVRPCisKKyAgICBDYXNlIHNlbnNpdGl2aXR5IGlzIGltcG9ydGFudCAgZm9yICB0aGUgc3ViLXBhcmFtZXRlcnMuIFRoZXkgKm11c3QqICAgYmUKKyAgICB1cHBlciBjYXNlLiBFeGFtcGxlczoKKworICAgICAgICBpbnNtb2QgZGU0eDUgYXJncz0nZXRoMTpmZHggYXV0b3NlbnNlPUJOQyBldGgwOmF1dG9zZW5zZT0xMDBNYicuCisKKyAgICBGb3IgYSBjb21waWxlZCBpbiBkcml2ZXIsIGluIGxpbnV4L2RyaXZlcnMvbmV0L0NPTkZJRywgcGxhY2UgZS5nLgorCURFNFg1X09QVFMgPSAtRERFNFg1X1BBUk09JyJldGgwOmZkeCBhdXRvc2Vuc2U9QVVJIGV0aDI6YXV0b3NlbnNlPVRQIicgCisKKyAgICBZZXMsICBJIGtub3cgZnVsbCBkdXBsZXggIGlzbid0IHBlcm1pc3NpYmxlIG9uIEJOQyAgb3IgQVVJOyB0aGV5J3JlIGp1c3QKKyAgICBleGFtcGxlcy4gQnkgZGVmYXVsdCwgZnVsbCBkdXBsZXggaXMgdHVybmVkICBvZmYgYW5kIEFVVE8gaXMgdGhlIGRlZmF1bHQKKyAgICBhdXRvc2Vuc2Ugc2V0dGluZy4gSW4gIHJlYWxpdHksIEkgZXhwZWN0IG9ubHkgdGhlICBmdWxsIGR1cGxleCBvcHRpb24gdG8KKyAgICBiZSB1c2VkLiBOb3RlIHRoZSB1c2Ugb2Ygc2luZ2xlIHF1b3RlcyBpbiB0aGUgdHdvIGV4YW1wbGVzIGFib3ZlIGFuZCB0aGUKKyAgICBsYWNrIG9mIGNvbW1hcyB0byBzZXBhcmF0ZSBpdGVtcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZWNuZXQudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RlY25ldC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZiZDI1ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZWNuZXQudHh0CkBAIC0wLDAgKzEsMjM0IEBACisgICAgICAgICAgICAgICAgICAgIExpbnV4IERFQ25ldCBOZXR3b3JraW5nIExheWVyIEluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxKSBPdGhlciBkb2N1bWVudGF0aW9uLi4uLgorCisgICBvIFByb2plY3QgSG9tZSBQYWdlcworICAgICAgIGh0dHA6Ly93d3cuY2h5Z3d5bi5jb20vREVDbmV0LyAgICAgICAgICAgICAgICAgICAgICAtIEtlcm5lbCBpbmZvCisgICAgICAgaHR0cDovL2xpbnV4LWRlY25ldC5zb3VyY2Vmb3JnZS5uZXQvICAgICAgICAgICAgICAgIC0gVXNlcmxhbmQgdG9vbHMKKyAgICAgICBodHRwOi8vd3d3LnNvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saW51eC1kZWNuZXQvICAgLSBTdGF0dXMgcGFnZQorCisyKSBDb25maWd1cmluZyB0aGUga2VybmVsCisKK0JlIHN1cmUgdG8gdHVybiBvbiB0aGUgZm9sbG93aW5nIG9wdGlvbnM6CisKKyAgICBDT05GSUdfREVDTkVUIChvYnZpb3VzbHkpCisgICAgQ09ORklHX1BST0NfRlMgKHRvIHNlZSB3aGF0J3MgZ29pbmcgb24pCisgICAgQ09ORklHX1NZU0NUTCAoZm9yIGVhc3kgY29uZmlndXJhdGlvbikKKworaWYgeW91IHdhbnQgdG8gdHJ5IG91dCByb3V0ZXIgc3VwcG9ydCAobm90IHByb3Blcmx5IGRlYnVnZ2VkIHlldCkKK3lvdSdsbCBuZWVkIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcyB3ZWxsLi4uCisKKyAgICBDT05GSUdfREVDTkVUX1JPVVRFUiAodG8gYmUgYWJsZSB0byBhZGQvZGVsZXRlIHJvdXRlcykKKyAgICBDT05GSUdfTkVURklMVEVSICh3aWxsIGJlIHJlcXVpcmVkIGZvciB0aGUgREVDbmV0IHJvdXRpbmcgZGFlbW9uKQorCisgICAgQ09ORklHX0RFQ05FVF9ST1VURV9GV01BUksgaXMgb3B0aW9uYWwKKworRG9uJ3QgdHVybiBvbiBTSU9DR0lGQ09ORiBzdXBwb3J0IGZvciBERUNuZXQgdW5sZXNzIHlvdSBhcmUgcmVhbGx5IHN1cmUKK3RoYXQgeW91IG5lZWQgaXQsIGluIGdlbmVyYWwgeW91IHdvbid0IGFuZCBpdCBjYW4gY2F1c2UgaWZjb25maWcgdG8KK21hbGZ1bmN0aW9uLgorCitSdW4gdGltZSBjb25maWd1cmF0aW9uIGhhcyBjaGFuZ2VkIHNsaWdodGx5IGZyb20gdGhlIDIuNCBzeXN0ZW0uIElmIHlvdQord2FudCB0byBjb25maWd1cmUgYW4gZW5kbm9kZSwgdGhlbiB0aGUgc2ltcGxpZmllZCBwcm9jZWR1cmUgaXMgYXMgZm9sbG93czoKKworIG8gU2V0IHRoZSBNQUMgYWRkcmVzcyBvbiB5b3VyIGV0aGVybmV0IGNhcmQgYmVmb3JlIHN0YXJ0aW5nIF9hbnlfIG90aGVyCisgICBuZXR3b3JrIHByb3RvY29scy4KKworQXMgc29vbiBhcyB5b3VyIG5ldHdvcmsgY2FyZCBpcyBicm91Z2h0IGludG8gdGhlIFVQIHN0YXRlLCBERUNuZXQgc2hvdWxkCitzdGFydCB3b3JraW5nLiBJZiB5b3UgbmVlZCBzb21ldGhpbmcgbW9yZSBjb21wbGljYXRlZCBvciBhcmUgdW5zdXJlIGhvdwordG8gc2V0IHRoZSBNQUMgYWRkcmVzcywgc2VlIHRoZSBuZXh0IHNlY3Rpb24uIEFsc28gYWxsIGNvbmZpZ3VyYXRpb25zIHdoaWNoCit3b3JrZWQgd2l0aCAyLjQgd2lsbCB3b3JrIHVuZGVyIDIuNSB3aXRoIG5vIGNoYW5nZS4KKworMykgQ29tbWFuZCBsaW5lIG9wdGlvbnMKKworWW91IGNhbiBzZXQgYSBERUNuZXQgYWRkcmVzcyBvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZSBmb3IgY29tcGF0aWJpbGl0eQord2l0aCB0aGUgMi40IGNvbmZpZ3VyYXRpb24gcHJvY2VkdXJlLCBidXQgaW4gZ2VuZXJhbCBpdCdzIG5vdCBuZWVkZWQgYW55IG1vcmUuCitJZiB5b3UgZG8gc3QgYSBERUNuZXQgYWRkcmVzcyBvbiB0aGUgY29tbWFuZCBsaW5lLCBpdCBoYXMgb25seSBvbmUgcHVycG9zZQord2hpY2ggaXMgdGhhdCBpdHMgYWRkZWQgdG8gdGhlIGFkZHJlc3NlcyBvbiB0aGUgbG9vcGJhY2sgZGV2aWNlLgorCitXaXRoIDIuNCBrZXJuZWxzLCBERUNuZXQgd291bGQgb25seSByZWNvZ25pc2UgYWRkcmVzc2VzIGFzIGxvY2FsIGlmIHRoZXkKK3dlcmUgYWRkZWQgdG8gdGhlIGxvb3BiYWNrIGRldmljZS4gSW4gMi41LCBhbnkgbG9jYWwgaW50ZXJmYWNlIGFkZHJlc3MKK2NhbiBiZSB1c2VkIHRvIGxvb3AgYmFjayB0byB0aGUgbG9jYWwgbWFjaGluZS4gT2YgY291cnNlIHRoaXMgZG9lcyBub3QKK3ByZXZlbnQgeW91IGFkZGluZyBmdXJ0aGVyIGFkZHJlc3NlcyB0byB0aGUgbG9vcGJhY2sgZGV2aWNlIGlmIHlvdQord2FudCB0by4KKworTi5CLiBTaW5jZSB0aGUgYWRkcmVzcyBsaXN0IG9mIGFuIGludGVyZmFjZSBkZXRlcm1pbmVzIHRoZSBhZGRyZXNzZXMgZm9yCit3aGljaCAiaGVsbG8iIG1lc3NhZ2VzIGFyZSBzZW50LCBpZiB5b3UgZG9uJ3Qgc2V0IGFuIGFkZHJlc3Mgb24gdGhlIGxvb3BiYWNrCitpbnRlcmZhY2UgdGhlbiB5b3Ugd29uJ3Qgc2VlIGFueSBlbnRyaWVzIGluIC9wcm9jL25ldC9uZWlnaCBmb3IgdGhlIGxvY2FsCitob3N0IHVudGlsIHN1Y2ggdGltZSBhcyB5b3Ugc3RhcnQgYSBjb25uZWN0aW9uLiBUaGlzIGRvZXNuJ3QgYWZmZWN0IHRoZQorb3BlcmF0aW9uIG9mIHRoZSBsb2NhbCBjb21tdW5pY2F0aW9ucyBpbiBhbnkgb3RoZXIgd2F5IHRob3VnaC4KKworVGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgdGFrZXMgb3B0aW9ucyBsb29raW5nIGxpa2UgdGhlIGZvbGxvd2luZzoKKworICAgIGRlY25ldD0xLDIKKwordGhlIHR3byBudW1iZXJzIGFyZSB0aGUgbm9kZSBhZGRyZXNzIDEsMiA9IDEuMiBGb3IgMi4yLnh4IGtlcm5lbHMKK2FuZCBlYXJseSAyLjMueHgga2VybmVscywgeW91IG11c3QgdXNlIGEgY29tbWEgd2hlbiBzcGVjaWZ5aW5nIHRoZQorREVDbmV0IGFkZHJlc3MgbGlrZSB0aGlzLiBGb3IgbW9yZSByZWNlbnQgMi4zLnh4IGtlcm5lbHMsIHlvdSBtYXkKK3VzZSBhbG1vc3QgYW55IGNoYXJhY3RlciBleGNlcHQgc3BhY2UsIGFsdGhvdWdoIGEgYC5gIHdvdWxkIGJlIHRoZSBtb3N0CitvYnZpb3VzIGNob2ljZSA6LSkKKworVGhlcmUgdXNlZCB0byBiZSBhIHRoaXJkIG51bWJlciBzcGVjaWZ5aW5nIHRoZSBub2RlIHR5cGUuIFRoaXMgb3B0aW9uCitoYXMgZ29uZSBhd2F5IGluIGZhdm91ciBvZiBhIHBlciBpbnRlcmZhY2Ugbm9kZSB0eXBlLiBUaGlzIGlzIG5vdyBzZXQKK3VzaW5nIC9wcm9jL3N5cy9uZXQvZGVjbmV0L2NvbmYvPGRldj4vZm9yd2FyZGluZy4gVGhpcyBmaWxlIGNhbiBiZQorc2V0IHdpdGggYSBzaW5nbGUgZGlnaXQsIDA9RW5kTm9kZSwgMT1MMSBSb3V0ZXIgYW5kICAyPUwyIFJvdXRlci4KKworVGhlcmUgYXJlIGFsc28gZXF1aXZhbGVudCBvcHRpb25zIGZvciBtb2R1bGVzLiBUaGUgbm9kZSBhZGRyZXNzIGNhbgorYWxzbyBiZSBzZXQgdGhyb3VnaCB0aGUgL3Byb2Mvc3lzL25ldC9kZWNuZXQvIGZpbGVzLCBhcyBjYW4gb3RoZXIgc3lzdGVtCitwYXJhbWV0ZXJzLgorCitDdXJyZW50bHkgdGhlIG9ubHkgc3VwcG9ydGVkIGRldmljZXMgYXJlIGV0aGVybmV0IGFuZCBpcF9ncmUuIFRoZQorZXRoZXJuZXQgYWRkcmVzcyBvZiB5b3VyIGV0aGVybmV0IGNhcmQgaGFzIHRvIGJlIHNldCBhY2NvcmRpbmcgdG8gdGhlIERFQ25ldAorYWRkcmVzcyBvZiB0aGUgbm9kZSBpbiBvcmRlciBmb3IgaXQgdG8gYmUgYXV0b2NvbmZpZ3VyZWQgKGFuZCB0aGVuIGFwcGVhciBpbgorL3Byb2MvbmV0L2RlY25ldF9kZXYpLiBUaGVyZSBpcyBhIHV0aWxpdHkgYXZhaWxhYmxlIGF0IHRoZSBhYm92ZQorRlRQIHNpdGVzIGNhbGxlZCBkbjJldGhhZGRyIHdoaWNoIGNhbiBjb21wdXRlIHRoZSBjb3JyZWN0IGV0aGVybmV0CithZGRyZXNzIHRvIHVzZS4gVGhlIGFkZHJlc3MgY2FuIGJlIHNldCBieSBpZmNvbmZpZyBlaXRoZXIgYmVmb3JlIGF0CithdCB0aGUgdGltZSB0aGUgZGV2aWNlIGlzIGJyb3VnaHQgdXAuIElmIHlvdSBhcmUgdXNpbmcgUmVkSGF0IHlvdSBjYW4KK2FkZCB0aGUgbGluZToKKworICAgIE1BQ0FERFI9QUE6MDA6MDQ6MDA6MDM6MDQKKworb3Igc29tZXRoaW5nIHNpbWlsYXIsIHRvIC9ldGMvc3lzY29uZmlnL25ldHdvcmstc2NyaXB0cy9pZmNmZy1ldGgwIG9yCit3aGVyZXZlciB5b3VyIG5ldHdvcmsgY2FyZCdzIGNvbmZpZ3VyYXRpb24gbGl2ZXMuIFNldHRpbmcgdGhlIE1BQyBhZGRyZXNzCitvZiB5b3VyIGV0aGVybmV0IGNhcmQgdG8gYW4gYWRkcmVzcyBzdGFydGluZyB3aXRoICJoaS1vcmQiIHdpbGwgY2F1c2UgYQorREVDbmV0IGFkZHJlc3Mgd2hpY2ggbWF0Y2hlcyB0byBiZSBhZGRlZCB0byB0aGUgaW50ZXJmYWNlICh3aGljaCB5b3UgY2FuCit2ZXJpZnkgd2l0aCBpcHJvdXRlMikuCisKK1RoZSBkZWZhdWx0IGRldmljZSBmb3Igcm91dGluZyBjYW4gYmUgc2V0IHRocm91Z2ggdGhlIC9wcm9jIGZpbGVzeXN0ZW0KK2J5IHNldHRpbmcgL3Byb2Mvc3lzL25ldC9kZWNuZXQvZGVmYXVsdF9kZXZpY2UgdG8gdGhlCitkZXZpY2UgeW91IHdhbnQgREVDbmV0IHRvIHJvdXRlIHBhY2tldHMgb3V0IG9mIHdoZW4gbm8gc3BlY2lmaWMgcm91dGUKK2lzIGF2YWlsYWJsZS4gVXN1YWxseSB0aGlzIHdpbGwgYmUgZXRoMCwgZm9yIGV4YW1wbGU6CisKKyAgICBlY2hvIC1uICJldGgwIiA+L3Byb2Mvc3lzL25ldC9kZWNuZXQvZGVmYXVsdF9kZXZpY2UKKworSWYgeW91IGRvbid0IHNldCB0aGUgZGVmYXVsdCBkZXZpY2UsIHRoZW4gaXQgd2lsbCBkZWZhdWx0IHRvIHRoZSBmaXJzdAorZXRoZXJuZXQgY2FyZCB3aGljaCBoYXMgYmVlbiBhdXRvY29uZmlndXJlZCBhcyBkZXNjcmliZWQgYWJvdmUuIFlvdSBjYW4KK2NvbmZpcm0gdGhhdCBieSBsb29raW5nIGluIHRoZSBkZWZhdWx0X2RldmljZSBmaWxlIG9mIGNvdXJzZS4KKworVGhlcmUgaXMgYSBsaXN0IG9mIHdoYXQgdGhlIG90aGVyIGZpbGVzIHVuZGVyIC9wcm9jL3N5cy9uZXQvZGVjbmV0LyBkbworb24gdGhlIGtlcm5lbCBwYXRjaCB3ZWIgc2l0ZSAoc2hvd24gYWJvdmUpLgorCis0KSBSdW4gdGltZSBrZXJuZWwgY29uZmlndXJhdGlvbgorCitUaGlzIGlzIGVpdGhlciBkb25lIHRocm91Z2ggdGhlIHN5c2N0bC9wcm9jIGludGVyZmFjZSAoc2VlIHRoZSBrZXJuZWwgd2ViCitwYWdlcyBmb3IgZGV0YWlscyBvbiB3aGF0IHRoZSB2YXJpb3VzIG9wdGlvbnMgZG8pIG9yIHRocm91Z2ggdGhlIGlwcm91dGUyCitwYWNrYWdlIGluIHRoZSBzYW1lIHdheSBhcyBJUHY0LzYgY29uZmlndXJhdGlvbiBpcyBwZXJmb3JtZWQuCisKK0RvY3VtZW50YXRpb24gZm9yIGlwcm91dGUyIGlzIGluY2x1ZGVkIHdpdGggdGhlIHBhY2thZ2UsIGFsdGhvdWdoIHRoZXJlIGlzCithcyB5ZXQgbm8gc3BlY2lmaWMgc2VjdGlvbiBvbiBERUNuZXQsIG1vc3Qgb2YgdGhlIGZlYXR1cmVzIGFwcGx5IHRvIGJvdGgKK0lQIGFuZCBERUNuZXQsIGFsYmVpdCB3aXRoIERFQ25ldCBhZGRyZXNzZXMgaW5zdGVhZCBvZiBJUCBhZGRyZXNzZXMgYW5kCithIHJlZHVjZWQgZnVuY3Rpb25hbGl0eS4KKworSWYgeW91IHdhbnQgdG8gY29uZmlndXJlIGEgREVDbmV0IHJvdXRlciB5b3UnbGwgbmVlZCB0aGUgaXByb3V0ZTIgcGFja2FnZQorc2luY2UgaXRzIHRoZSBfb25seV8gd2F5IHRvIGFkZCBhbmQgZGVsZXRlIHJvdXRlcyBjdXJyZW50bHkuIEV2ZW50dWFsbHkKK3RoZXJlIHdpbGwgYmUgYSByb3V0aW5nIGRhZW1vbiB0byBzZW5kIGFuZCByZWNlaXZlIHJvdXRpbmcgbWVzc2FnZXMgZm9yCitlYWNoIGludGVyZmFjZSBhbmQgdXBkYXRlIHRoZSBrZXJuZWwgcm91dGluZyB0YWJsZXMgYWNjb3JkaW5nbHkuIFRoZQorcm91dGluZyBkYWVtb24gd2lsbCB1c2UgbmV0ZmlsdGVyIHRvIGxpc3RlbiB0byByb3V0aW5nIHBhY2tldHMsIGFuZAorcnRuZXRsaW5rIHRvIHVwZGF0ZSB0aGUga2VybmVscyByb3V0aW5nIHRhYmxlcy4gCisKK1RoZSBERUNuZXQgcmF3IHNvY2tldCBsYXllciBoYXMgYmVlbiByZW1vdmVkIHNpbmNlIGl0IHdhcyB0aGVyZSBwdXJlbHkKK2ZvciB1c2UgYnkgdGhlIHJvdXRpbmcgZGFlbW9uIHdoaWNoIHdpbGwgbm93IHVzZSBuZXRmaWx0ZXIgKGEgbXVjaCBjbGVhbmVyCithbmQgbW9yZSBnZW5lcmljIHNvbHV0aW9uKSBpbnN0ZWFkLgorCis1KSBIb3cgY2FuIEkgdGVsbCBpZiBpdHMgd29ya2luZyA/CisKK0hlcmUgaXMgYSBxdWljayBndWlkZSBvZiB3aGF0IHRvIGxvb2sgZm9yIGluIG9yZGVyIHRvIGtub3cgaWYgeW91ciBERUNuZXQKK2tlcm5lbCBzdWJzeXN0ZW0gaXMgd29ya2luZy4KKworICAgLSBJcyB0aGUgbm9kZSBhZGRyZXNzIHNldCAoc2VlIC9wcm9jL3N5cy9uZXQvZGVjbmV0L25vZGVfYWRkcmVzcykKKyAgIC0gSXMgdGhlIG5vZGUgb2YgdGhlIGNvcnJlY3QgdHlwZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSAvcHJvYy9zeXMvbmV0L2RlY25ldC9jb25mLzxkZXY+L2ZvcndhcmRpbmcpCisgICAtIElzIHRoZSBFdGhlcm5ldCBNQUMgYWRkcmVzcyBvZiBlYWNoIEV0aGVybmV0IGNhcmQgc2V0IHRvIG1hdGNoCisgICAgIHRoZSBERUNuZXQgYWRkcmVzcy4gSWYgaW4gZG91YnQgdXNlIHRoZSBkbjJldGhhZGRyIHV0aWxpdHkgYXZhaWxhYmxlCisgICAgIGF0IHRoZSBmdHAgYXJjaGl2ZS4KKyAgIC0gSWYgdGhlIHByZXZpb3VzIHR3byBzdGVwcyBhcmUgc2F0aXNmaWVkLCBhbmQgdGhlIEV0aGVybmV0IGNhcmQgaXMgdXAsCisgICAgIHlvdSBzaG91bGQgZmluZCB0aGF0IGl0IGlzIGxpc3RlZCBpbiAvcHJvYy9uZXQvZGVjbmV0X2RldiBhbmQgYWxzbworICAgICB0aGF0IGl0IGFwcGVhcnMgYXMgYSBkaXJlY3RvcnkgaW4gL3Byb2Mvc3lzL25ldC9kZWNuZXQvY29uZi8uIFRoZQorICAgICBsb29wYmFjayBkZXZpY2UgKGxvKSBzaG91bGQgYWxzbyBhcHBlYXIgYW5kIGlzIHJlcXVpcmVkIHRvIGNvbW11bmljYXRlCisgICAgIHdpdGhpbiBhIG5vZGUuCisgICAtIElmIHlvdSBoYXZlIGFueSBERUNuZXQgcm91dGVycyBvbiB5b3VyIG5ldHdvcmssIHRoZXkgc2hvdWxkIGFwcGVhcgorICAgICBpbiAvcHJvYy9uZXQvZGVjbmV0X25laWdoLCBvdGhlcndpc2UgdGhpcyBmaWxlIHdpbGwgb25seSBjb250YWluIHRoZQorICAgICBlbnRyeSBmb3IgdGhlIG5vZGUgaXRzZWxmIChpZiBpdCBkb2Vzbid0IGNoZWNrIHRvIHNlZSBpZiBsbyBpcyB1cCkuCisgICAtIElmIHlvdSB3YW50IHRvIHNlbmQgdG8gYW55IG5vZGUgd2hpY2ggaXMgbm90IGxpc3RlZCBpbiB0aGUKKyAgICAgL3Byb2MvbmV0L2RlY25ldF9uZWlnaCBmaWxlLCB5b3UnbGwgbmVlZCB0byBzZXQgdGhlIGRlZmF1bHQgZGV2aWNlCisgICAgIHRvIHBvaW50IHRvIGFuIEV0aGVybmV0IGNhcmQgd2l0aCBjb25uZWN0aW9uIHRvIGEgcm91dGVyLiBUaGlzIGlzCisgICAgIGFnYWluIGRvbmUgd2l0aCB0aGUgL3Byb2Mvc3lzL25ldC9kZWNuZXQvZGVmYXVsdF9kZXZpY2UgZmlsZS4KKyAgIC0gVHJ5IHN0YXJ0aW5nIGEgc2ltcGxlIHNlcnZlciBhbmQgY2xpZW50LCBsaWtlIHRoZSBkbnBpbmcvZG5taXJyb3IKKyAgICAgb3ZlciB0aGUgbG9vcGJhY2sgaW50ZXJmYWNlLiBXaXRoIGx1Y2sgdGhleSBzaG91bGQgY29tbXVuaWNhdGUuCisgICAgIEZvciB0aGlzIHN0ZXAgYW5kIHRob3NlIGFmdGVyLCB5b3UnbGwgbmVlZCB0aGUgREVDbmV0IGxpYnJhcnkKKyAgICAgd2hpY2ggY2FuIGJlIG9idGFpbmVkIGZyb20gdGhlIGFib3ZlIGZ0cCBzaXRlcyBhcyB3ZWxsIGFzIHRoZQorICAgICBhY3R1YWwgdXRpbGl0aWVzIHRoZW1zZWx2ZXMuCisgICAtIElmIHRoaXMgc2VlbXMgdG8gd29yaywgdGhlbiB0cnkgdGFsa2luZyB0byBhIG5vZGUgb24geW91ciBsb2NhbAorICAgICBuZXR3b3JrLCBhbmQgc2VlIGlmIHlvdSBjYW4gb2J0YWluIHRoZSBzYW1lIHJlc3VsdHMuCisgICAtIEF0IHRoaXMgcG9pbnQgeW91IGFyZSBvbiB5b3VyIG93bi4uLiA6LSkKKworNikgSG93IHRvIHNlbmQgYSBidWcgcmVwb3J0CisKK0lmIHlvdSd2ZSBmb3VuZCBhIGJ1ZyBhbmQgd2FudCB0byByZXBvcnQgaXQsIHRoZW4gdGhlcmUgYXJlIHNldmVyYWwgdGhpbmdzCit5b3UgY2FuIGRvIHRvIGhlbHAgbWUgd29yayBvdXQgZXhhY3RseSB3aGF0IGl0IGlzIHRoYXQgaXMgd3JvbmcuIFVzZWZ1bAoraW5mb3JtYXRpb24gKF9tb3N0XyBvZiB3aGljaCBfaXNfIF9lc3NlbnRpYWxfKSBpbmNsdWRlczoKKworIC0gV2hhdCBrZXJuZWwgdmVyc2lvbiBhcmUgeW91IHJ1bm5pbmcgPworIC0gV2hhdCB2ZXJzaW9uIG9mIHRoZSBwYXRjaCBhcmUgeW91IHJ1bm5pbmcgPworIC0gSG93IGZhciB0aG91Z2ggdGhlIGFib3ZlIHNldCBvZiB0ZXN0cyBjYW4geW91IGdldCA/CisgLSBXaGF0IGlzIGluIHRoZSAvcHJvYy9kZWNuZXQqIGZpbGVzIGFuZCAvcHJvYy9zeXMvbmV0L2RlY25ldC8qIGZpbGVzID8KKyAtIFdoaWNoIHNlcnZpY2VzIGFyZSB5b3UgcnVubmluZyA/CisgLSBXaGljaCBjbGllbnQgY2F1c2VkIHRoZSBwcm9ibGVtID8KKyAtIEhvdyBtdWNoIGRhdGEgd2FzIGJlaW5nIHRyYW5zZmVycmVkID8KKyAtIFdhcyB0aGUgbmV0d29yayBjb25nZXN0ZWQgPworIC0gSWYgdGhlcmUgd2FzIGEga2VybmVsIHBhbmljLCBwbGVhc2UgcnVuIHRoZSBvdXRwdXQgdGhyb3VnaCBrc3ltb29wcworICAgYmVmb3JlIHNlbmRpbmcgaXQgdG8gbWUsIG90aGVyd2lzZSBpdHMgX3VzZWxlc3NfLgorIC0gSG93IGNhbiB0aGUgcHJvYmxlbSBiZSByZXByb2R1Y2VkID8KKyAtIENhbiB5b3UgdXNlIHRjcGR1bXAgdG8gZ2V0IGEgdHJhY2UgPyAoTi5CLiBNb3N0IChhbGw/KSB2ZXJzaW9ucyBvZiAKKyAgIHRjcGR1bXAgZG9uJ3QgdW5kZXJzdGFuZCBob3cgdG8gZHVtcCBERUNuZXQgcHJvcGVybHksIHNvIGluY2x1ZGluZworICAgdGhlIGhleCBsaXN0aW5nIG9mIHRoZSBwYWNrZXQgY29udGVudHMgaXMgX2Vzc2VudGlhbF8sIHVzdWFsbHkgdGhlIC14IGZsYWcuCisgICBZb3UgbWF5IGFsc28gbmVlZCB0byBpbmNyZWFzZSB0aGUgbGVuZ3RoIGdyYWJiZWQgd2l0aCB0aGUgLXMgZmxhZy4gVGhlCisgICAtZSBmbGFnIGFsc28gcHJvdmlkZXMgdmVyeSB1c2VmdWwgaW5mb3JtYXRpb24gKGV0aGVybmV0IE1BQyBhZGRyZXNzZXMpKQorCis3KSBNQUMgRkFRCisKK0EgcXVpY2sgRkFRIG9uIGV0aGVybmV0IE1BQyBhZGRyZXNzZXMgdG8gZXhwbGFpbiBob3cgTGludXggYW5kIERFQ25ldAoraW50ZXJhY3QgYW5kIGhvdyB0byBnZXQgdGhlIGJlc3QgcGVyZm9ybWFuY2UgZnJvbSB5b3VyIGhhcmR3YXJlLiAKKworRXRoZXJuZXQgY2FyZHMgYXJlIGRlc2lnbmVkIHRvIG5vcm1hbGx5IG9ubHkgcGFzcyByZWNlaXZlZCBuZXR3b3JrIGZyYW1lcyAKK3RvIGEgaG9zdCBjb21wdXRlciB3aGVuIHRoZXkgYXJlIGFkZHJlc3NlZCB0byBpdCwgb3IgdG8gdGhlIGJyb2FkY2FzdCBhZGRyZXNzLgorCitMaW51eCBoYXMgYW4gaW50ZXJmYWNlIHdoaWNoIGFsbG93cyB0aGUgc2V0dGluZyBvZiBleHRyYSBhZGRyZXNzZXMgZm9yCithbiBldGhlcm5ldCBjYXJkIHRvIGxpc3RlbiB0by4gSWYgdGhlIGV0aGVybmV0IGNhcmQgc3VwcG9ydHMgaXQsIHRoZQorZmlsdGVyaW5nIG9wZXJhdGlvbiB3aWxsIGJlIGRvbmUgaW4gaGFyZHdhcmUsIGlmIG5vdCB0aGUgZXh0cmEgdW53YW50ZWQgcGFja2V0cworcmVjZWl2ZWQgd2lsbCBiZSBkaXNjYXJkZWQgYnkgdGhlIGhvc3QgY29tcHV0ZXIuIEluIHRoZSBsYXR0ZXIgY2FzZSwKK3NpZ25pZmljYW50IHByb2Nlc3NvciB0aW1lIGFuZCBidXMgYmFuZHdpZHRoIGNhbiBiZSB1c2VkIHVwIG9uIGEgYnVzeQorbmV0d29yayAoc2VlIHRoZSBOQVBJIGRvY3VtZW50YXRpb24gZm9yIGEgbG9uZ2VyIGV4cGxhbmF0aW9uIG9mIHRoZXNlCitlZmZlY3RzKS4KKworREVDbmV0IG1ha2VzIHVzZSBvZiB0aGlzIGludGVyZmFjZSB0byBhbGxvdyBydW5uaW5nIERFQ25ldCBvbiBhbiBldGhlcm5ldCAKK2NhcmQgd2hpY2ggaGFzIGFscmVhZHkgYmVlbiBjb25maWd1cmVkIHVzaW5nIFRDUC9JUCAocHJlc3VtYWJseSB1c2luZyB0aGUgCitidWlsdCBpbiBNQUMgYWRkcmVzcyBvZiB0aGUgY2FyZCwgYXMgdXN1YWwpIGFuZC9vciB0byBhbGxvdyBtdWx0aXBsZSBERUNuZXQKK2FkZHJlc3NlcyBvbiBlYWNoIHBoeXNpY2FsIGludGVyZmFjZS4gSWYgeW91IGRvIHRoaXMsIGJlIGF3YXJlIHRoYXQgaWYgeW91cgorZXRoZXJuZXQgY2FyZCBkb2Vzbid0IHN1cHBvcnQgcGVyZmVjdCBoYXNoaW5nIGluIGl0cyBNQUMgYWRkcmVzcyBmaWx0ZXIKK3RoZW4geW91ciBjb21wdXRlciB3aWxsIGJlIGRvaW5nIG1vcmUgd29yayB0aGFuIHJlcXVpcmVkLiBTb21lIGNhcmRzCit3aWxsIHNpbXBseSBzZXQgdGhlbXNlbHZlcyBpbnRvIHByb21pc2N1b3VzIG1vZGUgaW4gb3JkZXIgdG8gcmVjZWl2ZQorcGFja2V0cyBmcm9tIHRoZSBERUNuZXQgc3BlY2lmaWVkIGFkZHJlc3Nlcy4gU28gaWYgeW91IGhhdmUgb25lIG9mIHRoZXNlCitjYXJkcyBpdHMgYmV0dGVyIHRvIHNldCB0aGUgTUFDIGFkZHJlc3Mgb2YgdGhlIGNhcmQgYXMgZGVzY3JpYmVkIGFib3ZlCit0byBnYWluIHRoZSBiZXN0IGVmZmljaWVuY3kuIEJldHRlciBzdGlsbCBpcyB0byB1c2UgYSBjYXJkIHdoaWNoIHN1cHBvcnRzCitOQVBJIGFzIHdlbGwuCisKKworOCkgTWFpbGluZyBsaXN0CisKK0lmIHlvdSBhcmUga2VlbiB0byBnZXQgaW52b2x2ZWQgaW4gZGV2ZWxvcG1lbnQsIG9yIHdhbnQgdG8gYXNrIHF1ZXN0aW9ucworYWJvdXQgY29uZmlndXJhdGlvbiwgb3IgZXZlbiBqdXN0IHJlcG9ydCBidWdzLCB0aGVuIHRoZXJlIGlzIGEgbWFpbGluZworbGlzdCB0aGF0IHlvdSBjYW4gam9pbiwgZGV0YWlscyBhcmUgYXQ6CisKK2h0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvbWFpbC8/Z3JvdXBfaWQ9NDk5MworCis5KSBMZWdhbCBJbmZvCisKK1RoZSBMaW51eCBERUNuZXQgcHJvamVjdCB0ZWFtIGhhdmUgcGxhY2VkIHRoZWlyIGNvZGUgdW5kZXIgdGhlIEdQTC4gVGhlCitzb2Z0d2FyZSBpcyBwcm92aWRlZCAiYXMgaXMiIGFuZCB3aXRob3V0IHdhcnJhbnR5IGV4cHJlc3Mgb3IgaW1wbGllZC4KK0RFQ25ldCBpcyBhIHRyYWRlbWFyayBvZiBDb21wYXEuIFRoaXMgc29mdHdhcmUgaXMgbm90IGEgcHJvZHVjdCBvZgorQ29tcGFxLiBXZSBhY2tub3dsZWRnZSB0aGUgaGVscCBvZiBwZW9wbGUgYXQgQ29tcGFxIGluIHByb3ZpZGluZyBleHRyYQorZG9jdW1lbnRhdGlvbiBhYm92ZSBhbmQgYmV5b25kIHdoYXQgd2FzIHByZXZpb3VzbHkgcHVibGljbHkgYXZhaWxhYmxlLgorCitTdGV2ZSBXaGl0ZWhvdXNlIDxTdGV2ZVdAQUNNLm9yZz4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RlcGNhLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXBjYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRjNmIyNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXBjYS50eHQKQEAgLTAsMCArMSw5MiBAQAorCitERTEweAorPT09PT0KKworTWVtb3J5IEFkZHJlc3NlczoKKworCVNXMQlTVzIJU1czCVNXNAorNjRLCW9uCW9uCW9uCW9uCWQwMDAwCWRiZmZmCisJb2ZmCW9uCW9uCW9uCWMwMDAwCWNiZmZmCisJb2ZmCW9mZglvbglvbgllMDAwMAllYmZmZgorCiszMksJb24Jb24Jb2ZmCW9uCWQ4MDAwCWRiZmZmCisJb2ZmCW9uCW9mZglvbgljODAwMAljYmZmZgorCW9mZglvZmYJb2ZmCW9uCWU4MDAwCWViZmZmCisKK0RCUiBST00Jb24Jb24JCQlkYzAwMAlkZmZmZgorCW9mZglvbgkJCWNjMDAwCWNmZmZmCisJb2ZmCW9mZgkJCWVjMDAwCWVmZmZmCisKK05vdGUgIHRoYXQgdGhlIDJLICBtb2RlICAgaXMgc2V0ICBieSAgIFNXMy9TVzQgIG9uL29mZiBvciAgb2ZmL29mZi4gIEFkZHJlc3MKK2Fzc2lnbm1lbnQgaXMgdGhyb3VnaCB0aGUgUkJTQSByZWdpc3Rlci4KKworSS9PIEFkZHJlc3M6CisJU1c1CisweDMwMAlvbgorMHgyMDAJb2ZmCisKK1JlbW90ZSBCb290OgorCVNXNgorRGlzYWJsZQlvbgorRW5hYmxlCW9mZgorCitSZW1vdGUgQm9vdCBUaW1lb3V0OgorCVNXNworMi41bWluCW9uCiszMHMJb2ZmCisKK0lSUToKKwlTVzgJU1c5CVNXMTAJU1cxMQlTVzEyCisyCW9uCW9mZglvZmYJb2ZmCW9mZgorMwlvZmYJb24Jb2ZmCW9mZglvZmYKKzQJb2ZmCW9mZglvbglvZmYJb2ZmCis1CW9mZglvZmYJb2ZmCW9uCW9mZgorNwlvZmYJb2ZmCW9mZglvZmYJb24KKworREUyMHgKKz09PT09CisKK01lbW9yeSBTaXplOgorCisJU1czCVNXNAorNjRLCW9uCW9uCiszMksJb2ZmCW9uCisySwlvbiAJb2ZmCisySwlvZmYJb2ZmCisKK1N0YXJ0IEFkZHJlc3NlczoKKworCVNXMQlTVzIJU1czCVNXNAorNjRLCW9uCW9uCW9uCW9uCWMwMDAwCWNmZmZmCisJb24Jb2ZmCW9uCW9uCWQwMDAwCWRmZmZmCisJb2ZmCW9uCW9uCW9uCWUwMDAwCWVmZmZmCisKKzMySwlvbglvbglvZmYJb2ZmCWM4MDAwCWNmZmZmCisJb24Jb2ZmCW9mZglvZmYJZDgwMDAJZGZmZmYKKwlvZmYJb24Jb2ZmCW9mZgllODAwMAllZmZmZgorCitJbGxlZ2FsCW9mZglvZmYJIC0JIC0JICAtCSAgLQorCitJL08gQWRkcmVzczoKKwlTVzUKKzB4MzAwCW9uCisweDIwMAlvZmYKKworUmVtb3RlIEJvb3Q6CisJU1c2CitEaXNhYmxlCW9uCitFbmFibGUJb2ZmCisKK1JlbW90ZSBCb290IFRpbWVvdXQ6CisJU1c3CisyLjVtaW4Jb24KKzMwcwlvZmYKKworSVJROgorCVNXOAlTVzkJU1cxMAlTVzExCVNXMTIKKzUJb24Jb2ZmCW9mZglvZmYJb2ZmCis5CW9mZglvbglvZmYJb2ZmCW9mZgorMTAJb2ZmCW9mZglvbglvZmYJb2ZmCisxMQlvZmYJb2ZmCW9mZglvbglvZmYKKzE1CW9mZglvZmYJb2ZmCW9mZglvbgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGdycy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGdycy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFhMWJiM2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGdycy50eHQKQEAgLTAsMCArMSw1MiBAQAorICAgIFRoZSBEaWdpIEludGVybmF0aW9uYWwgUmlnaHRTd2l0Y2ggU0UtWCAoZGdycykgRGV2aWNlIERyaXZlcgorCitUaGlzIGlzIGEgTGludXggZHJpdmVyIGZvciB0aGUgRGlnaSBJbnRlcm5hdGlvbmFsIFJpZ2h0U3dpdGNoIFNFLVgKK0VJU0EgYW5kIFBDSSBib2FyZHMuICBUaGVzZSBhcmUgNCAoRUlTQSkgb3IgNiAoUENJKSBwb3J0IEV0aGVybmV0Citzd2l0Y2hlcyBhbmQgYSBOSUMgY29tYmluZWQgaW50byBhIHNpbmdsZSBib2FyZC4gIFRoaXMgZHJpdmVyIGNhbgorYmUgY29tcGlsZWQgaW50byB0aGUga2VybmVsIHN0YXRpY2FsbHkgb3IgYXMgYSBsb2FkYWJsZSBtb2R1bGUuCisKK1RoZXJlIGlzIGFsc28gYSBjb21wYW5pb24gbWFuYWdlbWVudCB0b29sLCBjYWxsZWQgInhyaWdodHN3aXRjaCIuCitUaGUgbWFuYWdlbWVudCB0b29sIGxldHMgeW91IHdhdGNoIHRoZSBwZXJmb3JtYW5jZSBncmFwaGljYWxseSwKK2FzIHdlbGwgYXMgc2V0IHRoZSBTTk1QIGFnZW50IElQIGFuZCBJUFggYWRkcmVzc2VzLCBJRUVFIFNwYW5uaW5nCitUcmVlLCBhbmQgQWdpbmcgdGltZS4gIFRoZXNlIGNhbiBhbHNvIGJlIHNldCBmcm9tIHRoZSBjb21tYW5kIGxpbmUKK3doZW4gdGhlIGRyaXZlciBpcyBsb2FkZWQuICBUaGUgZHJpdmVyIGNvbW1hbmQgbGluZSBvcHRpb25zIGFyZToKKworCWRlYnVnPU5OTgkJRGVidWcgcHJpbnRpbmcgbGV2ZWwKKwlkbWE9MC8xCQkJRGlzYWJsZS9FbmFibGUgRE1BIG9uIFBDSSBjYXJkCisJc3BhbnRyZWU9MC8xCQlEaXNhYmxlL0VuYWJsZSBJRUVFIHNwYW5uaW5nIHRyZWUKKwloYXNoZXhwaXJlPU5OTgkJQ2hhbmdlIGFkZHJlc3MgYWdpbmcgdGltZSAoZGVmYXVsdCAzMDAgc2Vjb25kcykKKwlpcGFkZHI9QSxCLEMsRAkJU2V0IFNOTVAgYWdlbnQgSVAgYWRkcmVzcyBpLmUuIDE5OSw4Niw4LDIyMQorCWlwdHJhcD1BLEIsQyxECQlTZXQgU05NUCBhZ2VudCBJUCB0cmFwIGFkZHJlc3MgaS5lLiAxOTksODYsOCwyMjEKKwlpcHhuZXQ9Tk5OCQlTZXQgU05NUCBhZ2VudCBJUFggbmV0d29yayBudW1iZXIKKwluaWNtb2RlPTAvMQkJRGlzYWJsZS9FbmFibGUgbXVsdGlwbGUgTklDIG1vZGUKKworVGhlcmUgaXMgYWxzbyBhIHRvb2wgZm9yIHNldHRpbmcgdXAgaW5wdXQgYW5kIG91dHB1dCBwYWNrZXQgZmlsdGVycworb24gZWFjaCBwb3J0LCBjYWxsZWQgImRncnNmaWx0Ii4KKworQm90aCB0aGUgbWFuYWdlbWVudCB0b29sIGFuZCB0aGUgZmlsdGVyaW5nIHRvb2wgYXJlIGF2YWlsYWJsZQorc2VwYXJhdGVseSBmcm9tIHRoZSBmb2xsb3dpbmcgRlRQIHNpdGU6CisKKwlmdHA6Ly9mdHAuZGdpaS5jb20vZHJpdmVycy9yaWdodHN3aXRjaC9saW51eC8KKworV2hlbiBuaWNtb2RlPTEsIHRoZSBib2FyZCBhbmQgZHJpdmVyIG9wZXJhdGUgYXMgNCBvciA2IGluZGl2aWR1YWwKK05JQyBwb3J0cyAoZXRoMC4uLmV0aDUpIGluc3RlYWQgb2YgYXMgYSBzd2l0Y2guICBBbGwgc3dpdGNoaW5nCitmdW5jdGlvbnMgYXJlIGRpc2FibGVkLiAgSW4gdGhlIGZ1dHVyZSwgdGhlIGJvYXJkIGZpcm13YXJlIG1heSBpbmNsdWRlCithIHJvdXRpbmcgY2FjaGUgd2hlbiBpbiB0aGlzIG1vZGUuCisKK0NvcHlyaWdodCAxOTk1LTE5OTYgRGlnaSBJbnRlcm5hdGlvbmFsIEluYy4KKworVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcworb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKworRm9yIGluZm9ybWF0aW9uIG9uIHB1cmNoYXNpbmcgYSBSaWdodFN3aXRjaCBTRS00IG9yIFNFLTYKK2JvYXJkLCBwbGVhc2UgY29udGFjdCBEaWdpJ3Mgc2FsZXMgZGVwYXJ0bWVudCBhdCAxLTYxMi05MTItMzQ0NAorb3IgMS04MDAtRElHSUJSRC4gIE91dHNpZGUgdGhlIFUuUy4sIHBsZWFzZSBjaGVjayBvdXIgV2ViIHBhZ2UgYXQ6CisKKwlodHRwOi8vd3d3LmRnaWkuY29tCisKK2ZvciBzYWxlcyBvZmZpY2VzIHdvcmxkd2lkZS4gIFRlY2ggc3VwcG9ydCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoCit0aGUgY2hhbm5lbHMgbGlzdGVkIG9uIHRoZSBXZWIgc2l0ZSwgYWx0aG91Z2ggYXMgbG9uZyBhcyBJIGFtCitlbXBsb3llZCBvbiBuZXR3b3JraW5nIHByb2R1Y3RzIGF0IERpZ2kgSSB3aWxsIGJlIGhhcHB5IHRvIHByb3ZpZGUKK2FueSBidWcgZml4ZXMgdGhhdCBtYXkgYmUgbmVlZGVkLgorCistUmljayBSaWNoYXJkc29uLCByaWNrQGRnaWkuY29tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGwyay50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGwyay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ2MDQ5MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kbDJrLnR4dApAQCAtMCwwICsxLDI4MSBAQAorCisgICAgRC1MaW5rIERMMjAwMC1iYXNlZCBHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXIgSW5zdGFsbGF0aW9uCisgICAgZm9yIExpbnV4CisgICAgTWF5IDIzLCAyMDAyCisKK0NvbnRlbnRzCis9PT09PT09PQorIC0gQ29tcGF0aWJpbGl0eSBMaXN0CisgLSBRdWljayBJbnN0YWxsCisgLSBDb21waWxpbmcgdGhlIERyaXZlcgorIC0gSW5zdGFsbGluZyB0aGUgRHJpdmVyCisgLSBPcHRpb24gcGFyYW1ldGVyCisgLSBDb25maWd1cmF0aW9uIFNjcmlwdCBTYW1wbGUKKyAtIFRyb3VibGVzaG9vdGluZworCisKK0NvbXBhdGliaWxpdHkgTGlzdAorPT09PT09PT09PT09PT09PT0KK0FkYXB0ZXIgU3VwcG9ydDoKKworRC1MaW5rIERHRS01NTBUIEdpZ2FiaXQgRXRoZXJuZXQgQWRhcHRlci4KK0QtTGluayBER0UtNTUwU1ggR2lnYWJpdCBFdGhlcm5ldCBBZGFwdGVyLgorRC1MaW5rIERMMjAwMC1iYXNlZCBHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXIuCisKKworVGhlIGRyaXZlciBzdXBwb3J0IExpbnV4IGtlcm5lbCAyLjQuNyBsYXRlci4gV2UgaGFkIHRlc3RlZCBpdAorb24gdGhlIGVudmlyb25tZW50cyBiZWxvdy4KKworIC4gUmVkIEhhdCB2Ni4yICh1cGRhdGUga2VybmVsIHRvIDIuNC43KQorIC4gUmVkIEhhdCB2Ny4wICh1cGRhdGUga2VybmVsIHRvIDIuNC43KQorIC4gUmVkIEhhdCB2Ny4xIChrZXJuZWwgMi40LjcpCisgLiBSZWQgSGF0IHY3LjIgKGtlcm5lbCAyLjQuNy0xMCkKKworCitRdWljayBJbnN0YWxsCis9PT09PT09PT09PT09CitJbnN0YWxsIGxpbnV4IGRyaXZlciBhcyBmb2xsb3dpbmcgY29tbWFuZDoKKworMS4gbWFrZSBhbGwKKzIuIGluc21vZCBkbDJrLmtvCiszLiBpZmNvbmZpZyBldGgwIHVwIDEwLnh4eC54eHgueHh4IG5ldG1hc2sgMjU1LjAuMC4wCisJCSAgICBeXl5eXl5eXl5eXl5eXl5cCSAgICBeXl5eXl5eXlwKKwkJCQkgICAgSVAJCSAgICAgTkVUTUFTSworTm93IGV0aDAgc2hvdWxkIGFjdGl2ZSwgeW91IGNhbiB0ZXN0IGl0IGJ5ICJwaW5nIiBvciBnZXQgbW9yZSBpbmZvcm1hdGlvbiBieQorImlmY29uZmlnIi4gSWYgdGVzdGVkIG9rLCBjb250aW51ZSB0aGUgbmV4dCBzdGVwLgorCis0LiBjcCBkbDJrLmtvIC9saWIvbW9kdWxlcy9gdW5hbWUgLXJgL2tlcm5lbC9kcml2ZXJzL25ldAorNS4gQWRkIHRoZSBmb2xsb3dpbmcgbGluZSB0byAvZXRjL21vZHByb2JlLmNvbmY6CisJYWxpYXMgZXRoMCBkbDJrCis2LiBSdW4gIm5ldGNvbmZpZyIgb3IgIm5ldGNvbmYiIHRvIGNyZWF0ZSBjb25maWd1cmF0aW9uIHNjcmlwdCBpZmNmZy1ldGgwCisgICBsb2NhdGVkIGF0IC9ldGMvc3lzY29uZmlnL25ldHdvcmstc2NyaXB0cyBvciBjcmVhdGUgaXQgbWFudWFsbHkuCisgICBbc2VlIC0gQ29uZmlndXJhdGlvbiBTY3JpcHQgU2FtcGxlXQorNy4gRHJpdmVyIHdpbGwgYXV0b21hdGljYWxseSBsb2FkIGFuZCBjb25maWd1cmUgYXQgbmV4dCBib290IHRpbWUuCisKK0NvbXBpbGluZyB0aGUgRHJpdmVyCis9PT09PT09PT09PT09PT09PT09PQorICBJbiBMaW51eCwgTklDIGRyaXZlcnMgYXJlIG1vc3QgY29tbW9ubHkgY29uZmlndXJlZCBhcyBsb2FkYWJsZSBtb2R1bGVzLgorVGhlIGFwcHJvYWNoIG9mIGJ1aWxkaW5nIGEgbW9ub2xpdGhpYyBrZXJuZWwgaGFzIGJlY29tZSBvYnNvbGV0ZS4gVGhlIGRyaXZlcgorY2FuIGJlIGNvbXBpbGVkIGFzIHBhcnQgb2YgYSBtb25vbGl0aGljIGtlcm5lbCwgYnV0IGlzIHN0cm9uZ2x5IGRpc2NvdXJhZ2VkLgorVGhlIHJlbWFpbmRlciBvZiB0aGlzIHNlY3Rpb24gYXNzdW1lcyB0aGUgZHJpdmVyIGlzIGJ1aWx0IGFzIGEgbG9hZGFibGUgbW9kdWxlLgorSW4gdGhlIExpbnV4IGVudmlyb25tZW50LCBpdCBpcyBhIGdvb2QgaWRlYSB0byByZWJ1aWxkIHRoZSBkcml2ZXIgZnJvbSB0aGUKK3NvdXJjZSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gYSBwcmVjb21waWxlZCB2ZXJzaW9uLiBUaGlzIGFwcHJvYWNoIHByb3ZpZGVzCitiZXR0ZXIgcmVsaWFiaWxpdHkgc2luY2UgYSBwcmVjb21waWxlZCBkcml2ZXIgbWlnaHQgZGVwZW5kIG9uIGxpYnJhcmllcyBvcgora2VybmVsIGZlYXR1cmVzIHRoYXQgYXJlIG5vdCBwcmVzZW50IGluIGEgZ2l2ZW4gTGludXggaW5zdGFsbGF0aW9uLgorCitUaGUgMyBmaWxlcyBuZWNlc3NhcnkgdG8gYnVpbGQgTGludXggZGV2aWNlIGRyaXZlciBhcmUgZGwyay5jLCBkbDJrLmggYW5kCitNYWtlZmlsZS4gVG8gY29tcGlsZSwgdGhlIExpbnV4IGluc3RhbGxhdGlvbiBtdXN0IGluY2x1ZGUgdGhlIGdjYyBjb21waWxlciwKK3RoZSBrZXJuZWwgc291cmNlLCBhbmQgdGhlIGtlcm5lbCBoZWFkZXJzLiBUaGUgTGludXggZHJpdmVyIHN1cHBvcnRzIExpbnV4CitLZXJuZWxzIDIuNC43LiBDb3B5IHRoZSBmaWxlcyB0byBhIGRpcmVjdG9yeSBhbmQgZW50ZXIgdGhlIGZvbGxvd2luZyBjb21tYW5kCit0byBjb21waWxlIGFuZCBsaW5rIHRoZSBkcml2ZXI6CisKK0NELVJPTSBkcml2ZQorLS0tLS0tLS0tLS0tCisKK1tyb290QFhYWCAvXSBta2RpciBjZHJvbQorW3Jvb3RAWFhYIC9dIG1vdW50IC1yIC10IGlzbzk2NjAgLW8gY29udj1hdXRvIC9kZXYvY2Ryb20gL2Nkcm9tCitbcm9vdEBYWFggL10gY2Qgcm9vdAorW3Jvb3RAWFhYIC9yb290XSBta2RpciBkbDJrCitbcm9vdEBYWFggL3Jvb3RdIGNkIGRsMmsKK1tyb290QFhYWCBkbDJrXSBjcCAvY2Ryb20vbGludXgvZGwyay50Z3ogL3Jvb3QvZGwyaworW3Jvb3RAWFhYIGRsMmtdIHRhciB4ZnZ6IGRsMmsudGd6Citbcm9vdEBYWFggZGwya10gbWFrZSBhbGwKKworRmxvcHB5IGRpc2MgZHJpdmUKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1tyb290QFhYWCAvXSBjZCByb290Citbcm9vdEBYWFggL3Jvb3RdIG1rZGlyIGRsMmsKK1tyb290QFhYWCAvcm9vdF0gY2QgZGwyaworW3Jvb3RAWFhYIGRsMmtdIG1jb3B5IGE6L2xpbnV4L2RsMmsudGd6IC9yb290L2RsMmsKK1tyb290QFhYWCBkbDJrXSB0YXIgeGZ2eiBkbDJrLnRnegorW3Jvb3RAWFhYIGRsMmtdIG1ha2UgYWxsCisKK0luc3RhbGxpbmcgdGhlIERyaXZlcgorPT09PT09PT09PT09PT09PT09PT09CisKKyAgTWFudWFsIEluc3RhbGxhdGlvbgorICAtLS0tLS0tLS0tLS0tLS0tLS0tCisgIE9uY2UgdGhlIGRyaXZlciBoYXMgYmVlbiBjb21waWxlZCwgaXQgbXVzdCBiZSBsb2FkZWQsIGVuYWJsZWQsIGFuZCBib3VuZAorICB0byBhIHByb3RvY29sIHN0YWNrIGluIG9yZGVyIHRvIGVzdGFibGlzaCBuZXR3b3JrIGNvbm5lY3Rpdml0eS4gVG8gbG9hZCBhCisgIG1vZHVsZSBlbnRlciB0aGUgY29tbWFuZDoKKworICBpbnNtb2QgZGwyay5vCisKKyAgb3IKKworICBpbnNtb2QgZGwyay5vIDxvcHRpb25hbCBwYXJhbWV0ZXI+CTsgYWRkIHBhcmFtZXRlcgorCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgZXhhbXBsZTogaW5zbW9kIGRsMmsubyBtZWRpYT0xMDBtYnBzX2hkCisgICBvcgkgICAgaW5zbW9kIGRsMmsubyBtZWRpYT0zCisgICBvcgkgICAgaW5zbW9kIGRsMmsubyBtZWRpYT0zLDIJOyBmb3IgMiBjYXJkcworICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBQbGVhc2UgcmVmZXJlbmNlIHRoZSBsaXN0IG9mIHRoZSBjb21tYW5kIGxpbmUgcGFyYW1ldGVycyBzdXBwb3J0ZWQgYnkKKyAgdGhlIExpbnV4IGRldmljZSBkcml2ZXIgYmVsb3cuCisKKyAgVGhlIGluc21vZCBjb21tYW5kIG9ubHkgbG9hZHMgdGhlIGRyaXZlciBhbmQgZ2l2ZXMgaXQgYSBuYW1lIG9mIHRoZSBmb3JtCisgIGV0aDAsIGV0aDEsIGV0Yy4gVG8gYnJpbmcgdGhlIE5JQyBpbnRvIGFuIG9wZXJhdGlvbmFsIHN0YXRlLAorICBpdCBpcyBuZWNlc3NhcnkgdG8gaXNzdWUgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorCisgIGlmY29uZmlnIGV0aDAgdXAKKworICBGaW5hbGx5LCB0byBiaW5kIHRoZSBkcml2ZXIgdG8gdGhlIGFjdGl2ZSBwcm90b2NvbCAoZS5nLiwgVENQL0lQIHdpdGgKKyAgTGludXgpLCBlbnRlciB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKyAgaWZ1cCBldGgwCisKKyAgTm90ZSB0aGF0IHRoaXMgaXMgbWVhbmluZ2Z1bCBvbmx5IGlmIHRoZSBzeXN0ZW0gY2FuIGZpbmQgYSBjb25maWd1cmF0aW9uCisgIHNjcmlwdCB0aGF0IGNvbnRhaW5zIHRoZSBuZWNlc3NhcnkgbmV0d29yayBpbmZvcm1hdGlvbi4gQSBzYW1wbGUgd2lsbCBiZQorICBnaXZlbiBpbiB0aGUgbmV4dCBwYXJhZ3JhcGguCisKKyAgVGhlIGNvbW1hbmRzIHRvIHVubG9hZCBhIGRyaXZlciBhcmUgYXMgZm9sbG93czoKKworICBpZmRvd24gZXRoMAorICBpZmNvbmZpZyBldGgwIGRvd24KKyAgcm1tb2QgZGwyay5vCisKKyAgVGhlIGZvbGxvd2luZyBhcmUgdGhlIGNvbW1hbmRzIHRvIGxpc3QgdGhlIGN1cnJlbnRseSBsb2FkZWQgbW9kdWxlcyBhbmQKKyAgdG8gc2VlIHRoZSBjdXJyZW50IG5ldHdvcmsgY29uZmlndXJhdGlvbi4KKworICBsc21vZAorICBpZmNvbmZpZworCisKKyAgQXV0b21hdGVkIEluc3RhbGxhdGlvbgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgaG93IHRvIGluc3RhbGwgdGhlIGRyaXZlciBzdWNoIHRoYXQgaXQgaXMKKyAgYXV0b21hdGljYWxseSBsb2FkZWQgYW5kIGNvbmZpZ3VyZWQgYXQgYm9vdCB0aW1lLiBUaGUgZm9sbG93aW5nIGRlc2NyaXB0aW9uCisgIGlzIGJhc2VkIG9uIGEgUmVkIEhhdCA2LjAvNy4wIGRpc3RyaWJ1dGlvbiwgYnV0IGl0IGNhbiBlYXNpbHkgYmUgcG9ydGVkIHRvCisgIG90aGVyIGRpc3RyaWJ1dGlvbnMgYXMgd2VsbC4KKworICBSZWQgSGF0IHY2LngvdjcueAorICAtLS0tLS0tLS0tLS0tLS0tLQorICAxLiBDb3B5IGRsMmsubyB0byB0aGUgbmV0d29yayBtb2R1bGVzIGRpcmVjdG9yeSwgdHlwaWNhbGx5CisgICAgIC9saWIvbW9kdWxlcy8yLngueC14eC9uZXQgb3IgL2xpYi9tb2R1bGVzLzIueC54L2tlcm5lbC9kcml2ZXJzL25ldC4KKyAgMi4gTG9jYXRlIHRoZSBib290IG1vZHVsZSBjb25maWd1cmF0aW9uIGZpbGUsIG1vc3QgY29tbW9ubHkgbW9kcHJvYmUuY29uZgorICAgICBvciBtb2R1bGVzLmNvbmYgKGZvciAyLjQpIGluIHRoZSAvZXRjIGRpcmVjdG9yeS4gQWRkIHRoZSBmb2xsb3dpbmcgbGluZXM6CisKKyAgICAgYWxpYXMgZXRoeCBkbDJrCisgICAgIG9wdGlvbnMgZGwyayA8b3B0aW9uYWwgcGFyYW1ldGVycz4KKworICAgICB3aGVyZSBldGh4IHdpbGwgYmUgZXRoMCBpZiB0aGUgTklDIGlzIHRoZSBvbmx5IGV0aGVybmV0IGFkYXB0ZXIsIGV0aDEgaWYKKyAgICAgb25lIG90aGVyIGV0aGVybmV0IGFkYXB0ZXIgaXMgaW5zdGFsbGVkLCBldGMuIFJlZmVyIHRvIHRoZSB0YWJsZSBpbiB0aGUKKyAgICAgcHJldmlvdXMgc2VjdGlvbiBmb3IgdGhlIGxpc3Qgb2Ygb3B0aW9uYWwgcGFyYW1ldGVycy4KKyAgMy4gTG9jYXRlIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gc2NyaXB0cywgbm9ybWFsbHkgdGhlCisgICAgIC9ldGMvc3lzY29uZmlnL25ldHdvcmstc2NyaXB0cyBkaXJlY3RvcnksIGFuZCBjcmVhdGUgYSBjb25maWd1cmF0aW9uCisgICAgIHNjcmlwdCBuYW1lZCBpZmNmZy1ldGh4IHRoYXQgY29udGFpbnMgbmV0d29yayBpbmZvcm1hdGlvbi4KKyAgNC4gTm90ZSB0aGF0IGZvciBtb3N0IExpbnV4IGRpc3RyaWJ1dGlvbnMsIFJlZCBIYXQgaW5jbHVkZWQsIGEgY29uZmlndXJhdGlvbgorICAgICB1dGlsaXR5IHdpdGggYSBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UgaXMgcHJvdmlkZWQgdG8gcGVyZm9ybSBzdGVwcyAyCisgICAgIGFuZCAzIGFib3ZlLgorCisKK1BhcmFtZXRlciBEZXNjcmlwdGlvbgorPT09PT09PT09PT09PT09PT09PT09CitZb3UgY2FuIGluc3RhbGwgdGhpcyBkcml2ZXIgd2l0aG91dCBhbnkgYWRkdGlvbmFsIHBhcmFtZXRlci4gSG93ZXZlciwgaWYgeW91CithcmUgZ29pbmcgdG8gaGF2ZSBleHRlbnNpdmUgZnVuY3Rpb25zIHRoZW4gaXQgaXMgbmVjZXNzYXJ5IHRvIHNldCBleHRyYQorcGFyYW1ldGVyLiBCZWxvdyBpcyBhIGxpc3Qgb2YgdGhlIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzIHN1cHBvcnRlZCBieSB0aGUKK0xpbnV4IGRldmljZQorZHJpdmVyLgorCittdHU9cGFja2V0X3NpemUJCQktIFNwZWNpZmllcyB0aGUgbWF4aW11bSBwYWNrZXQgc2l6ZS4gZGVmYXVsdAorCQkJCSAgaXMgMTUwMC4KKworbWVkaWE9bWVkaWFfdHlwZQkJLSBTcGVjaWZpZXMgdGhlIG1lZGlhIHR5cGUgdGhlIE5JQyBvcGVyYXRlcyBhdC4KKwkJCQkgIGF1dG9zZW5zZQlBdXRvc2Vuc2luZyBhY3RpdmUgbWVkaWEuCisJCQkJICAxMG1icHNfaGQJMTBNYnBzIGhhbGYgZHVwbGV4LgorCQkJCSAgMTBtYnBzX2ZkCTEwTWJwcyBmdWxsIGR1cGxleC4KKwkJCQkgIDEwMG1icHNfaGQJMTAwTWJwcyBoYWxmIGR1cGxleC4KKwkJCQkgIDEwMG1icHNfZmQJMTAwTWJwcyBmdWxsIGR1cGxleC4KKwkJCQkgIDEwMDBtYnBzX2ZkCTEwMDBNYnBzIGZ1bGwgZHVwbGV4LgorCQkJCSAgMTAwMG1icHNfaGQJMTAwME1icHMgaGFsZiBkdXBsZXguCisJCQkJICAwCQlBdXRvc2Vuc2luZyBhY3RpdmUgbWVkaWEuCisJCQkJICAxCQkxME1icHMgaGFsZiBkdXBsZXguCisJCQkJICAyCQkxME1icHMgZnVsbCBkdXBsZXguCisJCQkJICAzCQkxMDBNYnBzIGhhbGYgZHVwbGV4LgorCQkJCSAgNAkJMTAwTWJwcyBmdWxsIGR1cGxleC4KKwkJCQkgIDUgICAgICAgICAgCTEwMDBNYnBzIGhhbGYgZHVwbGV4LgorCQkJCSAgNiAgICAgICAgICAJMTAwME1icHMgZnVsbCBkdXBsZXguCisKKwkJCQkgIEJ5IGRlZmF1bHQsIHRoZSBOSUMgb3BlcmF0ZXMgYXQgYXV0b3NlbnNlLgorCQkJCSAgMTAwMG1icHNfZmQgYW5kIDEwMDBtYnBzX2hkIHR5cGVzIGFyZSBvbmx5CisJCQkJICBhdmFpbGFibGUgZm9yIGZpYmVyIGFkYXB0ZXIuCisKK3ZsYW49bgkJCQktIFNwZWNpZmllcyB0aGUgVkxBTiBJRC4gSWYgdmxhbj0wLCB0aGUKKwkJCQkgIFZpcnR1YWwgTG9jYWwgQXJlYSBOZXR3b3JrIChWTEFOKSBmdW5jdGlvbiBpcworCQkJCSAgZGlzYWJsZS4KKworanVtYm89WzB8MV0JCQktIFNwZWNpZmllcyB0aGUganVtYm8gZnJhbWUgc3VwcG9ydC4gSWYganVtYm89MSwKKwkJCQkgIHRoZSBOSUMgYWNjZXB0IGp1bWJvIGZyYW1lcy4gQnkgZGVmYXVsdCwgdGhpcworCQkJCSAgZnVuY3Rpb24gaXMgZGlzYWJsZWQuCisJCQkJICBKdW1ibyBmcmFtZSB1c3VhbGx5IGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlCisJCQkJICBpbnQgZ2lnYWJpdC4KKwkJCQkgIFRoaXMgZmVhdHVyZSBuZWVkIGp1bWJvIGZyYW1lIGNvbXBhdGlibGUgCisJCQkJICByZW1vdGUuCisJCQkJICAKK3J4X2NvYWxlc2NlPW0JCQktIE51bWJlciBvZiByeCBmcmFtZSBoYW5kbGVkIGVhY2ggaW50ZXJydXB0LgorcnhfdGltZW91dD1uCQkJLSBSeCBETUEgd2FpdCB0aW1lIGZvciBhbiBpbnRlcnJ1cHQuIAorCQkJCSAgSWYgc2V0IHJ4X2NvYWxlc2NlID4gMCwgaGFyZHdhcmUgb25seSBhc3NlcnQgCisJCQkJICBhbiBpbnRlcnJ1cHQgZm9yIG0gZnJhbWVzLiBIYXJkd2FyZSB3b24ndCAKKwkJCQkgIGFzc2VydCByeCBpbnRlcnJ1cHQgdW50aWwgbSBmcmFtZXMgcmVjZWl2ZWQgb3IKKwkJCQkgIHJlYWNoIHRpbWVvdXQgb2YgbiAqIDY0MCBuYW5vIHNlY29uZHMuIAorCQkJCSAgU2V0IHByb3BlciByeF9jb2FsZXNjZSBhbmQgcnhfdGltZW91dCBjYW4gCisJCQkJICByZWR1Y2UgY29uZ2VzdGlvbiBjb2xsYXBzZSBhbmQgb3ZlcmxvYWQgd2hpY2gKKwkJCQkgIGhhcyBiZWVuIGEgYm90dGxlbmVjdCBmb3IgaGlnaCBzcGVlZCBuZXR3b3JrLgorCQkJCSAgCisJCQkJICBGb3IgZXhhbXBsZSwgcnhfY29hbGVzY2U9MTAgcnhfdGltZW91dD04MDAuCisJCQkJICB0aGF0IGlzLCBoYXJkd2FyZSBhc3NlcnQgb25seSAxIGludGVycnVwdCAKKwkJCQkgIGZvciAxMCBmcmFtZXMgcmVjZWl2ZWQgb3IgdGltZW91dCBvZiA1MTIgdXMuIAorCit0eF9jb2FsZXNjZT1uCQkJLSBOdW1iZXIgb2YgdHggZnJhbWUgaGFuZGxlZCBlYWNoIGludGVycnVwdC4KKwkJCQkgIFNldCBuID4gMSBjYW4gcmVkdWNlIHRoZSBpbnRlcnJ1cHRzIAorCQkJCSAgY29uZ2VzdGlvbiB1c3VhbGx5IGxvd2VyIHBlcmZvcm1hbmNlIG9mCisJCQkJICBoaWdoIHNwZWVkIG5ldHdvcmsgY2FyZC4gRGVmYXVsdCBpcyAxNi4KKwkJCQkgIAordHhfZmxvdz1bMXwwXQkJCS0gU3BlY2lmaWVzIHRoZSBUeCBmbG93IGNvbnRyb2wuIElmIHR4X2Zsb3c9MCwgCisJCQkJICB0aGUgVHggZmxvdyBjb250cm9sIGRpc2FibGUgZWxzZSBkcml2ZXIKKwkJCQkgIGF1dG9kZXRlY3QuCityeF9mbG93PVsxfDBdCQkJLSBTcGVjaWZpZXMgdGhlIFJ4IGZsb3cgY29udHJvbC4gSWYgcnhfZmxvdz0wLCAKKwkJCQkgIHRoZSBSeCBmbG93IGNvbnRyb2wgZW5hYmxlIGVsc2UgZHJpdmVyCisJCQkJICBhdXRvZGV0ZWN0LgorCisKK0NvbmZpZ3VyYXRpb24gU2NyaXB0IFNhbXBsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09CitIZXJlIGlzIGEgc2FtcGxlIG9mIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb24gc2NyaXB0OgorCitERVZJQ0U9ZXRoMAorVVNFUkNUTD1ubworT05CT09UPXllcworUE9PVFBST1RPPW5vbmUKK0JST0FEQ0FTVD0yMDcuMjAwLjUuMjU1CitORVRXT1JLPTIwNy4yMDAuNS4wCitORVRNQVNLPTI1NS4yNTUuMjU1LjAKK0lQQUREUj0yMDcuMjAwLjUuMgorCisKK1Ryb3VibGVzaG9vdGluZworPT09PT09PT09PT09PT09CitRMS4gU291cmNlIGZpbGVzIGNvbnRhaW4gXiBNIGJlaGluZCBldmVyeSBsaW5lLgorCU1ha2Ugc3VyZSBhbGwgZmlsZXMgYXJlIFVuaXggZmlsZSBmb3JtYXQgKG5vIExGKS4gVHJ5IHRoZSBmb2xsb3dpbmcKKyAgICBzaGVsbCBjb21tYW5kIHRvIGNvbnZlcnQgZmlsZXMuCisKKwljYXQgZGwyay5jIHwgY29sIC1iID4gZGwyay50bXAKKwltdiBkbDJrLnRtcCBkbDJrLmMKKworCU9SCisKKwljYXQgZGwyay5jIHwgdHIgLWQgIlxyIiA+IGRsMmsudG1wCisJbXYgZGwyay50bXAgZGwyay5jCisKK1EyOiBDb3VsZCBub3QgZmluZCBoZWFkZXIgZmlsZXMgKCouaCkgPworCVRvIGNvbXBpbGUgdGhlIGRyaXZlciwgeW91IG5lZWQga2VybmVsIGhlYWRlciBmaWxlcy4gQWZ0ZXIKKyAgICBpbnN0YWxsaW5nIHRoZSBrZXJuZWwgc291cmNlLCB0aGUgaGVhZGVyIGZpbGVzIGFyZSB1c3VhbGx5IGxvY2F0ZWQgaW4KKyAgICAvdXNyL3NyYy9saW51eC9pbmNsdWRlLCB3aGljaCBpcyB0aGUgZGVmYXVsdCBpbmNsdWRlIGRpcmVjdG9yeSBjb25maWd1cmVkCisgICAgaW4gTWFrZWZpbGUuIEZvciBzb21lIGRpc3RyaWJ1dGlvbnMsIHRoZXJlIGlzIGEgY29weSBvZiBoZWFkZXIgZmlsZXMgaW4KKyAgICAvdXNyL3NyYy9pbmNsdWRlL2xpbnV4IGFuZCAvdXNyL3NyYy9pbmNsdWRlL2FzbSwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUKKyAgICBJTkNMVURFRElSIGluIE1ha2VmaWxlIHRvIC91c3IvaW5jbHVkZSB3aXRob3V0IGluc3RhbGxpbmcga2VybmVsIHNvdXJjZS4KKwlOb3RlIHRoYXQgUkggNy4wIGRpZG4ndCBwcm92aWRlIGNvcnJlY3QgaGVhZGVyIGZpbGVzIGluIC91c3IvaW5jbHVkZSwKKyAgICBpbmNsdWRpbmcgdGhvc2UgZmlsZXMgd2lsbCBtYWtlIGEgd3JvbmcgdmVyc2lvbiBkcml2ZXIuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kbWZlLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kbWZlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGU4Mzk4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RtZmUudHh0CkBAIC0wLDAgKzEsNTkgQEAKKyAgZG1mZS5jOiBWZXJzaW9uIDEuMjggICAgICAgIDAxLzE4LzIwMDAKKworICAgICAgICBBIERhdmljb20gRE05MTAyKEEpL0RNOTEzMi9ETTk4MDEgZmFzdCBldGhlcm5ldCBkcml2ZXIgZm9yIExpbnV4LiAKKyAgICAgICAgQ29weXJpZ2h0IChDKSAxOTk3ICBTdGVuIFdhbmcKKworICAgICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgICAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgICAgICAgIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKworICBBLiBDb21waWxlciBjb21tYW5kOgorCisgICAgIEEtMTogRm9yIG5vcm1hbCBzaW5nbGUgb3IgbXVsdGlwbGUgcHJvY2Vzc29yIGtlcm5lbAorICAgICAgICAgICJnY2MgLURNT0RVTEUgLURfX0tFUk5FTF9fIC1JL3Vzci9zcmMvbGludXgvbmV0L2luZXQgLVdhbGwgCisgICAgICAgICAgICAtV3N0cmljdC1wcm90b3R5cGVzIC1PNiAtYyBkbWZlLmMiCisKKyAgICAgQS0yOiBGb3Igc2luZ2xlIG9yIG11bHRpcGxlIHByb2Nlc3NvciB3aXRoIGtlcm5lbCBtb2R1bGUgdmVyc2lvbiBmdW5jdGlvbgorICAgICAgICAgICJnY2MgLURNT0RVTEUgLURNT0RWRVJTSU9OUyAtRF9fS0VSTkVMX18gLUkvdXNyL3NyYy9saW51eC9uZXQvaW5ldCAKKyAgICAgICAgICAgIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLU82IC1jIGRtZmUuYyIKKworCisgIEIuIFRoZSBmb2xsb3dpbmcgc3RlcHMgdGVhY2ggeW91IGhvdyB0byBhY3RpdmF0ZSBhIERNOTEwMiBib2FyZDoKKworICAgICAgICAxLiBVc2VkIHRoZSB1cHBlciBjb21waWxlciBjb21tYW5kIHRvIGNvbXBpbGUgZG1mZS5jCisKKyAgICAgICAgMi4gSW5zZXJ0IGRtZmUgbW9kdWxlIGludG8ga2VybmVsCisgICAgICAgICAgICJpbnNtb2QgZG1mZSIgICAgICAgIDs7QXV0byBEZXRlY3Rpb24gTW9kZSAoU3VnZ2VzdCkKKyAgICAgICAgICAgImluc21vZCBkbWZlIG1vZGU9MCIgOztGb3JjZSAxME0gSGFsZiBEdXBsZXgKKyAgICAgICAgICAgImluc21vZCBkbWZlIG1vZGU9MSIgOztGb3JjZSAxMDBNIEhhbGYgRHVwbGV4CisgICAgICAgICAgICJpbnNtb2QgZG1mZSBtb2RlPTQiIDs7Rm9yY2UgMTBNIEZ1bGwgRHVwbGV4CisgICAgICAgICAgICJpbnNtb2QgZG1mZSBtb2RlPTUiIDs7Rm9yY2UgMTAwTSBGdWxsIER1cGxleAorCisgICAgICAgIDMuIENvbmZpZyBhIGRtOTEwMiBuZXR3b3JrIGludGVyZmFjZQorICAgICAgICAgICAiaWZjb25maWcgZXRoMCAxNzIuMjIuMy4xOCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXl5eXl4gWW91ciBJUCBhZGRyZXNzCisKKyAgICAgICAgNC4gQWN0aXZhdGUgdGhlIElQIHJvdXRpbmcgdGFibGUuIEZvciBzb21lIGRpc3RyaWJ1dGlvbnMsIGl0IGlzIG5vdAorICAgICAgICAgICBuZWNlc3NhcnkuIFlvdSBjYW4gdHlwZSAicm91dGUiIHRvIGNoZWNrLgorCisgICAgICAgICAgICJyb3V0ZSBhZGQgZGVmYXVsdCBldGgwIgorCisKKyAgICAgICAgNS4gV2VsbCBkb25lLiBZb3VyIERNOTEwMiBhZGFwdGVyIGlzIG5vdyBhY3RpdmF0ZWQuCisKKworICAgQy4gT2JqZWN0IGZpbGVzIGRlc2NyaXB0aW9uOgorICAgICAgICAxLiBkbWZlX3JoNjEubzogICAgICAgCUZvciBSZWRoYXQgNi4xCisKKyAgICAgICAgSWYgeW91IGNhbiBtYWtlIHN1cmUgeW91ciBrZXJuZWwgdmVyc2lvbiwgeW91IGNhbiByZW5hbWUKKyAgICAgICAgdG8gZG1mZS5vIGFuZCBkaXJlY3RseSB1c2UgaXQgd2l0aG91dCByZS1jb21waWxpbmcuCisKKworICBBdXRob3I6IFN0ZW4gV2FuZywgODg2LTMtNTc5ODc5Ny04NTE3LCBFLW1haWw6IHN0ZW5fd2FuZ0BkYXZpY29tLmNvbS50dwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RyaXZlci50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZHJpdmVyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWZkMGVmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RyaXZlci50eHQKQEAgLTAsMCArMSw5NCBAQAorRG9jdW1lbnRzIGFib3V0IHNvZnRuZXQgZHJpdmVyIGlzc3VlcyBpbiBnZW5lcmFsIGNhbiBiZSBmb3VuZAorYXQ6CisKKwlodHRwOi8vd3d3LmZpcnN0Zmxvb3Iub3JnL35hbmRpL3NvZnRuZXQvCisKK1RyYW5zbWl0IHBhdGggZ3VpZGVsaW5lczoKKworMSkgVGhlIGhhcmRfc3RhcnRfeG1pdCBtZXRob2QgbXVzdCBuZXZlciByZXR1cm4gJzEnIHVuZGVyIGFueQorICAgbm9ybWFsIGNpcmN1bXN0YW5jZXMuICBJdCBpcyBjb25zaWRlcmVkIGEgaGFyZCBlcnJvciB1bmxlc3MKKyAgIHRoZXJlIGlzIG5vIHdheSB5b3VyIGRldmljZSBjYW4gdGVsbCBhaGVhZCBvZiB0aW1lIHdoZW4gaXQncworICAgdHJhbnNtaXQgZnVuY3Rpb24gd2lsbCBiZWNvbWUgYnVzeS4KKworICAgSW5zdGVhZCBpdCBtdXN0IG1haW50YWluIHRoZSBxdWV1ZSBwcm9wZXJseS4gIEZvciBleGFtcGxlLAorICAgZm9yIGEgZHJpdmVyIGltcGxlbWVudGluZyBzY2F0dGVyLWdhdGhlciB0aGlzIG1lYW5zOgorCisJc3RhdGljIGludCBkcnZfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCSAgIAkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCisJeworCQlzdHJ1Y3QgZHJ2ICpkcCA9IGRldi0+cHJpdjsKKworCQlsb2NrX3R4KGRwKTsKKwkJLi4uCisJCS8qIFRoaXMgaXMgYSBoYXJkIGVycm9yIGxvZyBpdC4gKi8KKwkJaWYgKFRYX0JVRkZTX0FWQUlMKGRwKSA8PSAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArIDEpKSB7CisJCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCQl1bmxvY2tfdHgoZHApOworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IEJVRyEgVHggUmluZyBmdWxsIHdoZW4gcXVldWUgYXdha2UhXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCS4uLiBxdWV1ZSBwYWNrZXQgdG8gY2FyZCAuLi4KKwkJLi4uIHVwZGF0ZSB0eCBjb25zdW1lciBpbmRleCAuLi4KKworCQlpZiAoVFhfQlVGRlNfQVZBSUwoZHApIDw9IChNQVhfU0tCX0ZSQUdTICsgMSkpCisJCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisKKwkJLi4uCisJCXVubG9ja190eChkcCk7CisJCS4uLgorCX0KKworICAgQW5kIHRoZW4gYXQgdGhlIGVuZCBvZiB5b3VyIFRYIHJlY2xhaW1hdGlvbiBldmVudCBoYW5kbGluZzoKKworCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRwLT5kZXYpICYmCisgICAgICAgICAgICBUWF9CVUZGU19BVkFJTChkcCkgPiAoTUFYX1NLQl9GUkFHUyArIDEpKQorCQluZXRpZl93YWtlX3F1ZXVlKGRwLT5kZXYpOworCisgICBGb3IgYSBub24tc2NhdHRlci1nYXRoZXIgc3VwcG9ydGluZyBjYXJkLCB0aGUgdGhyZWUgdGVzdHMgc2ltcGx5IGJlY29tZToKKworCQkvKiBUaGlzIGlzIGEgaGFyZCBlcnJvciBsb2cgaXQuICovCisJCWlmIChUWF9CVUZGU19BVkFJTChkcCkgPD0gMCkKKworICAgYW5kOgorCisJCWlmIChUWF9CVUZGU19BVkFJTChkcCkgPT0gMCkKKworICAgYW5kOgorCisJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZHAtPmRldikgJiYKKyAgICAgICAgICAgIFRYX0JVRkZTX0FWQUlMKGRwKSA+IDApCisJCW5ldGlmX3dha2VfcXVldWUoZHAtPmRldik7CisKKzIpIERvIG5vdCBmb3JnZXQgdG8gdXBkYXRlIG5ldGRldi0+dHJhbnNfc3RhcnQgdG8gamlmZmllcyBhZnRlcgorICAgZWFjaCBuZXcgdHggcGFja2V0IGlzIGdpdmVuIHRvIHRoZSBoYXJkd2FyZS4KKworMykgRG8gbm90IGZvcmdldCB0aGF0IG9uY2UgeW91IHJldHVybiAwIGZyb20geW91ciBoYXJkX3N0YXJ0X3htaXQKKyAgIG1ldGhvZCwgaXQgaXMgeW91ciBkcml2ZXIncyByZXNwb25zaWJpbGl0eSB0byBmcmVlIHVwIHRoZSBTS0IKKyAgIGFuZCBpbiBzb21lIGZpbml0ZSBhbW91bnQgb2YgdGltZS4KKworICAgRm9yIGV4YW1wbGUsIHRoaXMgbWVhbnMgdGhhdCBpdCBpcyBub3QgYWxsb3dlZCBmb3IgeW91ciBUWAorICAgbWl0aWdhdGlvbiBzY2hlbWUgdG8gbGV0IFRYIHBhY2tldHMgImhhbmcgb3V0IiBpbiB0aGUgVFgKKyAgIHJpbmcgdW5yZWNsYWltZWQgZm9yZXZlciBpZiBubyBuZXcgVFggcGFja2V0cyBhcmUgc2VudC4KKyAgIFRoaXMgZXJyb3IgY2FuIGRlYWRsb2NrIHNvY2tldHMgd2FpdGluZyBmb3Igc2VuZCBidWZmZXIgcm9vbQorICAgdG8gYmUgZnJlZWQgdXAuCisKKyAgIElmIHlvdSByZXR1cm4gMSBmcm9tIHRoZSBoYXJkX3N0YXJ0X3htaXQgbWV0aG9kLCB5b3UgbXVzdCBub3Qga2VlcAorICAgYW55IHJlZmVyZW5jZSB0byB0aGF0IFNLQiBhbmQgeW91IG11c3Qgbm90IGF0dGVtcHQgdG8gZnJlZSBpdCB1cC4KKworUHJvYmluZyBndWlkZWxpbmVzOgorCisxKSBBbnkgaGFyZHdhcmUgbGF5ZXIgYWRkcmVzcyB5b3Ugb2J0YWluIGZvciB5b3VyIGRldmljZSBzaG91bGQKKyAgIGJlIHZlcmlmaWVkLiAgRm9yIGV4YW1wbGUsIGZvciBldGhlcm5ldCBjaGVjayBpdCB3aXRoCisgICBsaW51eC9ldGhlcmRldmljZS5oOmlzX3ZhbGlkX2V0aGVyX2FkZHIoKQorCitDbG9zZS9zdG9wIGd1aWRlbGluZXM6CisKKzEpIEFmdGVyIHRoZSBkZXYtPnN0b3Agcm91dGluZSBoYXMgYmVlbiBjYWxsZWQsIHRoZSBoYXJkd2FyZSBtdXN0CisgICBub3QgcmVjZWl2ZSBvciB0cmFuc21pdCBhbnkgZGF0YS4gIEFsbCBpbiBmbGlnaHQgcGFja2V0cyBtdXN0CisgICBiZSBhYm9ydGVkLiBJZiBuZWNlc3NhcnksIHBvbGwgb3Igd2FpdCBmb3IgY29tcGxldGlvbiBvZiAKKyAgIGFueSByZXNldCBjb21tYW5kcy4KKworMikgVGhlIGRldi0+c3RvcCByb3V0aW5lIHdpbGwgYmUgY2FsbGVkIGJ5IHVucmVnaXN0ZXJfbmV0ZGV2aWNlCisgICBpZiBkZXZpY2UgaXMgc3RpbGwgVVAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZTEwMC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZTEwMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVmOWY3YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9lMTAwLnR4dApAQCAtMCwwICsxLDE3MCBAQAorTGludXgqIEJhc2UgRHJpdmVyIGZvciB0aGUgSW50ZWwoUikgUFJPLzEwMCBGYW1pbHkgb2YgQWRhcHRlcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05vdmVtYmVyIDE3LCAyMDA0CisKKworQ29udGVudHMKKz09PT09PT09CisKKy0gSW4gVGhpcyBSZWxlYXNlCistIElkZW50aWZ5aW5nIFlvdXIgQWRhcHRlcgorLSBEcml2ZXIgQ29uZmlndXJhdGlvbiBQYXJhbWV0ZXJzCistIEFkZGl0aW9uYWwgQ29uZmlndXJhdGlvbnMKKy0gU3VwcG9ydAorCisKK0luIFRoaXMgUmVsZWFzZQorPT09PT09PT09PT09PT09CisKK1RoaXMgZmlsZSBkZXNjcmliZXMgdGhlIExpbnV4KiBCYXNlIERyaXZlciBmb3IgdGhlIEludGVsKFIpIFBSTy8xMDAgRmFtaWx5IG9mCitBZGFwdGVycywgdmVyc2lvbiAzLjMueC4gIFRoaXMgZHJpdmVyIHN1cHBvcnRzIDIuNC54IGFuZCAyLjYueCBrZXJuZWxzLiAKKworSWRlbnRpZnlpbmcgWW91ciBBZGFwdGVyCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIGlkZW50aWZ5IHlvdXIgYWRhcHRlciwgZ28gdG8gdGhlIEFkYXB0ZXIgJiAKK0RyaXZlciBJRCBHdWlkZSBhdDoKKworICBodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20vc3VwcG9ydC9uZXR3b3JrL2FkYXB0ZXIvcHJvMTAwLzIxMzk3Lmh0bQorCitGb3IgdGhlIGxhdGVzdCBJbnRlbCBuZXR3b3JrIGRyaXZlcnMgZm9yIExpbnV4LCByZWZlciB0byB0aGUgZm9sbG93aW5nIAord2Vic2l0ZS4gSW4gdGhlIHNlYXJjaCBmaWVsZCwgZW50ZXIgeW91ciBhZGFwdGVyIG5hbWUgb3IgdHlwZSwgb3IgdXNlIHRoZSAKK25ldHdvcmtpbmcgbGluayBvbiB0aGUgbGVmdCB0byBzZWFyY2ggZm9yIHlvdXIgYWRhcHRlcjoKKworICBodHRwOi8vZG93bmxvYWRmaW5kZXIuaW50ZWwuY29tL3NjcmlwdHMtZGYvc3VwcG9ydF9pbnRlbC5hc3AKKworRHJpdmVyIENvbmZpZ3VyYXRpb24gUGFyYW1ldGVycworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgZWFjaCBwYXJhbWV0ZXIgaXMgZ2VuZXJhbGx5IHRoZSByZWNvbW1lbmRlZCBzZXR0aW5nLAordW5sZXNzIG90aGVyd2lzZSBub3RlZC4KKworUnggRGVzY3JpcHRvcnM6IE51bWJlciBvZiByZWNlaXZlIGRlc2NyaXB0b3JzLiBBIHJlY2VpdmUgZGVzY3JpcHRvciBpcyBhIGRhdGEgCisgICBzdHJ1Y3R1cmUgdGhhdCBkZXNjcmliZXMgYSByZWNlaXZlIGJ1ZmZlciBhbmQgaXRzIGF0dHJpYnV0ZXMgdG8gdGhlIG5ldHdvcmsgCisgICBjb250cm9sbGVyLiBUaGUgZGF0YSBpbiB0aGUgZGVzY3JpcHRvciBpcyB1c2VkIGJ5IHRoZSBjb250cm9sbGVyIHRvIHdyaXRlIAorICAgZGF0YSBmcm9tIHRoZSBjb250cm9sbGVyIHRvIGhvc3QgbWVtb3J5LiBJbiB0aGUgMy4wLnggZHJpdmVyIHRoZSB2YWxpZAorICAgcmFuZ2UgZm9yIHRoaXMgcGFyYW1ldGVyIGlzIDY0LTI1Ni4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgNjQuIFRoaXMgcGFyYW1ldGVyIAorICAgY2FuIGJlIGNoYW5nZWQgdXNpbmcgdGhlIGNvbW1hbmQgCisgCisgICBldGh0b29sIC1HIGV0aD8gcnggbiwgd2hlcmUgbiBpcyB0aGUgbnVtYmVyIG9mIGRlc2lyZWQgcnggZGVzY3JpcHRvcnMuCisKK1R4IERlc2NyaXB0b3JzOiBOdW1iZXIgb2YgdHJhbnNtaXQgZGVzY3JpcHRvcnMuIEEgdHJhbnNtaXQgZGVzY3JpcHRvciBpcyBhCisgICBkYXRhIHN0cnVjdHVyZSB0aGF0IGRlc2NyaWJlcyBhIHRyYW5zbWl0IGJ1ZmZlciBhbmQgaXRzIGF0dHJpYnV0ZXMgdG8gdGhlCisgICBuZXR3b3JrIGNvbnRyb2xsZXIuIFRoZSBkYXRhIGluIHRoZSBkZXNjcmlwdG9yIGlzIHVzZWQgYnkgdGhlIGNvbnRyb2xsZXIgdG8gCisgICByZWFkIGRhdGEgZnJvbSB0aGUgaG9zdCBtZW1vcnkgdG8gdGhlIGNvbnRyb2xsZXIuIEluIHRoZSAzLjAueCBkcml2ZXIgdGhlIAorICAgdmFsaWQgcmFuZ2UgZm9yIHRoaXMgcGFyYW1ldGVyIGlzIDY0LTI1Ni4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgNjQuIFRoaXMgCisgICBwYXJhbWV0ZXIgY2FuIGJlIGNoYW5nZWQgdXNpbmcgdGhlIGNvbW1hbmQgCisKKyAgIGV0aHRvb2wgLUcgZXRoPyB0eCBuLCB3aGVyZSBuIGlzIHRoZSBudW1iZXIgb2YgZGVzaXJlZCB0eCBkZXNjcmlwdG9ycy4KKworU3BlZWQvRHVwbGV4OiBUaGUgZHJpdmVyIGF1dG8tbmVnb3RpYXRlcyB0aGUgbGluayBzcGVlZCBhbmQgZHVwbGV4IHNldHRpbmdzIGJ5IAorICAgZGVmYXVsdC4gRXRodG9vbCBjYW4gYmUgdXNlZCBhcyBmb2xsb3dzIHRvIGZvcmNlIHNwZWVkL2R1cGxleC4gCisKKyAgIGV0aHRvb2wgLXMgZXRoPyAgYXV0b25lZyBvZmYgc3BlZWQgezEwfDEwMH0gZHVwbGV4IHtmdWxsfGhhbGZ9CisKKyAgIE5PVEU6IHNldHRpbmcgdGhlIHNwZWVkL2R1cGxleCB0byBpbmNvcnJlY3QgdmFsdWVzIHdpbGwgY2F1c2UgdGhlIGxpbmsgdG8KKyAgIGZhaWwuCisKK0V2ZW50IExvZyBNZXNzYWdlIExldmVsOiAgVGhlIGRyaXZlciB1c2VzIHRoZSBtZXNzYWdlIGxldmVsIGZsYWcgdG8gbG9nIGV2ZW50cyAKKyAgIHRvIHN5c2xvZy4gVGhlIG1lc3NhZ2UgbGV2ZWwgY2FuIGJlIHNldCBhdCBkcml2ZXIgbG9hZCB0aW1lLiBJdCBjYW4gYWxzbyBiZSAKKyAgIHNldCB1c2luZyB0aGUgY29tbWFuZAorCisgICBldGh0b29sIC1zIGV0aD8gbXNnbHZsIG4KKworQWRkaXRpb25hbCBDb25maWd1cmF0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PQorCisgIENvbmZpZ3VyaW5nIHRoZSBEcml2ZXIgb24gRGlmZmVyZW50IERpc3RyaWJ1dGlvbnMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIENvbmZpZ3VyaW5nIGEgbmV0d29yayBkcml2ZXIgdG8gbG9hZCBwcm9wZXJseSB3aGVuIHRoZSBzeXN0ZW0gaXMgc3RhcnRlZCBpcyAKKyAgZGlzdHJpYnV0aW9uIGRlcGVuZGVudC4gVHlwaWNhbGx5LCB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzIGludm9sdmVzIGFkZGluZyAKKyAgYW4gYWxpYXMgbGluZSB0byAvZXRjL21vZHVsZXMuY29uZiBhcyB3ZWxsIGFzIGVkaXRpbmcgb3RoZXIgc3lzdGVtIHN0YXJ0dXAgCisgIHNjcmlwdHMgYW5kL29yIGNvbmZpZ3VyYXRpb24gZmlsZXMuICBNYW55IHBvcHVsYXIgTGludXggZGlzdHJpYnV0aW9ucyBzaGlwIAorICB3aXRoIHRvb2xzIHRvIG1ha2UgdGhlc2UgY2hhbmdlcyBmb3IgeW91LiBUbyBsZWFybiB0aGUgcHJvcGVyIHdheSB0byAKKyAgY29uZmlndXJlIGEgbmV0d29yayBkZXZpY2UgZm9yIHlvdXIgc3lzdGVtLCByZWZlciB0byB5b3VyIGRpc3RyaWJ1dGlvbiAKKyAgZG9jdW1lbnRhdGlvbi4gSWYgZHVyaW5nIHRoaXMgcHJvY2VzcyB5b3UgYXJlIGFza2VkIGZvciB0aGUgZHJpdmVyIG9yIG1vZHVsZSAKKyAgbmFtZSwgdGhlIG5hbWUgZm9yIHRoZSBMaW51eCBCYXNlIERyaXZlciBmb3IgdGhlIEludGVsIFBSTy8xMDAgRmFtaWx5IG9mIAorICBBZGFwdGVycyBpcyBlMTAwLgorCisgIEFzIGFuIGV4YW1wbGUsIGlmIHlvdSBpbnN0YWxsIHRoZSBlMTAwIGRyaXZlciBmb3IgdHdvIFBSTy8xMDAgYWRhcHRlcnMgCisgIChldGgwIGFuZCBldGgxKSwgYWRkIHRoZSBmb2xsb3dpbmcgdG8gbW9kdWxlcy5jb25mOgorCisgICAgICAgYWxpYXMgZXRoMCBlMTAwCisgICAgICAgYWxpYXMgZXRoMSBlMTAwCisKKyAgVmlld2luZyBMaW5rIE1lc3NhZ2VzCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBJbiBvcmRlciB0byBzZWUgbGluayBtZXNzYWdlcyBhbmQgb3RoZXIgSW50ZWwgZHJpdmVyIGluZm9ybWF0aW9uIG9uIHlvdXIgCisgIGNvbnNvbGUsIHlvdSBtdXN0IHNldCB0aGUgZG1lc2cgbGV2ZWwgdXAgdG8gc2l4LiBUaGlzIGNhbiBiZSBkb25lIGJ5IAorICBlbnRlcmluZyB0aGUgZm9sbG93aW5nIG9uIHRoZSBjb21tYW5kIGxpbmUgYmVmb3JlIGxvYWRpbmcgdGhlIGUxMDAgZHJpdmVyOiAKKworICAgICAgIGRtZXNnIC1uIDgKKworICBJZiB5b3Ugd2lzaCB0byBzZWUgYWxsIG1lc3NhZ2VzIGlzc3VlZCBieSB0aGUgZHJpdmVyLCBpbmNsdWRpbmcgZGVidWcgCisgIG1lc3NhZ2VzLCBzZXQgdGhlIGRtZXNnIGxldmVsIHRvIGVpZ2h0LgorCisgIE5PVEU6IFRoaXMgc2V0dGluZyBpcyBub3Qgc2F2ZWQgYWNyb3NzIHJlYm9vdHMuCisKKyAgRXRodG9vbAorICAtLS0tLS0tCisKKyAgVGhlIGRyaXZlciB1dGlsaXplcyB0aGUgZXRodG9vbCBpbnRlcmZhY2UgZm9yIGRyaXZlciBjb25maWd1cmF0aW9uIGFuZAorICBkaWFnbm9zdGljcywgYXMgd2VsbCBhcyBkaXNwbGF5aW5nIHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uLiAgRXRodG9vbAorICB2ZXJzaW9uIDEuNiBvciBsYXRlciBpcyByZXF1aXJlZCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5LgorCisgIFRoZSBsYXRlc3QgcmVsZWFzZSBvZiBldGh0b29sIGNhbiBiZSBmb3VuZCBhdDoKKyAgaHR0cDovL3NmLm5ldC9wcm9qZWN0cy9na2VybmVsLiAgCisKKyAgTk9URTogVGhpcyBkcml2ZXIgdXNlcyBtaWkgc3VwcG9ydCBmcm9tIHRoZSBrZXJuZWwuIEFzIGEgcmVzdWx0LCB3aGVuIAorICB0aGVyZSBpcyBubyBsaW5rLCBldGh0b29sIHdpbGwgcmVwb3J0IHNwZWVkL2R1cGxleCB0byBiZSAxMC9oYWxmLgorCisgIE5PVEU6IEV0aHRvb2wgMS42IG9ubHkgc3VwcG9ydHMgYSBsaW1pdGVkIHNldCBvZiBldGh0b29sIG9wdGlvbnMuIFN1cHBvcnQgCisgIGZvciBhIG1vcmUgY29tcGxldGUgZXRodG9vbCBmZWF0dXJlIHNldCBjYW4gYmUgZW5hYmxlZCBieSB1cGdyYWRpbmcgCisgIGV0aHRvb2wgdG8gZXRodG9vbC0xLjguMS4gCisKKyAgRW5hYmxpbmcgV2FrZSBvbiBMQU4qIChXb0wpCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBXb0wgaXMgcHJvdmlkZWQgdGhyb3VnaCB0aGUgRXRodG9vbCogdXRpbGl0eS4gRXRodG9vbCBpcyBpbmNsdWRlZCB3aXRoIFJlZCAKKyAgSGF0KiA4LjAuIEZvciBvdGhlciBMaW51eCBkaXN0cmlidXRpb25zLCBkb3dubG9hZCBhbmQgaW5zdGFsbCBFdGh0b29sIGZyb20gCisgIHRoZSBmb2xsb3dpbmcgd2Vic2l0ZTogaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9na2VybmVsLiAKKworICBGb3IgaW5zdHJ1Y3Rpb25zIG9uIGVuYWJsaW5nIFdvTCB3aXRoIEV0aHRvb2wsIHJlZmVyIHRvIHRoZSBFdGh0b29sIG1hbgorICBwYWdlLgorCisgIFdvTCB3aWxsIGJlIGVuYWJsZWQgb24gdGhlIHN5c3RlbSBkdXJpbmcgdGhlIG5leHQgc2h1dCBkb3duIG9yIHJlYm9vdC4gRm9yCisgIHRoaXMgZHJpdmVyIHZlcnNpb24sIGluIG9yZGVyIHRvIGVuYWJsZSBXb0wsIHRoZSBlMTAwIGRyaXZlciBtdXN0IGJlIAorICBsb2FkZWQgd2hlbiBzaHV0dGluZyBkb3duIG9yIHJlYm9vdGluZyB0aGUgc3lzdGVtLgorCisgIE5BUEkKKyAgLS0tLQorCisgIE5BUEkgKFJ4IHBvbGxpbmcgbW9kZSkgaXMgc3VwcG9ydGVkIGluIHRoZSBlMTAwIGRyaXZlci4KKworICBTZWUgd3d3LmN5YmVydXMuY2EvfmhhZGkvdXNlbml4LXBhcGVyLnRneiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBOQVBJLgorCitTdXBwb3J0Cis9PT09PT09CisKK0ZvciBnZW5lcmFsIGluZm9ybWF0aW9uLCBnbyB0byB0aGUgSW50ZWwgc3VwcG9ydCB3ZWJzaXRlIGF0OgorCisgICAgaHR0cDovL3N1cHBvcnQuaW50ZWwuY29tCisKK0lmIGFuIGlzc3VlIGlzIGlkZW50aWZpZWQgd2l0aCB0aGUgcmVsZWFzZWQgc291cmNlIGNvZGUgb24gdGhlIHN1cHBvcnRlZAora2VybmVsIHdpdGggYSBzdXBwb3J0ZWQgYWRhcHRlciwgZW1haWwgdGhlIHNwZWNpZmljIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gCit0aGUgaXNzdWUgdG8gbGludXgubmljc0BpbnRlbC5jb20uCisKKworTGljZW5zZQorPT09PT09PQorCitUaGlzIHNvZnR3YXJlIHByb2dyYW0gaXMgcmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIGEgbGljZW5zZSBhZ3JlZW1lbnQgCitiZXR3ZWVuIHlvdSAoJ0xpY2Vuc2VlJykgYW5kIEludGVsLiBEbyBub3QgdXNlIG9yIGxvYWQgdGhpcyBzb2Z0d2FyZSBvciBhbnkgCithc3NvY2lhdGVkIG1hdGVyaWFscyAoY29sbGVjdGl2ZWx5LCB0aGUgJ1NvZnR3YXJlJykgdW50aWwgeW91IGhhdmUgY2FyZWZ1bGx5IAorcmVhZCB0aGUgZnVsbCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgTElDRU5TRSBsb2NhdGVkIGluIHRoaXMgc29mdHdhcmUgCitwYWNrYWdlLiBCeSBsb2FkaW5nIG9yIHVzaW5nIHRoZSBTb2Z0d2FyZSwgeW91IGFncmVlIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIAorQWdyZWVtZW50LiBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBkbyBub3QgCitpbnN0YWxsIG9yIHVzZSB0aGUgU29mdHdhcmUuCisKKyogT3RoZXIgbmFtZXMgYW5kIGJyYW5kcyBtYXkgYmUgY2xhaW1lZCBhcyB0aGUgcHJvcGVydHkgb2Ygb3RoZXJzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2UxMDAwLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9lMTAwMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmViZDQwNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9lMTAwMC50eHQKQEAgLTAsMCArMSw0MDEgQEAKK0xpbnV4KiBCYXNlIERyaXZlciBmb3IgdGhlIEludGVsKFIpIFBSTy8xMDAwIEZhbWlseSBvZiBBZGFwdGVycworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05vdmVtYmVyIDE3LCAyMDA0CisKKworQ29udGVudHMKKz09PT09PT09CisKKy0gSW4gVGhpcyBSZWxlYXNlCistIElkZW50aWZ5aW5nIFlvdXIgQWRhcHRlcgorLSBDb21tYW5kIExpbmUgUGFyYW1ldGVycworLSBTcGVlZCBhbmQgRHVwbGV4IENvbmZpZ3VyYXRpb24KKy0gQWRkaXRpb25hbCBDb25maWd1cmF0aW9ucworLSBLbm93biBJc3N1ZXMKKy0gU3VwcG9ydAorCisKK0luIFRoaXMgUmVsZWFzZQorPT09PT09PT09PT09PT09CisKK1RoaXMgZmlsZSBkZXNjcmliZXMgdGhlIExpbnV4KiBCYXNlIERyaXZlciBmb3IgdGhlIEludGVsKFIpIFBSTy8xMDAwIEZhbWlseQorb2YgQWRhcHRlcnMsIHZlcnNpb24gNS54LnguICAKKworRm9yIHF1ZXN0aW9ucyByZWxhdGVkIHRvIGhhcmR3YXJlIHJlcXVpcmVtZW50cywgcmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gCitzdXBwbGllZCB3aXRoIHlvdXIgSW50ZWwgUFJPLzEwMDAgYWRhcHRlci4gQWxsIGhhcmR3YXJlIHJlcXVpcmVtZW50cyBsaXN0ZWQgCithcHBseSB0byB1c2Ugd2l0aCBMaW51eC4KKworTmF0aXZlIFZMQU5zIGFyZSBub3cgYXZhaWxhYmxlIHdpdGggc3VwcG9ydGVkIGtlcm5lbHMuCisKK0lkZW50aWZ5aW5nIFlvdXIgQWRhcHRlcgorPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpZGVudGlmeSB5b3VyIGFkYXB0ZXIsIGdvIHRvIHRoZSBBZGFwdGVyICYgCitEcml2ZXIgSUQgR3VpZGUgYXQ6CisKKyAgICBodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20vc3VwcG9ydC9uZXR3b3JrL2FkYXB0ZXIvcHJvMTAwLzIxMzk3Lmh0bQorCitGb3IgdGhlIGxhdGVzdCBJbnRlbCBuZXR3b3JrIGRyaXZlcnMgZm9yIExpbnV4LCByZWZlciB0byB0aGUgZm9sbG93aW5nIAord2Vic2l0ZS4gSW4gdGhlIHNlYXJjaCBmaWVsZCwgZW50ZXIgeW91ciBhZGFwdGVyIG5hbWUgb3IgdHlwZSwgb3IgdXNlIHRoZSAKK25ldHdvcmtpbmcgbGluayBvbiB0aGUgbGVmdCB0byBzZWFyY2ggZm9yIHlvdXIgYWRhcHRlcjoKKworICAgIGh0dHA6Ly9kb3dubG9hZGZpbmRlci5pbnRlbC5jb20vc2NyaXB0cy1kZi9zdXBwb3J0X2ludGVsLmFzcAorCitDb21tYW5kIExpbmUgUGFyYW1ldGVycworPT09PT09PT09PT09PT09PT09PT09PT0KKworSWYgdGhlIGRyaXZlciBpcyBidWlsdCBhcyBhIG1vZHVsZSwgdGhlICBmb2xsb3dpbmcgb3B0aW9uYWwgcGFyYW1ldGVycyBhcmUgCit1c2VkIGJ5IGVudGVyaW5nIHRoZW0gb24gdGhlIGNvbW1hbmQgbGluZSB3aXRoIHRoZSBtb2Rwcm9iZSBvciBpbnNtb2QgY29tbWFuZAordXNpbmcgdGhpcyBzeW50YXg6CisKKyAgICAgbW9kcHJvYmUgZTEwMDAgWzxvcHRpb24+PTxWQUwxPiw8VkFMMj4sLi4uXQorCisgICAgIGluc21vZCBlMTAwMCBbPG9wdGlvbj49PFZBTDE+LDxWQUwyPiwuLi5dIAorCitGb3IgZXhhbXBsZSwgd2l0aCB0d28gUFJPLzEwMDAgUENJIGFkYXB0ZXJzLCBlbnRlcmluZzoKKworICAgICBpbnNtb2QgZTEwMDAgVHhEZXNjcmlwdG9ycz04MCwxMjgKKworbG9hZHMgdGhlIGUxMDAwIGRyaXZlciB3aXRoIDgwIFRYIGRlc2NyaXB0b3JzIGZvciB0aGUgZmlyc3QgYWRhcHRlciBhbmQgMTI4IFRYIAorZGVzY3JpcHRvcnMgZm9yIHRoZSBzZWNvbmQgYWRhcHRlci4KKworVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGVhY2ggcGFyYW1ldGVyIGlzIGdlbmVyYWxseSB0aGUgcmVjb21tZW5kZWQgc2V0dGluZywKK3VubGVzcyBvdGhlcndpc2Ugbm90ZWQuIEFsc28sIGlmIHRoZSBkcml2ZXIgaXMgc3RhdGljYWxseSBidWlsdCBpbnRvIHRoZQora2VybmVsLCB0aGUgZHJpdmVyIGlzIGxvYWRlZCB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsIHRoZSBwYXJhbWV0ZXJzLgorRXRodG9vbCBjYW4gYmUgdXNlZCB0byBjaGFuZ2Ugc29tZSBvZiB0aGUgcGFyYW1ldGVycyBhdCBydW50aW1lLgorCisgICAgTk9URVM6IEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBBdXRvTmVnLCBEdXBsZXgsIGFuZCBTcGVlZAorICAgICAgICAgICBwYXJhbWV0ZXJzLCBzZWUgdGhlICJTcGVlZCBhbmQgRHVwbGV4IENvbmZpZ3VyYXRpb24iIHNlY3Rpb24gaW4gCisgICAgICAgICAgIHRoaXMgZG9jdW1lbnQuCisKKyAgICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEludGVycnVwdFRocm90dGxlUmF0ZSwgUnhJbnREZWxheSwgCisgICAgICAgICAgIFR4SW50RGVsYXksIFJ4QWJzSW50RGVsYXksIGFuZCBUeEFic0ludERlbGF5IHBhcmFtZXRlcnMsIHNlZSB0aGUgCisgICAgICAgICAgIGFwcGxpY2F0aW9uIG5vdGUgYXQ6CisgICAgICAgICAgIGh0dHA6Ly93d3cuaW50ZWwuY29tL2Rlc2lnbi9uZXR3b3JrL2FwcGxub3RzL2FwNDUwLmh0bQorCisgICAgICAgICAgIEEgZGVzY3JpcHRvciBkZXNjcmliZXMgYSBkYXRhIGJ1ZmZlciBhbmQgYXR0cmlidXRlcyByZWxhdGVkIHRvIHRoZSAKKyAgICAgICAgICAgZGF0YSBidWZmZXIuIFRoaXMgaW5mb3JtYXRpb24gaXMgYWNjZXNzZWQgYnkgdGhlIGhhcmR3YXJlLgorCitBdXRvTmVnIChhZGFwdGVycyB1c2luZyBjb3BwZXIgY29ubmVjdGlvbnMgb25seSkKK1ZhbGlkIFJhbmdlOiAweDAxLTB4MEYsIDB4MjAtMHgyRgorRGVmYXVsdCBWYWx1ZTogMHgyRgorICAgIFRoaXMgcGFyYW1ldGVyIGlzIGEgYml0IG1hc2sgdGhhdCBzcGVjaWZpZXMgd2hpY2ggc3BlZWQgYW5kIGR1cGxleAorICAgIHNldHRpbmdzIHRoZSBib2FyZCBhZHZlcnRpc2VzLiBXaGVuIHRoaXMgcGFyYW1ldGVyIGlzIHVzZWQsIHRoZSBTcGVlZCBhbmQKKyAgICBEdXBsZXggcGFyYW1ldGVycyBtdXN0IG5vdCBiZSBzcGVjaWZpZWQuCisgICAgTk9URTogUmVmZXIgdG8gdGhlIFNwZWVkIGFuZCBEdXBsZXggc2VjdGlvbiBvZiB0aGlzIHJlYWRtZSBmb3IgbW9yZSAKKyAgICAgICAgICBpbmZvcm1hdGlvbiBvbiB0aGUgQXV0b05lZyBwYXJhbWV0ZXIuICAKKworRHVwbGV4IChhZGFwdGVycyB1c2luZyBjb3BwZXIgY29ubmVjdGlvbnMgb25seSkKK1ZhbGlkIFJhbmdlOiAwLTIgKDA9YXV0by1uZWdvdGlhdGUsIDE9aGFsZiwgMj1mdWxsKQorRGVmYXVsdCBWYWx1ZTogMAorICAgIERlZmluZXMgdGhlIGRpcmVjdGlvbiBpbiB3aGljaCBkYXRhIGlzIGFsbG93ZWQgdG8gZmxvdy4gQ2FuIGJlIGVpdGhlciBvbmUgCisgICAgb3IgdHdvLWRpcmVjdGlvbmFsLiBJZiBib3RoIER1cGxleCBhbmQgdGhlIGxpbmsgcGFydG5lciBhcmUgc2V0IHRvIGF1dG8tCisgICAgbmVnb3RpYXRlLCB0aGUgYm9hcmQgYXV0by1kZXRlY3RzIHRoZSBjb3JyZWN0IGR1cGxleC4gSWYgdGhlIGxpbmsgcGFydG5lcgorICAgIGlzIGZvcmNlZCAoZWl0aGVyIGZ1bGwgb3IgaGFsZiksIER1cGxleCBkZWZhdWx0cyB0byBoYWxmLWR1cGxleC4KKworRmxvd0NvbnRyb2wKK1ZhbGlkIFJhbmdlOiAwLTMgKDA9bm9uZSwgMT1SeCBvbmx5LCAyPVR4IG9ubHksIDM9UngmVHgpCitEZWZhdWx0OiBSZWFkIGZsb3cgY29udHJvbCBzZXR0aW5ncyBmcm9tIHRoZSBFRVBST00KKyAgICBUaGlzIHBhcmFtZXRlciBjb250cm9scyB0aGUgYXV0b21hdGljIGdlbmVyYXRpb24oVHgpIGFuZCByZXNwb25zZShSeCkgdG8gCisgICAgRXRoZXJuZXQgUEFVU0UgZnJhbWVzLgorCitJbnRlcnJ1cHRUaHJvdHRsZVJhdGUKK1ZhbGlkIFJhbmdlOiAxMDAtMTAwMDAwICgwPW9mZiwgMT1keW5hbWljKQorRGVmYXVsdCBWYWx1ZTogODAwMAorICAgIFRoaXMgdmFsdWUgcmVwcmVzZW50cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgaW50ZXJydXB0cyBwZXIgc2Vjb25kIHRoZSAKKyAgICBjb250cm9sbGVyIGdlbmVyYXRlcy4gSW50ZXJydXB0VGhyb3R0bGVSYXRlIGlzIGFub3RoZXIgc2V0dGluZyB1c2VkIGluIAorICAgIGludGVycnVwdCBtb2RlcmF0aW9uLiBEeW5hbWljIG1vZGUgdXNlcyBhIGhldXJpc3RpYyBhbGdvcml0aG0gdG8gYWRqdXN0IAorICAgIEludGVycnVwdFRocm90dGxlUmF0ZSBiYXNlZCBvbiB0aGUgY3VycmVudCB0cmFmZmljIGxvYWQuCitVbi1zdXBwb3J0ZWQgQWRhcHRlcnM6IEludGVycnVwdFRocm90dGxlUmF0ZSBpcyBOT1Qgc3VwcG9ydGVkIGJ5IDgyNTQyLCA4MjU0MworICAgIG9yIDgyNTQ0LWJhc2VkIGFkYXB0ZXJzLgorCisgICAgTk9URTogSW50ZXJydXB0VGhyb3R0bGVSYXRlIHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aGUgVHhBYnNJbnREZWxheSBhbmQgCisgICAgICAgICAgUnhBYnNJbnREZWxheSBwYXJhbWV0ZXJzLiBJbiBvdGhlciB3b3JkcywgbWluaW1pemluZyB0aGUgcmVjZWl2ZSAKKyAgICAgICAgICBhbmQvb3IgdHJhbnNtaXQgYWJzb2x1dGUgZGVsYXlzIGRvZXMgbm90IGZvcmNlIHRoZSBjb250cm9sbGVyIHRvIAorICAgICAgICAgIGdlbmVyYXRlIG1vcmUgaW50ZXJydXB0cyB0aGFuIHdoYXQgdGhlIEludGVycnVwdCBUaHJvdHRsZSBSYXRlIAorICAgICAgICAgIGFsbG93cy4KKyAgICBDQVVUSU9OOiBJZiB5b3UgYXJlIHVzaW5nIHRoZSBJbnRlbCBQUk8vMTAwMCBDVCBOZXR3b3JrIENvbm5lY3Rpb24gCisgICAgICAgICAgICAgKGNvbnRyb2xsZXIgODI1NDcpLCBzZXR0aW5nIEludGVycnVwdFRocm90dGxlUmF0ZSB0byBhIHZhbHVlIAorICAgICAgICAgICAgIGdyZWF0ZXIgdGhhbiA3NSwwMDAsIG1heSBoYW5nIChzdG9wIHRyYW5zbWl0dGluZykgYWRhcHRlcnMgdW5kZXIgCisgICAgICAgICAgICAgY2VydGFpbiBuZXR3b3JrIGNvbmRpdGlvbnMuIElmIHRoaXMgb2NjdXJzIGEgTkVUREVWIFdBVENIRE9HIAorICAgICAgICAgICAgIG1lc3NhZ2UgaXMgbG9nZ2VkIGluIHRoZSBzeXN0ZW0gZXZlbnQgbG9nLiBJbiBhZGRpdGlvbiwgdGhlIAorICAgICAgICAgICAgIGNvbnRyb2xsZXIgaXMgYXV0b21hdGljYWxseSByZXNldCwgcmVzdG9yaW5nIHRoZSBuZXR3b3JrIAorICAgICAgICAgICAgIGNvbm5lY3Rpb24uIFRvIGVsaW1pbmF0ZSB0aGUgcG90ZW50aWFsIGZvciB0aGUgaGFuZywgZW5zdXJlIAorICAgICAgICAgICAgIHRoYXQgSW50ZXJydXB0VGhyb3R0bGVSYXRlIGlzIHNldCBubyBncmVhdGVyIHRoYW4gNzUsMDAwIGFuZCBpcyAKKyAgICAgICAgICAgICBub3Qgc2V0IHRvIDAuCisgICAgTk9URTogV2hlbiBlMTAwMCBpcyBsb2FkZWQgd2l0aCBkZWZhdWx0IHNldHRpbmdzIGFuZCBtdWx0aXBsZSBhZGFwdGVycyBhcmUgCisgICAgICAgICAgaW4gdXNlIHNpbXVsdGFuZW91c2x5LCB0aGUgQ1BVIHV0aWxpemF0aW9uIG1heSBpbmNyZWFzZSBub24tbGluZWFybHkuIAorICAgICAgICAgIEluIG9yZGVyIHRvIGxpbWl0IHRoZSBDUFUgdXRpbGl6YXRpb24gd2l0aG91dCBpbXBhY3RpbmcgdGhlIG92ZXJhbGwgCisgICAgICAgICAgdGhyb3VnaHB1dCwgd2UgcmVjb21tZW5kIHRoYXQgeW91IGxvYWQgdGhlIGRyaXZlciBhcyBmb2xsb3dzOgorCisgICAgICAgICAgICAgIGluc21vZCBlMTAwMC5vIEludGVycnVwdFRocm90dGxlUmF0ZT0zMDAwLDMwMDAsMzAwMAorCisgICAgICAgICAgVGhpcyBzZXRzIHRoZSBJbnRlcnJ1cHRUaHJvdHRsZVJhdGUgdG8gMzAwMCBpbnRlcnJ1cHRzL3NlYyBmb3IgdGhlIAorICAgICAgICAgIGZpcnN0LCBzZWNvbmQsIGFuZCB0aGlyZCBpbnN0YW5jZXMgb2YgdGhlIGRyaXZlci4gVGhlIHJhbmdlIG9mIDIwMDAgdG8gCisgICAgICAgICAgMzAwMCBpbnRlcnJ1cHRzIHBlciBzZWNvbmQgd29ya3Mgb24gYSBtYWpvcml0eSBvZiBzeXN0ZW1zIGFuZCBpcyBhIAorICAgICAgICAgIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGJ1dCB0aGUgb3B0aW1hbCB2YWx1ZSB3aWxsIGJlIHBsYXRmb3JtLXNwZWNpZmljLiAKKyAgICAgICAgICBJZiBDUFUgdXRpbGl6YXRpb24gaXMgbm90IGEgY29uY2VybiwgdXNlIFJYX1BPTExJTkcgKE5BUEkpIGFuZCBkZWZhdWx0IAorICAgICAgICAgIGRyaXZlciBzZXR0aW5ncy4KKworUnhEZXNjcmlwdG9ycworVmFsaWQgUmFuZ2U6IDgwLTI1NiBmb3IgODI1NDIgYW5kIDgyNTQzLWJhc2VkIGFkYXB0ZXJzCisgICAgICAgICAgICAgODAtNDA5NiBmb3IgYWxsIG90aGVyIHN1cHBvcnRlZCBhZGFwdGVycworRGVmYXVsdCBWYWx1ZTogMjU2CisgICAgVGhpcyB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIHJlY2VpdmUgZGVzY3JpcHRvcnMgYWxsb2NhdGVkIGJ5IHRoZSBkcml2ZXIuIAorICAgIEluY3JlYXNpbmcgdGhpcyB2YWx1ZSBhbGxvd3MgdGhlIGRyaXZlciB0byBidWZmZXIgbW9yZSBpbmNvbWluZyBwYWNrZXRzLiAKKyAgICBFYWNoIGRlc2NyaXB0b3IgaXMgMTYgYnl0ZXMuICBBIHJlY2VpdmUgYnVmZmVyIGlzIGFsbG9jYXRlZCBmb3IgZWFjaAorICAgIGRlc2NyaXB0b3IgYW5kIGNhbiBlaXRoZXIgYmUgMjA0OCBvciA0MDk2IGJ5dGVzIGxvbmcsIGRlcGVuZGluZyBvbiB0aGUgTVRVIAorCisgICAgc2V0dGluZy4gQW4gaW5jb21pbmcgcGFja2V0IGNhbiBzcGFuIG9uZSBvciBtb3JlIHJlY2VpdmUgZGVzY3JpcHRvcnMuIAorICAgIFRoZSBtYXhpbXVtIE1UVSBzaXplIGlzIDE2MTEwLgorCisgICAgTk9URTogTVRVIGRlc2lnbmF0ZXMgdGhlIGZyYW1lIHNpemUuIEl0IG9ubHkgbmVlZHMgdG8gYmUgc2V0IGZvciBKdW1ibyAKKyAgICAgICAgICBGcmFtZXMuCisgICAgTk9URTogRGVwZW5kaW5nIG9uIHRoZSBhdmFpbGFibGUgc3lzdGVtIHJlc291cmNlcywgdGhlIHJlcXVlc3QgZm9yIGEKKyAgICBoaWdoZXIgbnVtYmVyIG9mIHJlY2VpdmUgZGVzY3JpcHRvcnMgbWF5IGJlIGRlbmllZC4gIEluIHRoaXMgY2FzZSwKKyAgICB1c2UgYSBsb3dlciBudW1iZXIuCisKK1J4SW50RGVsYXkKK1ZhbGlkIFJhbmdlOiAwLTY1NTM1ICgwPW9mZikKK0RlZmF1bHQgVmFsdWU6IDAKKyAgICBUaGlzIHZhbHVlIGRlbGF5cyB0aGUgZ2VuZXJhdGlvbiBvZiByZWNlaXZlIGludGVycnVwdHMgaW4gdW5pdHMgb2YgMS4wMjQgCisgICAgbWljcm9zZWNvbmRzLiAgUmVjZWl2ZSBpbnRlcnJ1cHQgcmVkdWN0aW9uIGNhbiBpbXByb3ZlIENQVSBlZmZpY2llbmN5IGlmIAorICAgIHByb3Blcmx5IHR1bmVkIGZvciBzcGVjaWZpYyBuZXR3b3JrIHRyYWZmaWMuIEluY3JlYXNpbmcgdGhpcyB2YWx1ZSBhZGRzIAorICAgIGV4dHJhIGxhdGVuY3kgdG8gZnJhbWUgcmVjZXB0aW9uIGFuZCBjYW4gZW5kIHVwIGRlY3JlYXNpbmcgdGhlIHRocm91Z2hwdXQgCisgICAgb2YgVENQIHRyYWZmaWMuIElmIHRoZSBzeXN0ZW0gaXMgcmVwb3J0aW5nIGRyb3BwZWQgcmVjZWl2ZXMsIHRoaXMgdmFsdWUgCisgICAgbWF5IGJlIHNldCB0b28gaGlnaCwgY2F1c2luZyB0aGUgZHJpdmVyIHRvIHJ1biBvdXQgb2YgYXZhaWxhYmxlIHJlY2VpdmUgCisgICAgZGVzY3JpcHRvcnMuCisKKyAgICBDQVVUSU9OOiBXaGVuIHNldHRpbmcgUnhJbnREZWxheSB0byBhIHZhbHVlIG90aGVyIHRoYW4gMCwgYWRhcHRlcnMgbWF5IAorICAgICAgICAgICAgIGhhbmcgKHN0b3AgdHJhbnNtaXR0aW5nKSB1bmRlciBjZXJ0YWluIG5ldHdvcmsgY29uZGl0aW9ucy4gSWYgCisgICAgICAgICAgICAgdGhpcyBvY2N1cnMgYSBORVRERVYgV0FUQ0hET0cgbWVzc2FnZSBpcyBsb2dnZWQgaW4gdGhlIHN5c3RlbQorICAgICAgICAgICAgIGV2ZW50IGxvZy4gSW4gYWRkaXRpb24sIHRoZSBjb250cm9sbGVyIGlzIGF1dG9tYXRpY2FsbHkgcmVzZXQsIAorICAgICAgICAgICAgIHJlc3RvcmluZyB0aGUgbmV0d29yayBjb25uZWN0aW9uLiBUbyBlbGltaW5hdGUgdGhlIHBvdGVudGlhbCBmb3IKKyAgICAgICAgICAgICB0aGUgaGFuZyBlbnN1cmUgdGhhdCBSeEludERlbGF5IGlzIHNldCB0byAwLgorCitSeEFic0ludERlbGF5ICg4MjU0MCwgODI1NDUgYW5kIGxhdGVyIGFkYXB0ZXJzIG9ubHkpCitWYWxpZCBSYW5nZTogMC02NTUzNSAoMD1vZmYpCitEZWZhdWx0IFZhbHVlOiAxMjgKKyAgICBUaGlzIHZhbHVlLCBpbiB1bml0cyBvZiAxLjAyNCBtaWNyb3NlY29uZHMsIGxpbWl0cyB0aGUgZGVsYXkgaW4gd2hpY2ggYSAKKyAgICByZWNlaXZlIGludGVycnVwdCBpcyBnZW5lcmF0ZWQuIFVzZWZ1bCBvbmx5IGlmIFJ4SW50RGVsYXkgaXMgbm9uLXplcm8sIAorICAgIHRoaXMgdmFsdWUgZW5zdXJlcyB0aGF0IGFuIGludGVycnVwdCBpcyBnZW5lcmF0ZWQgYWZ0ZXIgdGhlIGluaXRpYWwgCisgICAgcGFja2V0IGlzIHJlY2VpdmVkIHdpdGhpbiB0aGUgc2V0IGFtb3VudCBvZiB0aW1lLiAgUHJvcGVyIHR1bmluZywKKyAgICBhbG9uZyB3aXRoIFJ4SW50RGVsYXksIG1heSBpbXByb3ZlIHRyYWZmaWMgdGhyb3VnaHB1dCBpbiBzcGVjaWZpYyBuZXR3b3JrCisgICAgY29uZGl0aW9ucy4KKworU3BlZWQgKGFkYXB0ZXJzIHVzaW5nIGNvcHBlciBjb25uZWN0aW9ucyBvbmx5KQorVmFsaWQgU2V0dGluZ3M6IDAsIDEwLCAxMDAsIDEwMDAKK0RlZmF1bHQgVmFsdWU6IDAgKGF1dG8tbmVnb3RpYXRlIGF0IGFsbCBzdXBwb3J0ZWQgc3BlZWRzKQorICAgIFNwZWVkIGZvcmNlcyB0aGUgbGluZSBzcGVlZCB0byB0aGUgc3BlY2lmaWVkIHZhbHVlIGluIG1lZ2FiaXRzIHBlciBzZWNvbmQKKyAgICAoTWJwcykuIElmIHRoaXMgcGFyYW1ldGVyIGlzIG5vdCBzcGVjaWZpZWQgb3IgaXMgc2V0IHRvIDAgYW5kIHRoZSBsaW5rIAorICAgIHBhcnRuZXIgaXMgc2V0IHRvIGF1dG8tbmVnb3RpYXRlLCB0aGUgYm9hcmQgd2lsbCBhdXRvLWRldGVjdCB0aGUgY29ycmVjdCAKKyAgICBzcGVlZC4gRHVwbGV4IHNob3VsZCBhbHNvIGJlIHNldCB3aGVuIFNwZWVkIGlzIHNldCB0byBlaXRoZXIgMTAgb3IgMTAwLgorCitUeERlc2NyaXB0b3JzCitWYWxpZCBSYW5nZTogODAtMjU2IGZvciA4MjU0MiBhbmQgODI1NDMtYmFzZWQgYWRhcHRlcnMKKyAgICAgICAgICAgICA4MC00MDk2IGZvciBhbGwgb3RoZXIgc3VwcG9ydGVkIGFkYXB0ZXJzCitEZWZhdWx0IFZhbHVlOiAyNTYKKyAgICBUaGlzIHZhbHVlIGlzIHRoZSBudW1iZXIgb2YgdHJhbnNtaXQgZGVzY3JpcHRvcnMgYWxsb2NhdGVkIGJ5IHRoZSBkcml2ZXIuCisgICAgSW5jcmVhc2luZyB0aGlzIHZhbHVlIGFsbG93cyB0aGUgZHJpdmVyIHRvIHF1ZXVlIG1vcmUgdHJhbnNtaXRzLiBFYWNoIAorICAgIGRlc2NyaXB0b3IgaXMgMTYgYnl0ZXMuCisKKyAgICBOT1RFOiBEZXBlbmRpbmcgb24gdGhlIGF2YWlsYWJsZSBzeXN0ZW0gcmVzb3VyY2VzLCB0aGUgcmVxdWVzdCBmb3IgYQorICAgIGhpZ2hlciBudW1iZXIgb2YgdHJhbnNtaXQgZGVzY3JpcHRvcnMgbWF5IGJlIGRlbmllZC4gIEluIHRoaXMgY2FzZSwKKyAgICB1c2UgYSBsb3dlciBudW1iZXIuCisKK1R4SW50RGVsYXkKK1ZhbGlkIFJhbmdlOiAwLTY1NTM1ICgwPW9mZikKK0RlZmF1bHQgVmFsdWU6IDY0CisgICAgVGhpcyB2YWx1ZSBkZWxheXMgdGhlIGdlbmVyYXRpb24gb2YgdHJhbnNtaXQgaW50ZXJydXB0cyBpbiB1bml0cyBvZiAKKyAgICAxLjAyNCBtaWNyb3NlY29uZHMuIFRyYW5zbWl0IGludGVycnVwdCByZWR1Y3Rpb24gY2FuIGltcHJvdmUgQ1BVCisgICAgZWZmaWNpZW5jeSBpZiBwcm9wZXJseSB0dW5lZCBmb3Igc3BlY2lmaWMgbmV0d29yayB0cmFmZmljLiBJZiB0aGUKKyAgICBzeXN0ZW0gaXMgcmVwb3J0aW5nIGRyb3BwZWQgdHJhbnNtaXRzLCB0aGlzIHZhbHVlIG1heSBiZSBzZXQgdG9vIGhpZ2gKKyAgICBjYXVzaW5nIHRoZSBkcml2ZXIgdG8gcnVuIG91dCBvZiBhdmFpbGFibGUgdHJhbnNtaXQgZGVzY3JpcHRvcnMuCisKK1R4QWJzSW50RGVsYXkgKDgyNTQwLCA4MjU0NSBhbmQgbGF0ZXIgYWRhcHRlcnMgb25seSkKK1ZhbGlkIFJhbmdlOiAwLTY1NTM1ICgwPW9mZikKK0RlZmF1bHQgVmFsdWU6IDY0CisgICAgVGhpcyB2YWx1ZSwgaW4gdW5pdHMgb2YgMS4wMjQgbWljcm9zZWNvbmRzLCBsaW1pdHMgdGhlIGRlbGF5IGluIHdoaWNoIGEgCisgICAgdHJhbnNtaXQgaW50ZXJydXB0IGlzIGdlbmVyYXRlZC4gVXNlZnVsIG9ubHkgaWYgVHhJbnREZWxheSBpcyBub24temVybywgCisgICAgdGhpcyB2YWx1ZSBlbnN1cmVzIHRoYXQgYW4gaW50ZXJydXB0IGlzIGdlbmVyYXRlZCBhZnRlciB0aGUgaW5pdGlhbCAKKyAgICBwYWNrZXQgaXMgc2VudCBvbiB0aGUgd2lyZSB3aXRoaW4gdGhlIHNldCBhbW91bnQgb2YgdGltZS4gIFByb3BlciB0dW5pbmcsCisgICAgYWxvbmcgd2l0aCBUeEludERlbGF5LCBtYXkgaW1wcm92ZSB0cmFmZmljIHRocm91Z2hwdXQgaW4gc3BlY2lmaWMgCisgICAgbmV0d29yayBjb25kaXRpb25zLgorCitYc3VtUlggKG5vdCBhdmFpbGFibGUgb24gdGhlIDgyNTQyLWJhc2VkIGFkYXB0ZXIpCitWYWxpZCBSYW5nZTogMC0xCitEZWZhdWx0IFZhbHVlOiAxCisgICAgQSB2YWx1ZSBvZiAnMScgaW5kaWNhdGVzIHRoYXQgdGhlIGRyaXZlciBzaG91bGQgZW5hYmxlIElQIGNoZWNrc3VtCisgICAgb2ZmbG9hZCBmb3IgcmVjZWl2ZWQgcGFja2V0cyAoYm90aCBVRFAgYW5kIFRDUCkgdG8gdGhlIGFkYXB0ZXIgaGFyZHdhcmUuCisKK1NwZWVkIGFuZCBEdXBsZXggQ29uZmlndXJhdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RocmVlIGtleXdvcmRzIGFyZSB1c2VkIHRvIGNvbnRyb2wgdGhlIHNwZWVkIGFuZCBkdXBsZXggY29uZmlndXJhdGlvbi4gVGhlc2UgCitrZXl3b3JkcyBhcmUgU3BlZWQsIER1cGxleCwgYW5kIEF1dG9OZWcuCisKK0lmIHRoZSBib2FyZCB1c2VzIGEgZmliZXIgaW50ZXJmYWNlLCB0aGVzZSBrZXl3b3JkcyBhcmUgaWdub3JlZCwgYW5kIHRoZSAKK2ZpYmVyIGludGVyZmFjZSBib2FyZCBvbmx5IGxpbmtzIGF0IDEwMDAgTWJwcyBmdWxsLWR1cGxleC4KKworRm9yIGNvcHBlci1iYXNlZCBib2FyZHMsIHRoZSBrZXl3b3JkcyBpbnRlcmFjdCBhcyBmb2xsb3dzOgorCisgIFRoZSBkZWZhdWx0IG9wZXJhdGlvbiBpcyBhdXRvLW5lZ290aWF0ZS4gVGhlIGJvYXJkIGFkdmVydGlzZXMgYWxsIHN1cHBvcnRlZAorICBzcGVlZCBhbmQgZHVwbGV4IGNvbWJpbmF0aW9ucywgYW5kIGl0IGxpbmtzIGF0IHRoZSBoaWdoZXN0IGNvbW1vbiBzcGVlZCBhbmQKKyAgZHVwbGV4IG1vZGUgSUYgdGhlIGxpbmsgcGFydG5lciBpcyBzZXQgdG8gYXV0by1uZWdvdGlhdGUuCisKKyAgSWYgU3BlZWQgPSAxMDAwLCBsaW1pdGVkIGF1dG8tbmVnb3RpYXRpb24gaXMgZW5hYmxlZCBhbmQgb25seSAxMDAwIE1icHMgaXMKKyAgYWR2ZXJ0aXNlZCAoVGhlIDEwMDBCYXNlVCBzcGVjIHJlcXVpcmVzIGF1dG8tbmVnb3RpYXRpb24uKQorCisgIElmIFNwZWVkID0gMTAgb3IgMTAwLCB0aGVuIGJvdGggU3BlZWQgYW5kIER1cGxleCBzaG91bGQgYmUgc2V0LiBBdXRvLQorICBuZWdvdGlhdGlvbiBpcyBkaXNhYmxlZCwgYW5kIHRoZSBBdXRvTmVnIHBhcmFtZXRlciBpcyBpZ25vcmVkLiBQYXJ0bmVyIFNIT1VMRAorICBhbHNvIGJlIGZvcmNlZC4KKworVGhlIEF1dG9OZWcgcGFyYW1ldGVyIGlzIHVzZWQgd2hlbiBtb3JlIGNvbnRyb2wgaXMgcmVxdWlyZWQgb3ZlciB0aGUgYXV0by0KK25lZ290aWF0aW9uIHByb2Nlc3MuIFdoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgdXNlZCwgU3BlZWQgYW5kIER1cGxleCBwYXJhbWV0ZXJzIAorbXVzdCBub3QgYmUgc3BlY2lmaWVkLiBUaGUgZm9sbG93aW5nIHRhYmxlIGRlc2NyaWJlcyBzdXBwb3J0ZWQgdmFsdWVzIGZvciB0aGUgCitBdXRvTmVnIHBhcmFtZXRlcjoKKworU3BlZWQgKE1icHMpICAgCQkgMTAwMCAgICAgIDEwMCAgICAxMDAgICAgMTAgICAgIDEwCitEdXBsZXggICAgICAgICAgICAgICAgICAgRnVsbCAgICAgIEZ1bGwgICBIYWxmICAgRnVsbCAgIEhhbGYKK1ZhbHVlIChpbiBiYXNlIDE2KSAgICAgICAweDIwICAgICAgMHgwOCAgIDB4MDQgICAweDAyICAgMHgwMQorCitFeGFtcGxlOiBpbnNtb2QgZTEwMDAgQXV0b05lZz0weDAzLCBsb2FkcyBlMTAwMCBhbmQgc3BlY2lmaWVzICgxMCBmdWxsIGR1cGxleCwgCisxMCBoYWxmIGR1cGxleCkgZm9yIG5lZ290aWF0aW9uIHdpdGggdGhlIHBlZXIuCisKK05vdGUgdGhhdCBzZXR0aW5nIEF1dG9OZWcgZG9lcyBub3QgZ3VhcmFudGVlIHRoYXQgdGhlIGJvYXJkIHdpbGwgbGluayBhdCB0aGUgCitoaWdoZXN0IHNwZWNpZmllZCBzcGVlZCBvciBkdXBsZXggbW9kZSwgYnV0IHRoZSBib2FyZCB3aWxsIGxpbmsgYXQgdGhlIAoraGlnaGVzdCBwb3NzaWJsZSBzcGVlZC9kdXBsZXggb2YgdGhlIGxpbmsgcGFydG5lciBJRiB0aGUgbGluayBwYXJ0bmVyIGlzIGFsc28KK3NldCB0byBhdXRvLW5lZ290aWF0ZS4gSWYgdGhlIGxpbmsgcGFydG5lciBpcyBmb3JjZWQgc3BlZWQvZHVwbGV4LCB0aGUgCithZGFwdGVyIE1VU1QgYmUgZm9yY2VkIHRvIHRoZSBzYW1lIHNwZWVkL2R1cGxleC4KKworCitBZGRpdGlvbmFsIENvbmZpZ3VyYXRpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgQ29uZmlndXJpbmcgdGhlIERyaXZlciBvbiBEaWZmZXJlbnQgRGlzdHJpYnV0aW9ucworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgQ29uZmlndXJpbmcgYSBuZXR3b3JrIGRyaXZlciB0byBsb2FkIHByb3Blcmx5IHdoZW4gdGhlIHN5c3RlbSBpcyBzdGFydGVkIGlzCisgIGRpc3RyaWJ1dGlvbiBkZXBlbmRlbnQuIFR5cGljYWxseSwgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VzcyBpbnZvbHZlcyBhZGRpbmcKKyAgYW4gYWxpYXMgbGluZSB0byAvZXRjL21vZHVsZXMuY29uZiBhcyB3ZWxsIGFzIGVkaXRpbmcgb3RoZXIgc3lzdGVtIHN0YXJ0dXAgCisgIHNjcmlwdHMgYW5kL29yIGNvbmZpZ3VyYXRpb24gZmlsZXMuIE1hbnkgcG9wdWxhciBMaW51eCBkaXN0cmlidXRpb25zIHNoaXAgCisgIHdpdGggdG9vbHMgdG8gbWFrZSB0aGVzZSBjaGFuZ2VzIGZvciB5b3UuIFRvIGxlYXJuIHRoZSBwcm9wZXIgd2F5IHRvIAorICBjb25maWd1cmUgYSBuZXR3b3JrIGRldmljZSBmb3IgeW91ciBzeXN0ZW0sIHJlZmVyIHRvIHlvdXIgZGlzdHJpYnV0aW9uIAorICBkb2N1bWVudGF0aW9uLiBJZiBkdXJpbmcgdGhpcyBwcm9jZXNzIHlvdSBhcmUgYXNrZWQgZm9yIHRoZSBkcml2ZXIgb3IgbW9kdWxlIAorICBuYW1lLCB0aGUgbmFtZSBmb3IgdGhlIExpbnV4IEJhc2UgRHJpdmVyIGZvciB0aGUgSW50ZWwgUFJPLzEwMDAgRmFtaWx5IG9mIAorICBBZGFwdGVycyBpcyBlMTAwMC4KKworICBBcyBhbiBleGFtcGxlLCBpZiB5b3UgaW5zdGFsbCB0aGUgZTEwMDAgZHJpdmVyIGZvciB0d28gUFJPLzEwMDAgYWRhcHRlcnMgCisgIChldGgwIGFuZCBldGgxKSBhbmQgc2V0IHRoZSBzcGVlZCBhbmQgZHVwbGV4IHRvIDEwZnVsbCBhbmQgMTAwaGFsZiwgYWRkIHRoZSAKKyAgZm9sbG93aW5nIHRvIG1vZHVsZXMuY29uZjoKKworICAgICAgIGFsaWFzIGV0aDAgZTEwMDAKKyAgICAgICBhbGlhcyBldGgxIGUxMDAwCisgICAgICAgb3B0aW9ucyBlMTAwMCBTcGVlZD0xMCwxMDAgRHVwbGV4PTIsMQorCisgIFZpZXdpbmcgTGluayBNZXNzYWdlcworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBMaW5rIG1lc3NhZ2VzIHdpbGwgbm90IGJlIGRpc3BsYXllZCB0byB0aGUgY29uc29sZSBpZiB0aGUgZGlzdHJpYnV0aW9uIGlzIAorICByZXN0cmljdGluZyBzeXN0ZW0gbWVzc2FnZXMuIEluIG9yZGVyIHRvIHNlZSBuZXR3b3JrIGRyaXZlciBsaW5rIG1lc3NhZ2VzIG9uIAorICB5b3VyIGNvbnNvbGUsIHNldCBkbWVzZyB0byBlaWdodCBieSBlbnRlcmluZyB0aGUgZm9sbG93aW5nOgorCisgICAgICAgZG1lc2cgLW4gOAorCisgIE5PVEU6IFRoaXMgc2V0dGluZyBpcyBub3Qgc2F2ZWQgYWNyb3NzIHJlYm9vdHMuCisKKyAgSnVtYm8gRnJhbWVzCisgIC0tLS0tLS0tLS0tLQorCisgIFRoZSBkcml2ZXIgc3VwcG9ydHMgSnVtYm8gRnJhbWVzIGZvciBhbGwgYWRhcHRlcnMgZXhjZXB0IDgyNTQyLWJhc2VkIAorICBhZGFwdGVycy4gSnVtYm8gRnJhbWVzIHN1cHBvcnQgaXMgZW5hYmxlZCBieSBjaGFuZ2luZyB0aGUgTVRVIHRvIGEgdmFsdWUgCisgIGxhcmdlciB0aGFuIHRoZSBkZWZhdWx0IG9mIDE1MDAuIFVzZSB0aGUgaWZjb25maWcgY29tbWFuZCB0byBpbmNyZWFzZSB0aGUgCisgIE1UVSBzaXplLiBGb3IgZXhhbXBsZToKKworICAgICAgICBpZmNvbmZpZyBldGh4IG10dSA5MDAwIHVwCisKKyAgVGhlIG1heGltdW0gTVRVIHNldHRpbmcgZm9yIEp1bWJvIEZyYW1lcyBpcyAxNjExMC4gVGhpcyB2YWx1ZSBjb2luY2lkZXMgCisgIHdpdGggdGhlIG1heGltdW0gSnVtYm8gRnJhbWVzIHNpemUgb2YgMTYxMjguCisKKyAgTk9URTogSnVtYm8gRnJhbWVzIGFyZSBzdXBwb3J0ZWQgYXQgMTAwMCBNYnBzIG9ubHkuIFVzaW5nIEp1bWJvIEZyYW1lcyBhdCAKKyAgMTAgb3IgMTAwIE1icHMgbWF5IHJlc3VsdCBpbiBwb29yIHBlcmZvcm1hbmNlIG9yIGxvc3Mgb2YgbGluay4KKworCisgIE5PVEU6IE1UVSBkZXNpZ25hdGVzIHRoZSBmcmFtZSBzaXplLiBUbyBlbmFibGUgSnVtYm8gRnJhbWVzLCBpbmNyZWFzZSB0aGUKKyAgTVRVIHNpemUgb24gdGhlIGludGVyZmFjZSBiZXlvbmQgMTUwMC4KKworICBFdGh0b29sCisgIC0tLS0tLS0KKworICBUaGUgZHJpdmVyIHV0aWxpemVzIHRoZSBldGh0b29sIGludGVyZmFjZSBmb3IgZHJpdmVyIGNvbmZpZ3VyYXRpb24gYW5kCisgIGRpYWdub3N0aWNzLCBhcyB3ZWxsIGFzIGRpc3BsYXlpbmcgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24uICBFdGh0b29sCisgIHZlcnNpb24gMS42IG9yIGxhdGVyIGlzIHJlcXVpcmVkIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkuCisKKyAgVGhlIGxhdGVzdCByZWxlYXNlIG9mIGV0aHRvb2wgY2FuIGJlIGZvdW5kIGZyb20KKyAgaHR0cDovL3NmLm5ldC9wcm9qZWN0cy9na2VybmVsLiAgCisKKyAgTk9URTogRXRodG9vbCAxLjYgb25seSBzdXBwb3J0cyBhIGxpbWl0ZWQgc2V0IG9mIGV0aHRvb2wgb3B0aW9ucy4gU3VwcG9ydCAKKyAgZm9yIGEgbW9yZSBjb21wbGV0ZSBldGh0b29sIGZlYXR1cmUgc2V0IGNhbiBiZSBlbmFibGVkIGJ5IHVwZ3JhZGluZyAKKyAgZXRodG9vbCB0byBldGh0b29sLTEuOC4xLiAKKworICBFbmFibGluZyBXYWtlIG9uIExBTiogKFdvTCkKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgV29MIGlzIGNvbmZpZ3VyZWQgdGhyb3VnaCB0aGUgRXRodG9vbCogdXRpbGl0eS4gRXRodG9vbCBpcyBpbmNsdWRlZCB3aXRoCisgIGFsbCB2ZXJzaW9ucyBvZiBSZWQgSGF0IGFmdGVyIFJlZCBIYXQgNy4yLiBGb3Igb3RoZXIgTGludXggZGlzdHJpYnV0aW9ucywgCisgIGRvd25sb2FkIGFuZCBpbnN0YWxsIEV0aHRvb2wgZnJvbSB0aGUgZm9sbG93aW5nIHdlYnNpdGU6IAorICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2drZXJuZWwuCisKKyAgRm9yIGluc3RydWN0aW9ucyBvbiBlbmFibGluZyBXb0wgd2l0aCBFdGh0b29sLCByZWZlciB0byB0aGUgd2Vic2l0ZSBsaXN0ZWQgCisgIGFib3ZlLgorCisgIFdvTCB3aWxsIGJlIGVuYWJsZWQgb24gdGhlIHN5c3RlbSBkdXJpbmcgdGhlIG5leHQgc2h1dCBkb3duIG9yIHJlYm9vdC4gCisgIEZvciB0aGlzIGRyaXZlciB2ZXJzaW9uLCBpbiBvcmRlciB0byBlbmFibGUgV29MLCB0aGUgZTEwMDAgZHJpdmVyIG11c3QgYmUgCisgIGxvYWRlZCB3aGVuIHNodXR0aW5nIGRvd24gb3IgcmVib290aW5nIHRoZSBzeXN0ZW0uCisKKyAgTkFQSQorICAtLS0tCisKKyAgTkFQSSAoUnggcG9sbGluZyBtb2RlKSBpcyBzdXBwb3J0ZWQgaW4gdGhlIGUxMDAwIGRyaXZlci4gTkFQSSBpcyBlbmFibGVkCisgIG9yIGRpc2FibGVkIGJhc2VkIG9uIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBrZXJuZWwuIAorCisgIFNlZSB3d3cuY3liZXJ1cy5jYS9+aGFkaS91c2VuaXgtcGFwZXIudGd6IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIE5BUEkuCisKKworS25vd24gSXNzdWVzCis9PT09PT09PT09PT0KKworICBKdW1ibyBGcmFtZXMgU3lzdGVtIFJlcXVpcmVtZW50CisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcyBoYXZlIGJlZW4gb2JzZXJ2ZWQgb24gTGludXggc3lzdGVtcyB3aXRoIDY0IE1CIAorICBvZiBSQU0gb3IgbGVzcyB0aGF0IGFyZSBydW5uaW5nIEp1bWJvIEZyYW1lcy4gSWYgeW91IGFyZSB1c2luZyBKdW1ibyBGcmFtZXMsCisgIHlvdXIgc3lzdGVtIG1heSByZXF1aXJlIG1vcmUgdGhhbiB0aGUgYWR2ZXJ0aXNlZCBtaW5pbXVtIHJlcXVpcmVtZW50IG9mIDY0IE1CCisgIG9mIHN5c3RlbSBtZW1vcnkuCisKKworU3VwcG9ydAorPT09PT09PQorCitGb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiwgZ28gdG8gdGhlIEludGVsIHN1cHBvcnQgd2Vic2l0ZSBhdDoKKworICAgIGh0dHA6Ly9zdXBwb3J0LmludGVsLmNvbQorCitJZiBhbiBpc3N1ZSBpcyBpZGVudGlmaWVkIHdpdGggdGhlIHJlbGVhc2VkIHNvdXJjZSBjb2RlIG9uIHRoZSBzdXBwb3J0ZWQKK2tlcm5lbCB3aXRoIGEgc3VwcG9ydGVkIGFkYXB0ZXIsIGVtYWlsIHRoZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIAordGhlIGlzc3VlIHRvIGxpbnV4Lm5pY3NAaW50ZWwuY29tLgorCisKK0xpY2Vuc2UKKz09PT09PT0KKworVGhpcyBzb2Z0d2FyZSBwcm9ncmFtIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiBhIGxpY2Vuc2UgYWdyZWVtZW50IAorYmV0d2VlbiB5b3UgKCdMaWNlbnNlZScpIGFuZCBJbnRlbC4gRG8gbm90IHVzZSBvciBsb2FkIHRoaXMgc29mdHdhcmUgb3IgYW55IAorYXNzb2NpYXRlZCBtYXRlcmlhbHMgKGNvbGxlY3RpdmVseSwgdGhlICdTb2Z0d2FyZScpIHVudGlsIHlvdSBoYXZlIGNhcmVmdWxseSAKK3JlYWQgdGhlIGZ1bGwgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExJQ0VOU0UgbG9jYXRlZCBpbiB0aGlzIHNvZnR3YXJlIAorcGFja2FnZS4gQnkgbG9hZGluZyBvciB1c2luZyB0aGUgU29mdHdhcmUsIHlvdSBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhpcyAKK0FncmVlbWVudC4gSWYgeW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZG8gbm90IAoraW5zdGFsbCBvciB1c2UgdGhlIFNvZnR3YXJlLgorCisqIE90aGVyIG5hbWVzIGFuZCBicmFuZHMgbWF5IGJlIGNsYWltZWQgYXMgdGhlIHByb3BlcnR5IG9mIG90aGVycy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9lcWwudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2VxbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYxNTUwMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9lcWwudHh0CkBAIC0wLDAgKzEsNTI4IEBACisgIEVRTCBEcml2ZXI6IFNlcmlhbCBJUCBMb2FkIEJhbGFuY2luZyBIT1dUTworICBTaW1vbiAiR3VydSBBbGVwaC1OdWxsIiBKYW5lcywgc2ltb25AbmNtLmNvbQorICB2MS4xLCBGZWJydWFyeSAyNywgMTk5NQorCisgIFRoaXMgaXMgdGhlIG1hbnVhbCBmb3IgdGhlIEVRTCBkZXZpY2UgZHJpdmVyLiBFUUwgaXMgYSBzb2Z0d2FyZSBkZXZpY2UKKyAgdGhhdCBsZXRzIHlvdSBsb2FkLWJhbGFuY2UgSVAgc2VyaWFsIGxpbmtzIChTTElQIG9yIHVuY29tcHJlc3NlZCBQUFApCisgIHRvIGluY3JlYXNlIHlvdXIgYmFuZHdpZHRoLiBJdCB3aWxsIG5vdCByZWR1Y2UgeW91ciBsYXRlbmN5IChpLmUuIHBpbmcKKyAgdGltZXMpIGV4Y2VwdCBpbiB0aGUgY2FzZSB3aGVyZSB5b3UgYWxyZWFkeSBoYXZlIGxvdHMgb2YgdHJhZmZpYyBvbgorICB5b3VyIGxpbmssIGluIHdoaWNoIGl0IHdpbGwgaGVscCB0aGVtIG91dC4gVGhpcyBkcml2ZXIgaGFzIGJlZW4gdGVzdGVkCisgIHdpdGggdGhlIDEuMS43NSBrZXJuZWwsIGFuZCBpcyBrbm93biB0byBoYXZlIHBhdGNoZWQgY2xlYW5seSB3aXRoCisgIDEuMS44Ni4gIFNvbWUgdGVzdGluZyB3aXRoIDEuMS45MiBoYXMgYmVlbiBkb25lIHdpdGggdGhlIHYxLjEgcGF0Y2gKKyAgd2hpY2ggd2FzIG9ubHkgY3JlYXRlZCB0byBwYXRjaCBjbGVhbmx5IGluIHRoZSB2ZXJ5IGxhdGVzdCBrZXJuZWwKKyAgc291cmNlIHRyZWVzLiAoWWVzLCBpdCB3b3JrZWQgZmluZS4pCisKKyAgMS4gIEludHJvZHVjdGlvbgorCisgIFdoaWNoIGlzIHdvcnNlPyBBIGh1Z2UgZmVlIGZvciBhIDU2SyBsZWFzZWQgbGluZSBvciB0d28gcGhvbmUgbGluZXM/CisgIEl0J3MgcHJvYmFibHkgdGhlIGZvcm1lci4gIElmIHlvdSBmaW5kIHlvdXJzZWxmIGNyYXZpbmcgbW9yZSBiYW5kd2lkdGgsCisgIGFuZCBoYXZlIGEgSVNQIHRoYXQgaXMgZmxleGlibGUsIGl0IGlzIG5vdyBwb3NzaWJsZSB0byBiaW5kIG1vZGVtcworICB0b2dldGhlciB0byB3b3JrIGFzIG9uZSBwb2ludC10by1wb2ludCBsaW5rIHRvIGluY3JlYXNlIHlvdXIKKyAgYmFuZHdpZHRoLiAgQWxsIHdpdGhvdXQgaGF2aW5nIHRvIGhhdmUgYSBzcGVjaWFsIGJsYWNrIGJveCBvbiBlaXRoZXIKKyAgc2lkZS4KKworCisgIFRoZSBlcWwgZHJpdmVyIGhhcyBvbmx5IGJlZW4gdGVzdGVkIHdpdGggdGhlIExpdmluZ3N0b24gUG9ydE1hc3Rlci0yZQorICB0ZXJtaW5hbCBzZXJ2ZXIuIEkgZG8gbm90IGtub3cgaWYgb3RoZXIgdGVybWluYWwgc2VydmVycyBzdXBwb3J0IGxvYWQtCisgIGJhbGFuY2luZywgYnV0IEkgZG8ga25vdyB0aGF0IHRoZSBQb3J0TWFzdGVyIGRvZXMgaXQsIGFuZCBkb2VzIGl0CisgIGFsbW9zdCBhcyB3ZWxsIGFzIHRoZSBlcWwgZHJpdmVyIHNlZW1zIHRvIGRvIGl0ICgtLSBVbmZvcnR1bmF0ZWx5LCBpbgorICBteSB0ZXN0aW5nIHNvIGZhciwgdGhlIExpdmluZ3N0b24gUG9ydE1hc3RlciAyZSdzIGxvYWQtYmFsYW5jaW5nIGlzIGEKKyAgZ29vZCAxIHRvIDIgS0IvcyBzbG93ZXIgdGhhbiB0aGUgdGVzdCBtYWNoaW5lIHdvcmtpbmcgd2l0aCBhIDI4LjggS2JwcworICBhbmQgMTQuNCBLYnBzIGNvbm5lY3Rpb24uICBIb3dldmVyLCBJIGFtIG5vdCBzdXJlIHRoYXQgaXQgcmVhbGx5IGlzCisgIHRoZSBQb3J0TWFzdGVyLCBvciBpZiBpdCdzIExpbnV4J3MgVENQIGRyaXZlcnMuIEknbSB0b2xkIHRoYXQgTGludXgncworICBUQ1AgaW1wbGVtZW50YXRpb24gaXMgcHJldHR5IGZhc3QgdGhvdWdoLi0tKQorCisKKyAgSSBzdWdnZXN0IHRvIElTUHMgb3V0IHRoZXJlIHRoYXQgaXQgd291bGQgcHJvYmFibHkgYmUgZmFpciB0byBjaGFyZ2UKKyAgYSBsb2FkLWJhbGFuY2luZyBjbGllbnQgNzUlIG9mIHRoZSBjb3N0IG9mIHRoZSBzZWNvbmQgbGluZSBhbmQgNTAlIG9mCisgIHRoZSBjb3N0IG9mIHRoZSB0aGlyZCBsaW5lIGV0Yy4uLgorCisKKyAgSGV5LCB3ZSBjYW4gYWxsIGRyZWFtIHlvdSBrbm93Li4uCisKKworICAyLiAgS2VybmVsIENvbmZpZ3VyYXRpb24KKworICBIZXJlIEkgZGVzY3JpYmUgdGhlIGdlbmVyYWwgc3RlcHMgb2YgZ2V0dGluZyBhIGtlcm5lbCB1cCBhbmQgd29ya2luZworICB3aXRoIHRoZSBlcWwgZHJpdmVyLglGcm9tIHBhdGNoaW5nLCBidWlsZGluZywgdG8gaW5zdGFsbGluZy4KKworCisgIDIuMS4JUGF0Y2hpbmcgVGhlIEtlcm5lbAorCisgIElmIHlvdSBkbyBub3QgaGF2ZSBvciBjYW5ub3QgZ2V0IGEgY29weSBvZiB0aGUga2VybmVsIHdpdGggdGhlIGVxbAorICBkcml2ZXIgZm9sZGVkIGludG8gaXQsIGdldCB5b3VyIGNvcHkgb2YgdGhlIGRyaXZlciBmcm9tCisgIGZ0cDovL3NsYXVnaHRlci5uY20uY29tL3B1Yi9MaW51eC9MT0FEX0JBTEFOQ0lORy9lcWwtMS4xLnRhci5nei4KKyAgVW5wYWNrIHRoaXMgYXJjaGl2ZSBzb21lcGxhY2Ugb2J2aW91cyBsaWtlIC91c3IvbG9jYWwvc3JjLy4gIEl0IHdpbGwKKyAgY3JlYXRlIHRoZSBmb2xsb3dpbmcgZmlsZXM6CisKKworCisgICAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgICAgIC1ydy1yLS1yLS0gZ3VydS9uY20JMTk4IEphbiAxOSAxODo1MyAxOTk1IGVxbC0xLjEvTk8tV0FSUkFOVFkKKyAgICAgICAtcnctci0tci0tIGd1cnUvbmNtCTMwNjIwIEZlYiAyNyAyMTo0MCAxOTk1IGVxbC0xLjEvZXFsLTEuMS5wYXRjaAorICAgICAgIC1yd3hyLXhyLXggZ3VydS9uY20JMTYxMTEgSmFuIDEyIDIyOjI5IDE5OTUgZXFsLTEuMS9lcWxfZW5zbGF2ZQorICAgICAgIC1ydy1yLS1yLS0gZ3VydS9uY20JMjE5NSBKYW4gMTAgMjE6NDggMTk5NSBlcWwtMS4xL2VxbF9lbnNsYXZlLmMKKyAgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKyAgVW5wYWNrIGEgcmVjZW50IGtlcm5lbCAoc29tZXRoaW5nIGFmdGVyIDEuMS45Mikgc29tZXBsYWNlIGNvbnZlbmllbnQKKyAgbGlrZSBzYXkgL3Vzci9zcmMvbGludXgtMS4xLjkyLmVxbC4gVXNlIHN5bWJvbGljIGxpbmtzIHRvIHBvaW50CisgIC91c3Ivc3JjL2xpbnV4IHRvIHRoaXMgZGV2ZWxvcG1lbnQgZGlyZWN0b3J5LgorCisKKyAgQXBwbHkgdGhlIHBhdGNoIGJ5IHJ1bm5pbmcgdGhlIGNvbW1hbmRzOgorCisKKyAgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICAgICAgY2QgL3Vzci9zcmMKKyAgICAgICBwYXRjaCA8L3Vzci9sb2NhbC9zcmMvZXFsLTEuMS9lcWwtMS4xLnBhdGNoCisgICAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCisKKworCisKKyAgMi4yLglCdWlsZGluZyBUaGUgS2VybmVsCisKKyAgQWZ0ZXIgcGF0Y2hpbmcgdGhlIGtlcm5lbCwgcnVuIG1ha2UgY29uZmlnIGFuZCBjb25maWd1cmUgdGhlIGtlcm5lbAorICBmb3IgeW91ciBoYXJkd2FyZS4KKworCisgIEFmdGVyIGNvbmZpZ3VyYXRpb24sIG1ha2UgYW5kIGluc3RhbGwgYWNjb3JkaW5nIHRvIHlvdXIgaGFiaXQuCisKKworICAzLiAgTmV0d29yayBDb25maWd1cmF0aW9uCisKKyAgU28gZmFyLCBJIGhhdmUgb25seSB1c2VkIHRoZSBlcWwgZGV2aWNlIHdpdGggdGhlIERTTElQIFNMSVAgY29ubmVjdGlvbgorICBtYW5hZ2VyIGJ5IE1hdHQgRGlsbG9uICgtLSAiVGhlIG1hbiB3aG8gc29sZCBoaXMgc291bCB0byBjb2RlIHNvIG11Y2gKKyAgc28gcXVpY2tseS4iLS0pIC4gIEhvdyB5b3UgY29uZmlndXJlIGl0IGZvciBvdGhlciAiY29ubmVjdGlvbiIKKyAgbWFuYWdlcnMgaXMgdXAgdG8geW91LiAgTW9zdCBvdGhlciBjb25uZWN0aW9uIG1hbmFnZXJzIHRoYXQgSSd2ZSBzZWVuCisgIGRvbid0IGRvIGEgdmVyeSBnb29kIGpvYiB3aGVuIGl0IGNvbWVzIHRvIGhhbmRsaW5nIG1vcmUgdGhhbiBvbmUKKyAgY29ubmVjdGlvbi4KKworCisgIDMuMS4JL2V0Yy9yYy5kL3JjLmluZXQxCisKKyAgSW4gcmMuaW5ldDEsIGlmY29uZmlnIHRoZSBlcWwgZGV2aWNlIHRvIHRoZSBJUCBhZGRyZXNzIHlvdSB1c3VhbGx5IHVzZQorICBmb3IgeW91ciBtYWNoaW5lLCBhbmQgdGhlIE1UVSB5b3UgcHJlZmVyIGZvciB5b3VyIFNMSVAgbGluZXMuCU9uZQorICBjb3VsZCBhcmd1ZSB0aGF0IE1UVSBzaG91bGQgYmUgcm91Z2hseSBoYWxmIHRoZSB1c3VhbCBzaXplIGZvciB0d28KKyAgbW9kZW1zLCBvbmUtdGhpcmQgZm9yIHRocmVlLCBvbmUtZm91cnRoIGZvciBmb3VyLCBldGMuLi4gIEJ1dCBnb2luZworICB0b28gZmFyIGJlbG93IDI5NiBpcyBwcm9iYWJseSBvdmVya2lsbC4gSGVyZSBpcyBhbiBleGFtcGxlIGlmY29uZmlnCisgIGNvbW1hbmQgdGhhdCBzZXRzIHVwIHRoZSBlcWwgZGV2aWNlOgorCisKKworICAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgICAgICBpZmNvbmZpZyBlcWwgMTk4LjY3LjMzLjIzOSBtdHUgMTAwNgorICAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworCisKKworCisgIE9uY2UgdGhlIGVxbCBkZXZpY2UgaXMgdXAgYW5kIHJ1bm5pbmcsIGFkZCBhIHN0YXRpYyBkZWZhdWx0IHJvdXRlIHRvCisgIGl0IGluIHRoZSByb3V0aW5nIHRhYmxlIHVzaW5nIHRoZSBjb29sIG5ldyByb3V0ZSBzeW50YXggdGhhdCBtYWtlcworICBsaWZlIHNvIG11Y2ggZWFzaWVyOgorCisKKworICAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgICAgICByb3V0ZSBhZGQgZGVmYXVsdCBlcWwKKyAgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKworICAzLjIuCUVuc2xhdmluZyBEZXZpY2VzIEJ5IEhhbmQKKworICBFbnNsYXZpbmcgZGV2aWNlcyBieSBoYW5kIHJlcXVpcmVzIHR3byB1dGlsaXR5IHByb2dyYW1zOiBlcWxfZW5zbGF2ZQorICBhbmQgZXFsX2VtYW5jaXBhdGUgKC0tIGVxbF9lbWFuY2lwYXRlIGhhc24ndCBiZWVuIHdyaXR0ZW4gYmVjYXVzZSB3aGVuCisgIGFuIGVuc2xhdmVkIGRldmljZSAiZGllcyIsIGl0IGlzIGF1dG9tYXRpY2FsbHkgdGFrZW4gb3V0IG9mIHRoZSBxdWV1ZS4KKyAgSSBoYXZlbid0IGZvdW5kIGEgZ29vZCByZWFzb24gdG8gd3JpdGUgaXQgeWV0Li4uIG90aGVyIHRoYW4gZm9yCisgIGNvbXBsZXRlbmVzcywgYnV0IHRoYXQgaXNuJ3QgYSBnb29kIG1vdGl2YXRvciBpcyBpdD8tLSkKKworCisgIFRoZSBzeW50YXggZm9yIGVuc2xhdmluZyBhIGRldmljZSBpcyAiZXFsX2Vuc2xhdmUgPG1hc3Rlci1uYW1lPgorICA8c2xhdmUtbmFtZT4gPGVzdGltYXRlZC1icHM+Ii4gIEhlcmUgYXJlIHNvbWUgZXhhbXBsZSBlbnNsYXZpbmdzOgorCisKKworICAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgICAgICBlcWxfZW5zbGF2ZSBlcWwgc2wwIDI4ODAwCisgICAgICAgZXFsX2Vuc2xhdmUgZXFsIHBwcDAgMTQ0MDAKKyAgICAgICBlcWxfZW5zbGF2ZSBlcWwgc2wxIDU3NjAwCisgICAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCisKKworCisKKyAgV2hlbiB5b3Ugd2FudCB0byBmcmVlIGEgZGV2aWNlIGZyb20gaXRzIGxpZmUgb2Ygc2xhdmVyeSwgeW91IGNhbgorICBlaXRoZXIgZG93biB0aGUgZGV2aWNlIHdpdGggaWZjb25maWcgKGVxbCB3aWxsIGF1dG9tYXRpY2FsbHkgYnVyeSB0aGUKKyAgZGVhZCBzbGF2ZSBhbmQgcmVtb3ZlIGl0IGZyb20gaXRzIHF1ZXVlKSBvciB1c2UgZXFsX2VtYW5jaXBhdGUgdG8gZnJlZQorICBpdC4gKC0tIE9yIGp1c3QgaWZjb25maWcgaXQgZG93biwgYW5kIHRoZSBlcWwgZHJpdmVyIHdpbGwgdGFrZSBpdCBvdXQKKyAgZm9yIHlvdS4tLSkKKworCisKKyAgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICAgICAgZXFsX2VtYW5jaXBhdGUgZXFsIHNsMAorICAgICAgIGVxbF9lbWFuY2lwYXRlIGVxbCBwcHAwCisgICAgICAgZXFsX2VtYW5jaXBhdGUgZXFsIHNsMQorICAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworCisKKworCisgIDMuMy4JRFNMSVAgQ29uZmlndXJhdGlvbiBmb3IgdGhlIGVxbCBEZXZpY2UKKworICBUaGUgZ2VuZXJhbCBpZGVhIGlzIHRvIGJyaW5nIHVwIGFuZCBrZWVwIHVwIGFzIG1hbnkgU0xJUCBjb25uZWN0aW9ucworICBhcyB5b3UgbmVlZCwgYXV0b21hdGljYWxseS4KKworCisgIDMuMy4xLiAgL2V0Yy9zbGlwL3J1bnNsaXAuY29uZgorCisgIEhlcmUgaXMgYW4gZXhhbXBsZSBydW5zbGlwLmNvbmY6CisKKworCisKKworCisKKworCisKKworCisKKworCisgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgbmFtZQkJc2wtbGluZS0xCisgIGVuYWJsZWQKKyAgYmF1ZAkJMzg0MDAKKyAgbXR1CQk1NzYKKyAgZHVjbWQJCS1lIC9ldGMvc2xpcC9kaWFsb3V0L2N1YTItMjg4LnhwIC10IDkKKyAgY29tbWFuZAkgZXFsX2Vuc2xhdmUgZXFsICRpbnRlcmZhY2UgMjg4MDAKKyAgYWRkcmVzcwkgMTk4LjY3LjMzLjIzOQorICBsaW5lCQkvZGV2L2N1YTIKKworICBuYW1lCQlzbC1saW5lLTIKKyAgZW5hYmxlZAorICBiYXVkCQkzODQwMAorICBtdHUJCTU3NgorICBkdWNtZAkJLWUgL2V0Yy9zbGlwL2RpYWxvdXQvY3VhMy0yODgueHAgLXQgOQorICBjb21tYW5kCSBlcWxfZW5zbGF2ZSBlcWwgJGludGVyZmFjZSAyODgwMAorICBhZGRyZXNzCSAxOTguNjcuMzMuMjM5CisgIGxpbmUJCS9kZXYvY3VhMworICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKworCisKKworICAzLjQuCVVzaW5nIFBQUCBhbmQgdGhlIGVxbCBEZXZpY2UKKworICBJIGhhdmUgbm90IHlldCBkb25lIGFueSBsb2FkLWJhbGFuY2luZyB0ZXN0aW5nIGZvciBQUFAgZGV2aWNlcywgbWFpbmx5CisgIGJlY2F1c2UgSSBkb24ndCBoYXZlIGEgUFBQLWNvbm5lY3Rpb24gbWFuYWdlciBsaWtlIFNMSVAgaGFzIHdpdGgKKyAgRFNMSVAuIEkgZGlkIGZpbmQgYSBnb29kIHRpcCBmcm9tIExpbnV4TkVUOkJpbGx5IGZvciBQUFAgcGVyZm9ybWFuY2U6CisgIG1ha2Ugc3VyZSB5b3UgaGF2ZSBhc3luY21hcCBzZXQgdG8gc29tZXRoaW5nIHNvIHRoYXQgY29udHJvbAorICBjaGFyYWN0ZXJzIGFyZSBub3QgZXNjYXBlZC4KKworCisgIEkgdHJpZWQgdG8gZml4IHVwIGEgUFBQIHNjcmlwdC9zeXN0ZW0gZm9yIHJlZGlhbGluZyBsb3N0IFBQUAorICBjb25uZWN0aW9ucyBmb3IgdXNlIHdpdGggdGhlIGVxbCBkcml2ZXIgdGhlIHdlZWtlbmQgb2YgRmViIDI1LTI2ICc5NQorICAoSGVyZWFmdGVyIGtub3duIGFzIHRoZSA4LWhvdXIgUFBQIEhhdGUgRmVzdGl2YWwpLiAgUGVyaGFwcyBsYXRlciB0aGlzCisgIHllYXIuCisKKworICA0LiAgQWJvdXQgdGhlIFNsYXZlIFNjaGVkdWxlciBBbGdvcml0aG0KKworICBUaGUgc2xhdmUgc2NoZWR1bGVyIHByb2JhYmx5IGNvdWxkIGJlIHJlcGxhY2VkIHdpdGggYSBkb3plbiBvdGhlcgorICB0aGluZ3MgYW5kIHB1c2ggdHJhZmZpYyBtdWNoIGZhc3Rlci4JVGhlIGZvcm11bGEgaW4gdGhlIGN1cnJlbnQgc2V0CisgIHVwIG9mIHRoZSBkcml2ZXIgd2FzIHR1bmVkIHRvIGhhbmRsZSBzbGF2ZXMgd2l0aCB3aWxkbHkgZGlmZmVyZW50CisgIGJpdHMtcGVyLXNlY29uZCAicHJpb3JpdGllcyIuCisKKworICBBbGwgdGVzdGluZyBJIGhhdmUgZG9uZSB3YXMgd2l0aCB0d28gMjguOCBWLkZDIG1vZGVtcywgb25lIGNvbm5lY3RpbmcKKyAgYXQgMjg4MDAgYnBzIG9yIHNsb3dlciwgYW5kIHRoZSBvdGhlciBjb25uZWN0aW5nIGF0IDE0NDAwIGJwcyBhbGwgdGhlCisgIHRpbWUuCisKKworICBPbmUgdmVyc2lvbiBvZiB0aGUgc2NoZWR1bGVyIHdhcyBhYmxlIHRvIHB1c2ggNS4zIEsvcyB0aHJvdWdoIHRoZQorICAyODgwMCBhbmQgMTQ0MDAgY29ubmVjdGlvbnMsIGJ1dCB3aGVuIHRoZSBwcmlvcml0aWVzIG9uIHRoZSBsaW5rcyB3ZXJlCisgIHZlcnkgd2lkZSBhcGFydCAoNTc2MDAgdnMuIDE0NDAwKSB0aGUgImZhc3RlciIgbW9kZW0gcmVjZWl2ZWQgYWxsCisgIHRyYWZmaWMgYW5kIHRoZSAic2xvd2VyIiBtb2RlbSBzdGFydmVkLgorCisKKyAgNS4gIFRlc3RlcnMnIFJlcG9ydHMKKworICBTb21lIHBlb3BsZSBoYXZlIGV4cGVyaW1lbnRlZCB3aXRoIHRoZSBlcWwgZGV2aWNlIHdpdGggbmV3ZXIKKyAga2VybmVscyAodGhhbiAxLjEuNzUpLiAgSSBoYXZlIHNpbmNlIHVwZGF0ZWQgdGhlIGRyaXZlciB0byBwYXRjaAorICBjbGVhbmx5IGluIG5ld2VyIGtlcm5lbHMgYmVjYXVzZSBvZiB0aGUgcmVtb3ZhbCBvZiB0aGUgb2xkICJzbGF2ZS0KKyAgYmFsYW5jaW5nIiBkcml2ZXIgY29uZmlnIG9wdGlvbi4KKworCisgIG8gIGljZWUgZnJvbSBMaW51eE5FVCBwYXRjaGVkIDEuMS44NiB3aXRob3V0IGFueSByZWplY3RzIGFuZCB3YXMgYWJsZQorICAgICB0byBib290IHRoZSBrZXJuZWwgYW5kIGVuc2xhdmUgYSBjb3VwbGUgb2YgSVNETiBQUFAgbGlua3MuCisKKyAgNS4xLglSYW5kb2xwaCBCZW50c29uJ3MgVGVzdCBSZXBvcnQKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgIEZyb20gYmVudHNvbkBncmllZy5zZWFzbHVnLm9yZyBXZWQgRmViICA4IDE5OjA4OjA5IDE5OTUKKyAgRGF0ZTogVHVlLCA3IEZlYiA5NSAyMjo1NyBQU1QKKyAgRnJvbTogUmFuZG9scGggQmVudHNvbiA8YmVudHNvbkBncmllZy5zZWFzbHVnLm9yZz4KKyAgVG86IGd1cnVAbmNtLmNvbQorICBTdWJqZWN0OiBFUUwgZHJpdmVyIHRlc3RzCisKKworICBJIGhhdmUgYmVlbiBjaGVja2luZyBvdXQgeW91ciBlcWwgZHJpdmVyLiAgKE5pY2Ugd29yaywgdGhhdCEpCisgIEFsdGhvdWdoIHlvdSBtYXkgYWxyZWFkeSBkb25lIHRoaXMgcGVyZm9ybWFuY2UgdGVzdGluZywgaGVyZQorICBhcmUgc29tZSBkYXRhIEkndmUgZGlzY292ZXJlZC4KKworICBSYW5kb2xwaCBCZW50c29uCisgIGJlbnRzb25AZ3JpZWcuc2Vhc2x1Zy5vcmcKKworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisgIEEgcHNldWRvLWRldmljZSBkcml2ZXIsIEVRTCwgd3JpdHRlbiBieSBTaW1vbiBKYW5lcywgY2FuIGJlIHVzZWQKKyAgdG8gYnVuZGxlIG11bHRpcGxlIFNMSVAgY29ubmVjdGlvbnMgaW50byB3aGF0IGFwcGVhcnMgdG8gYmUgYQorICBzaW5nbGUgY29ubmVjdGlvbi4gIFRoaXMgYWxsb3dzIG9uZSB0byBpbXByb3ZlIGRpYWwtdXAgbmV0d29yaworICBjb25uZWN0aXZpdHkgZ3JhZHVhbGx5LCB3aXRob3V0IGhhdmluZyB0byBidXkgZXhwZW5zaXZlIERTVS9DU1UKKyAgaGFyZHdhcmUgYW5kIHNlcnZpY2VzLgorCisgIEkgaGF2ZSBkb25lIHNvbWUgdGVzdGluZyBvZiB0aGlzIHNvZnR3YXJlLCB3aXRoIHR3byBnb2FscyBpbgorICBtaW5kOiBmaXJzdCwgdG8gZW5zdXJlIGl0IGFjdHVhbGx5IHdvcmtzIGFzIGRlc2NyaWJlZCBhbmQKKyAgc2Vjb25kLCBhcyBhIG1ldGhvZCBvZiBleGVyY2lzaW5nIG15IGRldmljZSBkcml2ZXIuCisKKyAgVGhlIGZvbGxvd2luZyBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudHMgd2VyZSBkZXJpdmVkIGZyb20gYSBzZXQKKyAgb2YgU0xJUCBjb25uZWN0aW9ucyBydW4gYmV0d2VlbiB0d28gTGludXggc3lzdGVtcyAoMS4xLjg0KSB1c2luZworICBhIDQ4NkRYMi82NiB3aXRoIGEgQ3ljbG9tLThZcyBhbmQgYSA0ODZTTEMvNDAgd2l0aCBhIEN5Y2xvbS0xNlkuCisgIChQb3J0cyAwLDEsMiwzIHdlcmUgdXNlZC4gIEEgbGF0ZXIgY29uZmlndXJhdGlvbiB3aWxsIGRpc3RyaWJ1dGUKKyAgcG9ydCBzZWxlY3Rpb24gYWNyb3NzIHRoZSBkaWZmZXJlbnQgQ2lycnVzIGNoaXBzIG9uIHRoZSBib2FyZHMuKQorICBPbmNlIGEgbGluayB3YXMgZXN0YWJsaXNoZWQsIEkgdGltZWQgYSBiaW5hcnkgZnRwIHRyYW5zZmVyIG9mCisgIDI4OTI4NCBieXRlcyBvZiBkYXRhLglJZiB0aGVyZSB3ZXJlIG5vIG92ZXJoZWFkIChwYWNrZXQgaGVhZGVycywKKyAgaW50ZXItY2hhcmFjdGVyIGFuZCBpbnRlci1wYWNrZXQgZGVsYXlzLCBldGMuKSB0aGUgdHJhbnNmZXJzCisgIHdvdWxkIHRha2UgdGhlIGZvbGxvd2luZyB0aW1lczoKKworICAgICAgYml0cy9zZWMJc2Vjb25kcworICAgICAgMzQ1NjAwCTguMworICAgICAgMjM0NjAwCTEyLjMKKyAgICAgIDE3MjgwMAkxNi43CisgICAgICAxNTM2MDAJMTguOAorICAgICAgNzY4MDAJMzcuNgorICAgICAgNTc2MDAJNTAuMgorICAgICAgMzg0MDAJNzUuMworICAgICAgMjg4MDAJMTAwLjQKKyAgICAgIDE5MjAwCTE1MC42CisgICAgICA5NjAwCTMwMS4zCisKKyAgQSBzaW5nbGUgbGluZSBydW5uaW5nIGF0IHRoZSBsb3dlciBzcGVlZHMgYW5kIHdpdGggbGFyZ2UgcGFja2V0cworICBjb21lcyB0byB3aXRoaW4gMiUgb2YgdGhpcy4gIFBlcmZvcm1hbmNlIGlzIGxpbWl0ZWQgZm9yIHRoZSBoaWdoZXIKKyAgc3BlZWRzIChhcyBwcmVkaWN0ZWQgYnkgdGhlIENpcnJ1cyBkYXRhYm9vaykgdG8gYW4gYWdncmVnYXRlIG9mCisgIGFib3V0IDE2MCBrYml0cy9zZWMuCVRoZSBuZXh0IHJvdW5kIG9mIHRlc3Rpbmcgd2lsbCBkaXN0cmlidXRlCisgIHRoZSBsb2FkIGFjcm9zcyB0d28gb3IgbW9yZSBDaXJydXMgY2hpcHMuCisKKyAgVGhlIGdvb2QgbmV3cyBpcyB0aGF0IG9uZSBnZXRzIG5lYXJseSB0aGUgZnVsbCBhZHZhbnRhZ2Ugb2YgdGhlCisgIHNlY29uZCwgdGhpcmQsIGFuZCBmb3VydGggbGluZSdzIGJhbmR3aWR0aC4gIChUaGUgYmFkIG5ld3MgaXMKKyAgdGhhdCB0aGUgY29ubmVjdGlvbiBlc3RhYmxpc2htZW50IHNlZW1lZCBmcmFnaWxlIGZvciB0aGUgaGlnaGVyCisgIHNwZWVkcy4gIE9uY2UgZXN0YWJsaXNoZWQsIHRoZSBjb25uZWN0aW9uIHNlZW1lZCByb2J1c3QgZW5vdWdoLikKKworICAjbGluZXMgIHNwZWVkCW10dSAgc2Vjb25kcwl0aGVvcnkgIGFjdHVhbCAgJW9mCisJIGtiaXQvc2VjICAgICAgZHVyYXRpb24Jc3BlZWQJc3BlZWQJbWF4CisgIDMJMTE1MjAwICA5MDAJXwkzNDU2MDAKKyAgMwkxMTUyMDAgIDQwMAkxOC4xCTM0NTYwMCAgMTU5ODI1ICA0NgorICAyCTExNTIwMCAgOTAwCV8JMjMwNDAwCisgIDIJMTE1MjAwICA2MDAJMTguMQkyMzA0MDAgIDE1OTgyNSAgNjkKKyAgMgkxMTUyMDAgIDQwMAkxOS4zCTIzMDQwMCAgMTQ5ODg4ICA2NQorICA0CTU3NjAwCTkwMAlfCTIzNDYwMAorICA0CTU3NjAwCTYwMAlfCTIzNDYwMAorICA0CTU3NjAwCTQwMAlfCTIzNDYwMAorICAzCTU3NjAwCTYwMAkyMC45CTE3MjgwMCAgMTM4NDEzICA4MAorICAzCTU3NjAwCTkwMAkyMS4yCTE3MjgwMCAgMTM2NDU1ICA3OAorICAzCTExNTIwMCAgNjAwCTIxLjcJMzQ1NjAwICAxMzMzMTEgIDM4CisgIDMJNTc2MDAJNDAwCTIyLjUJMTcyODAwICAxMjg1NzEgIDc0CisgIDQJMzg0MDAJOTAwCTI1LjIJMTUzNjAwICAxMTQ3OTUgIDc0CisgIDQJMzg0MDAJNjAwCTI2LjQJMTUzNjAwICAxMDk1NzcgIDcxCisgIDQJMzg0MDAJNDAwCTI3LjMJMTUzNjAwICAxMDU5NjUgIDY4CisgIDIJNTc2MDAJOTAwCTI5LjEJMTE1MjAwICA5OTQxMC4zIDg2CisgIDEJMTE1MjAwICA5MDAJMzAuNwkxMTUyMDAgIDk0MjI5LjMgODEKKyAgMgk1NzYwMAk2MDAJMzAuMgkxMTUyMDAgIDk1Nzg5LjQgODMKKyAgMwkzODQwMAk5MDAJMzAuMwkxMTUyMDAgIDk1NDczLjMgODIKKyAgMwkzODQwMAk2MDAJMzEuMgkxMTUyMDAgIDkyNzE5LjIgODAKKyAgMQkxMTUyMDAgIDYwMAkzMS4zCTExNTIwMCAgOTI0MjMJODAKKyAgMgk1NzYwMAk0MDAJMzIuMwkxMTUyMDAgIDg5NTYxLjYgNzcKKyAgMQkxMTUyMDAgIDQwMAkzMi44CTExNTIwMCAgODgxOTYuMyA3NgorICAzCTM4NDAwCTQwMAkzMy41CTExNTIwMCAgODYzNTMuNCA3NAorICAyCTM4NDAwCTkwMAk0My43CTc2ODAwCTY2MTk3LjcgODYKKyAgMgkzODQwMAk2MDAJNDQJNzY4MDAJNjU3NDYuNCA4NQorICAyCTM4NDAwCTQwMAk0Ny4yCTc2ODAwCTYxMjg5CTc5CisgIDQJMTkyMDAJOTAwCTUwLjgJNzY4MDAJNTY5NDUuNyA3NAorICA0CTE5MjAwCTQwMAk1My4yCTc2ODAwCTU0Mzc2LjcgNzAKKyAgNAkxOTIwMAk2MDAJNTMuNwk3NjgwMAk1Mzg3MC40IDcwCisgIDEJNTc2MDAJOTAwCTU0LjYJNTc2MDAJNTI5ODIuNCA5MQorICAxCTU3NjAwCTYwMAk1Ni4yCTU3NjAwCTUxNDc0CTg5CisgIDMJMTkyMDAJOTAwCTYwLjUJNTc2MDAJNDc4MTUuNSA4MworICAxCTU3NjAwCTQwMAk2MC4yCTU3NjAwCTQ4MDUzLjggODMKKyAgMwkxOTIwMAk2MDAJNjIJNTc2MDAJNDY2NTguNyA4MQorICAzCTE5MjAwCTQwMAk2NC43CTU3NjAwCTQ0NzExLjYgNzcKKyAgMQkzODQwMAk5MDAJNzkuNAkzODQwMAkzNjQzMy44IDk0CisgIDEJMzg0MDAJNjAwCTgyLjQJMzg0MDAJMzUxMDcuMyA5MQorICAyCTE5MjAwCTkwMAk4NC40CTM4NDAwCTM0Mjc1LjQgODkKKyAgMQkzODQwMAk0MDAJODYuOAkzODQwMAkzMzMyNy42IDg2CisgIDIJMTkyMDAJNjAwCTg3LjYJMzg0MDAJMzMwMjMuMyA4NQorICAyCTE5MjAwCTQwMAk5MS4yCTM4NDAwCTMxNzE5LjcgODIKKyAgNAk5NjAwCTkwMAk5NC43CTM4NDAwCTMwNTQ3LjQgNzkKKyAgNAk5NjAwCTQwMAkxMDYJMzg0MDAJMjcyOTAuOSA3MQorICA0CTk2MDAJNjAwCTExMAkzODQwMAkyNjI5OC41IDY4CisgIDMJOTYwMAk5MDAJMTE4CTI4ODAwCTI0NTE1LjYgODUKKyAgMwk5NjAwCTYwMAkxMjAJMjg4MDAJMjQxMDcJODMKKyAgMwk5NjAwCTQwMAkxMzEJMjg4MDAJMjIwODIuNyA3NgorICAxCTE5MjAwCTkwMAkxNTUJMTkyMDAJMTg2NjMuNSA5NworICAxCTE5MjAwCTYwMAkxNjEJMTkyMDAJMTc5NjgJOTMKKyAgMQkxOTIwMAk0MDAJMTcwCTE5MjAwCTE3MDE2LjcgODgKKyAgMgk5NjAwCTYwMAkxNzYJMTkyMDAJMTY0MzYuNiA4NQorICAyCTk2MDAJOTAwCTE4MAkxOTIwMAkxNjA3MS4zIDgzCisgIDIJOTYwMAk0MDAJMTgxCTE5MjAwCTE1OTgyLjUgODMKKyAgMQk5NjAwCTkwMAkzMDUJOTYwMAk5NDg0LjcyIDk4CisgIDEJOTYwMAk2MDAJMzE0CTk2MDAJOTIxMi44NyA5NQorICAxCTk2MDAJNDAwCTMzMgk5NjAwCTg3MTMuMzcgOTAKKworCisKKworCisgIDUuMi4JQW50aG9ueSBIZWFseSdzIFJlcG9ydAorCisKKworCisKKworCisgIERhdGU6IE1vbiwgMTMgRmViIDE5OTUgMTY6MTc6MjkgKzExMDAgKEVTVCkKKyAgRnJvbTogQW50b255IEhlYWxleSA8YWhlYWxleUBzdC5uZXBlYW4udXdzLmVkdS5hdT4KKyAgVG86IFNpbW9uIEphbmVzIDxndXJ1QG5jbS5jb20+CisgIFN1YmplY3Q6IFJlOiBMb2FkIEJhbGFuY2luZworCisgIEhpIFNpbW9uLAorCSAgSSd2ZSBpbnN0YWxsZWQgeW91ciBwYXRjaCBhbmQgaXQgd29ya3MgZ3JlYXQuIEkgaGF2ZSB0cmlhbGVkCisJICBpdCBvdmVyIHR3aW4gU0wvSVAgbGluZXMsIGp1c3Qgb3ZlciBudWxsIG1vZGVtcywgYnV0IEkgd2FzCisJICBhYmxlIHRvIGRhdGEgYXQgb3ZlciA0OEtiL3MgW0lTRE4gbGluayAtU2ltb25dLiBJIG1hbmFnZWQgYQorCSAgdHJhbnNmZXIgb2YgdXAgdG8gNy41IEtieXRlL3Mgb24gb25lIGdvLCBidXQgYXZlcmFnZWQgYXJvdW5kCisJICA2LjQgS2J5dGUvcywgd2hpY2ggSSB0aGluayBpcyBwcmV0dHkgY29vbC4gIDopCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ld3JrMy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZXdyazMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZTllNWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZXdyazMudHh0CkBAIC0wLDAgKzEsNDYgQEAKK1RoZSBFdGhlcldPUktTIDMgIGRyaXZlciBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpcyAgZGVzaWduZWQgdG8gIHdvcmsgd2l0aCBhbGwKK2tlcm5lbHMgICA+ICAxLjEuMzMgICAoYXBwcm94KSAgYW5kICBpbmNsdWRlcyAgdG9vbHMgICBpbiAgdGhlICAnZXdyazN0b29scycKK3N1YmRpcmVjdG9yeSAgIHRvICBhbGxvdyAgc2V0ICAgdXAgb2YgICB0aGUgICBjYXJkLCAgc2ltaWxhciAgdG8gIHRoZSAgTVNET1MKKydOSUNTRVRVUC5FWEUnIHRvb2xzIHByb3ZpZGVkIG9uICB0aGUgRE9TIGRyaXZlcnMgIGRpc2sgKHR5cGUgJ21ha2UnIGluIHRoYXQKK3N1YmRpcmVjdG9yeSB0byBtYWtlIHRoZSB0b29scykuCisKK1RoZSBzdXBwb3J0ZWQgIGNhcmRzIGFyZSBERTIwMywgIERFMjA0IGFuZCBERTIwNS4gIEFsbCAgIG90aGVyIGNhcmRzIGFyZSBOT1QKK3N1cHBvcnRlZCAtIHJlZmVyIHRvICdkZXBjYS5jJyBmb3IgcnVubmluZyB0aGUgTEFOQ0UgYmFzZWQgbmV0d29yayBjYXJkcyBhbmQKKydkZTR4NS5jJyAgZm9yIHRoZSAgRElHSVRBTCAgIFNlbWljb25kdWN0b3IgUENJICBjaGlwICBiYXNlZCAgYWRhcHRlcnMgIGZyb20KK0RpZ2l0YWwuCisKK1RoZSBhYmlsaXR5IHRvIGxvYWQgIHRoaXMgZHJpdmVyIGFzIGEgIGxvYWRhYmxlIG1vZHVsZSBoYXMgYmVlbiBpbmNsdWRlZCBhbmQKK3VzZWQgZXh0ZW5zaXZlbHkgIGR1cmluZyB0aGUgZHJpdmVyICBkZXZlbG9wbWVudCAodG8gc2F2ZSB0aG9zZSAgbG9uZyByZWJvb3QKK3NlcXVlbmNlcykuIFRvIHV0aWxpc2UgdGhpcyBhYmlsaXR5LCB5b3UgaGF2ZSB0byBkbyA4IHRoaW5nczoKKworICAgIDApIGhhdmUgYSBjb3B5IG9mIHRoZSBsb2FkYWJsZSBtb2R1bGVzIGNvZGUgaW5zdGFsbGVkIG9uIHlvdXIgc3lzdGVtLgorICAgIDEpIGNvcHkgZXdyazMuYyBmcm9tIHRoZSAgL2xpbnV4L2RyaXZlcnMvbmV0IGRpcmVjdG9yeSB0byB5b3VyIGZhdm91cml0ZQorICAgIHRlbXBvcmFyeSBkaXJlY3RvcnkuCisgICAgMikgZWRpdCB0aGUgIHNvdXJjZSBjb2RlIG5lYXIgIGxpbmUgMTg5OCB0byByZWZsZWN0ICB0aGUgSS9PIGFkZHJlc3MgYW5kCisgICAgSVJRIHlvdSdyZSB1c2luZy4KKyAgICAzKSBjb21waWxlICBld3JrMy5jLCBidXQgaW5jbHVkZSAtRE1PRFVMRSBpbiAgdGhlIGNvbW1hbmQgbGluZSB0byBlbnN1cmUKKyAgICB0aGF0IHRoZSBjb3JyZWN0IGJpdHMgYXJlIGNvbXBpbGVkIChzZWUgZW5kIG9mIHNvdXJjZSBjb2RlKS4KKyAgICA0KSBpZiB5b3UgYXJlIHdhbnRpbmcgdG8gYWRkIGEgbmV3ICBjYXJkLCBnb3RvIDUuIE90aGVyd2lzZSwgcmVjb21waWxlIGEKKyAgICBrZXJuZWwgd2l0aCB0aGUgZXdyazMgY29uZmlndXJhdGlvbiB0dXJuZWQgb2ZmIGFuZCByZWJvb3QuCisgICAgNSkgaW5zbW9kIGV3cmszLm8KKyAgICAgICAgICBbQWxhbiBDb3g6IENoYW5nZWQgdGhpcyBzbyB5b3UgY2FuIGluc21vZCBld3JrMy5vIGlycT14IGlvPXldCisgICAgICAgICAgW0FkYW0gS3JvcGVsaW46IE11bHRpcGxlIGNhcmRzIG5vdyBzdXBwb3J0ZWQgYnkgaXJxPXgxLHgyIGlvPXkxLHkyXQorICAgIDYpIHJ1biB0aGUgbmV0IHN0YXJ0dXAgYml0cyBmb3IgeW91ciBuZXcgZXRoPz8gaW50ZXJmYWNlIG1hbnVhbGx5IAorICAgICh1c3VhbGx5IC9ldGMvcmMuaW5ldFsxMl0gYXQgYm9vdCB0aW1lKS4gCisgICAgNykgZW5qb3khCisKKyAgICBOb3RlIHRoYXQgYXV0b3Byb2JpbmcgaXMgbm90IGFsbG93ZWQgaW4gbG9hZGFibGUgbW9kdWxlcyAtIHRoZSBzeXN0ZW0gaXMKKyAgICBhbHJlYWR5IHVwIGFuZCBydW5uaW5nIGFuZCB5b3UncmUgbWVzc2luZyB3aXRoIGludGVycnVwdHMuCisKKyAgICBUbyB1bmxvYWQgYSBtb2R1bGUsIHR1cm4gb2ZmIHRoZSBhc3NvY2lhdGVkIGludGVyZmFjZSAKKyAgICAnaWZjb25maWcgZXRoPz8gZG93bicgdGhlbiAncm1tb2QgZXdyazMnLgorCitUaGUgcGVyZm9ybWFuY2Ugd2UndmUgIGFjaGlldmVkIHNvIGZhciAgaGFzIGJlZW4gbWVhc3VyZWQgdGhyb3VnaCB0aGUgJ3R0Y3AnCit0b29sICAgYXQgOTc1a0Ivcy4gIFRoaXMgIG1lYXN1cmVzICB0aGUgIHRvdGFsICBUQ1AgIHN0YWNrIHBlcmZvcm1hbmNlIHdoaWNoCitpbmNsdWRlcyB0aGUgICBjYXJkLCAgc28gZG9uJ3QgIGV4cGVjdCAgIHRvIGdldCAgIG11Y2ggbmVhcmVyICB0aGUgIDEuMjVNQi9zCit0aGVvcmV0aWNhbCBFdGhlcm5ldCByYXRlLgorCisKK0Vuam95IQorCitEYXZlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZmlsdGVyLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9maWx0ZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZjIwMDUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZmlsdGVyLnR4dApAQCAtMCwwICsxLDQyIEBACitmaWx0ZXIudHh0OiBMaW51eCBTb2NrZXQgRmlsdGVyaW5nCitXcml0dGVuIGJ5OiBKYXkgU2NodWxpc3QgPGpzY2hsc3RAc2FtYmEub3JnPgorCitJbnRyb2R1Y3Rpb24KKz09PT09PT09PT09PQorCisJTGludXggU29ja2V0IEZpbHRlcmluZyBpcyBkZXJpdmVkIGZyb20gdGhlIEJlcmtlbGV5CitQYWNrZXQgRmlsdGVyLiBUaGVyZSBhcmUgc29tZSBkaXN0aW5jdCBkaWZmZXJlbmNlcyBiZXR3ZWVuCit0aGUgQlNEIGFuZCBMaW51eCBLZXJuZWwgRmlsdGVyaW5nLgorCitMaW51eCBTb2NrZXQgRmlsdGVyaW5nIChMU0YpIGFsbG93cyBhIHVzZXItc3BhY2UgcHJvZ3JhbSB0bworYXR0YWNoIGEgZmlsdGVyIG9udG8gYW55IHNvY2tldCBhbmQgYWxsb3cgb3IgZGlzYWxsb3cgY2VydGFpbgordHlwZXMgb2YgZGF0YSB0byBjb21lIHRocm91Z2ggdGhlIHNvY2tldC4gTFNGIGZvbGxvd3MgZXhhY3RseQordGhlIHNhbWUgZmlsdGVyIGNvZGUgc3RydWN0dXJlIGFzIHRoZSBCU0QgQmVya2VsZXkgUGFja2V0IEZpbHRlcgorKEJQRiksIHNvIHJlZmVycmluZyB0byB0aGUgQlNEIGJwZi40IG1hbnBhZ2UgaXMgdmVyeSBoZWxwZnVsIGluCitjcmVhdGluZyBmaWx0ZXJzLgorCitMU0YgaXMgbXVjaCBzaW1wbGVyIHRoYW4gQlBGLiBPbmUgZG9lcyBub3QgaGF2ZSB0byB3b3JyeSBhYm91dAorZGV2aWNlcyBvciBhbnl0aGluZyBsaWtlIHRoYXQuIFlvdSBzaW1wbHkgY3JlYXRlIHlvdXIgZmlsdGVyCitjb2RlLCBzZW5kIGl0IHRvIHRoZSBrZXJuZWwgdmlhIHRoZSBTT19BVFRBQ0hfRklMVEVSIGlvY3RsIGFuZAoraWYgeW91ciBmaWx0ZXIgY29kZSBwYXNzZXMgdGhlIGtlcm5lbCBjaGVjayBvbiBpdCwgeW91IHRoZW4KK2ltbWVkaWF0ZWx5IGJlZ2luIGZpbHRlcmluZyBkYXRhIG9uIHRoYXQgc29ja2V0LgorCitZb3UgY2FuIGFsc28gZGV0YWNoIGZpbHRlcnMgZnJvbSB5b3VyIHNvY2tldCB2aWEgdGhlCitTT19ERVRBQ0hfRklMVEVSIGlvY3RsLiBUaGlzIHdpbGwgcHJvYmFibHkgbm90IGJlIHVzZWQgbXVjaAorc2luY2Ugd2hlbiB5b3UgY2xvc2UgYSBzb2NrZXQgdGhhdCBoYXMgYSBmaWx0ZXIgb24gaXQgdGhlCitmaWx0ZXIgaXMgYXV0b21hZ2ljYWxseSByZW1vdmVkLiBUaGUgb3RoZXIgbGVzcyBjb21tb24gY2FzZQorbWF5IGJlIGFkZGluZyBhIGRpZmZlcmVudCBmaWx0ZXIgb24gdGhlIHNhbWUgc29ja2V0IHdoZXJlIHlvdSBoYWQgYW5vdGhlcgorZmlsdGVyIHRoYXQgaXMgc3RpbGwgcnVubmluZzogdGhlIGtlcm5lbCB0YWtlcyBjYXJlIG9mIHJlbW92aW5nCit0aGUgb2xkIG9uZSBhbmQgcGxhY2luZyB5b3VyIG5ldyBvbmUgaW4gaXRzIHBsYWNlLCBhc3N1bWluZyB5b3VyCitmaWx0ZXIgaGFzIHBhc3NlZCB0aGUgY2hlY2tzLCBvdGhlcndpc2UgaWYgaXQgZmFpbHMgdGhlIG9sZCBmaWx0ZXIKK3dpbGwgcmVtYWluIG9uIHRoYXQgc29ja2V0LgorCitFeGFtcGxlcworPT09PT09PT0KKworSW9jdGxzLQorc2V0c29ja29wdChzb2NrZmQsIFNPTF9TT0NLRVQsIFNPX0FUVEFDSF9GSUxURVIsICZGaWx0ZXIsIHNpemVvZihGaWx0ZXIpKTsKK3NldHNvY2tvcHQoc29ja2ZkLCBTT0xfU09DS0VULCBTT19ERVRBQ0hfRklMVEVSLCAmdmFsdWUsIHNpemVvZih2YWx1ZSkpOworCitTZWUgdGhlIEJTRCBicGYuNCBtYW5wYWdlIGFuZCB0aGUgQlNEIFBhY2tldCBGaWx0ZXIgcGFwZXIgd3JpdHRlbiBieQorU3RldmVuIE1jQ2FubmUgYW5kIFZhbiBKYWNvYnNvbiBvZiBMYXdyZW5jZSBCZXJrZWxleSBMYWJvcmF0b3J5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2ZvcmUyMDBlLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9mb3JlMjAwZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFmMzM3ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9mb3JlMjAwZS50eHQKQEAgLTAsMCArMSw2NiBAQAorCitGT1JFIFN5c3RlbXMgUENBLTIwMEUvU0JBLTIwMEUgQVRNIE5JQyBkcml2ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIHRoZSBGT1JFIFN5c3RlbXMgMjAwRS1zZXJpZXMgQVRNIGFkYXB0ZXJzCit0byB0aGUgTGludXggb3BlcmF0aW5nIHN5c3RlbS4gSXQgaXMgYmFzZWQgb24gdGhlIGVhcmxpZXIgUENBLTIwMEUgZHJpdmVyCit3cml0dGVuIGJ5IFV3ZSBEYW5ub3dza2kuCisKK1RoZSBkcml2ZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydHMgUENBLTIwMEUgYW5kIFNCQS0yMDBFIGFkYXB0ZXJzIG9uCitpMzg2LCBhbHBoYSAodW50ZXN0ZWQpLCBwb3dlcnBjLCBzcGFyYyBhbmQgc3BhcmM2NCBhcmNocy4KKworVGhlIGludGVudCBpcyB0byBlbmFibGUgdGhlIHVzZSBvZiBkaWZmZXJlbnQgbW9kZWxzIG9mIEZPUkUgYWRhcHRlcnMgYXQgdGhlCitzYW1lIHRpbWUsIGJ5IGhvc3RzIHRoYXQgaGF2ZSBzZXZlcmFsIGJ1cyBpbnRlcmZhY2VzIChzdWNoIGFzIFBDSStTQlVTLAorUENJK01DQSBvciBQQ0krRUlTQSkuCisKK09ubHkgUENJIGFuZCBTQlVTIGRldmljZXMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciwgYnV0IHN1cHBvcnQKK2ZvciBvdGhlciBidXMgaW50ZXJmYWNlcyBzdWNoIGFzIEVJU0Egc2hvdWxkIG5vdCBiZSB0b28gaGFyZCB0byBhZGQgKHRoaXMgbWF5CitiZSBtb3JlIHRyaWNreSBmb3IgdGhlIE1DQSBidXMsIHRob3VnaCwgYXMgRk9SRSBtYWRlIHNvbWUgTUNBLXNwZWNpZmljCittb2RpZmljYXRpb25zIHRvIHRoZSBhZGFwdGVyJ3MgQUFMSSBpbnRlcmZhY2UpLgorCisKK0Zpcm13YXJlIENvcHlyaWdodCBOb3RpY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUGxlYXNlIHJlYWQgdGhlIGZvcmUyMDBlX2Zpcm13YXJlX2NvcHlyaWdodCBmaWxlIHByZXNlbnQKK2luIHRoZSBsaW51eC9kcml2ZXJzL2F0bSBkaXJlY3RvcnkgZm9yIGRldGFpbHMgYW5kIHJlc3RyaWN0aW9ucy4KKworCitGaXJtd2FyZSBVcGRhdGVzCistLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBGT1JFIFN5c3RlbXMgMjAwRS1zZXJpZXMgZHJpdmVyIGlzIHNoaXBwZWQgd2l0aCBmaXJtd2FyZSBkYXRhIGJlaW5nIAordXBsb2FkZWQgdG8gdGhlIEFUTSBhZGFwdGVycyBhdCBzeXN0ZW0gYm9vdCB0aW1lIG9yIGF0IG1vZHVsZSBsb2FkaW5nIHRpbWUuIAorVGhlIHN1cHBsaWVkIGZpcm13YXJlIGltYWdlcyBzaG91bGQgd29yayB3aXRoIGFsbCBhZGFwdGVycy4KKworSG93ZXZlciwgaWYgeW91IGVuY291bnRlciBwcm9ibGVtcyAodGhlIGZpcm13YXJlIGRvZXNuJ3Qgc3RhcnQgb3IgdGhlIGRyaXZlcgoraXMgdW5hYmxlIHRvIHJlYWQgdGhlIFBST00gZGF0YSksIHlvdSBtYXkgY29uc2lkZXIgdHJ5aW5nIGFub3RoZXIgZmlybXdhcmUKK3ZlcnNpb24uIEFsdGVybmF0aXZlIGJpbmFyeSBmaXJtd2FyZSBpbWFnZXMgY2FuIGJlIGZvdW5kIHNvbWV3aGVyZSBvbiB0aGUKK0ZvcmVUaG91Z2h0IENELVJPTSBzdXBwbGllZCB3aXRoIHlvdXIgYWRhcHRlciBieSBGT1JFIFN5c3RlbXMuCisKK1lvdSBjYW4gYWxzbyBnZXQgdGhlIGxhdGVzdCBmaXJtd2FyZSBpbWFnZXMgZnJvbSBGT1JFIFN5c3RlbXMgYXQKK2h0dHA6Ly93d3cuZm9yZS5jb20uIFJlZ2lzdGVyIFRBQ1RpY3MgT25saW5lIGFuZCBnbyB0bwordGhlICdzb2Z0d2FyZSB1cGRhdGVzJyBwYWdlcy4gVGhlIGZpcm13YXJlIGJpbmFyaWVzIGFyZSBwYXJ0IG9mCit0aGUgdmFyaW91cyBGb3JlVGhvdWdodCBzb2Z0d2FyZSBkaXN0cmlidXRpb25zLgorCitOb3RpY2UgdGhhdCBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIFBDQS0yMDBFIGZpcm13YXJlIGV4aXN0LCBkZXBlbmRpbmcKK29uIHRoZSBlbmRpYW5lc3Mgb2YgdGhlIGhvc3QgYXJjaGl0ZWN0dXJlLiBUaGUgZHJpdmVyIGlzIHNoaXBwZWQgd2l0aAorYm90aCBsaXR0bGUgYW5kIGJpZyBlbmRpYW4gUENBIGZpcm13YXJlIGltYWdlcy4KKworTmFtZSBhbmQgbG9jYXRpb24gb2YgdGhlIG5ldyBmaXJtd2FyZSBpbWFnZXMgY2FuIGJlIHNldCBhdCBrZXJuZWwKK2NvbmZpZ3VyYXRpb24gdGltZToKKworMS4gQ29weSB0aGUgbmV3IGZpcm13YXJlIGJpbmFyeSBmaWxlcyAod2l0aCAuYmluLCAuYmluMSBvciAuYmluMiBzdWZmaXgpCisgICB0byBzb21lIGRpcmVjdG9yeSwgc3VjaCBhcyBsaW51eC9kcml2ZXJzL2F0bS4KKworMi4gUmVjb25maWd1cmUgeW91ciBrZXJuZWwgdG8gc2V0IHRoZSBuZXcgZmlybXdhcmUgbmFtZSBhbmQgbG9jYXRpb24uCisgICBFeHBlY3RlZCBwYXRobmFtZXMgYXJlIGFic29sdXRlIG9yIHJlbGF0aXZlIHRvIHRoZSBkcml2ZXJzL2F0bSBkaXJlY3RvcnkuCisKKzMuIFJlYnVpbGQgYW5kIHJlLWluc3RhbGwgeW91ciBrZXJuZWwgb3IgeW91ciBtb2R1bGUuCisKKworRmVlZGJhY2sKKy0tLS0tLS0tCisKK0ZlZWRiYWNrIGlzIHdlbGNvbWUuIFBsZWFzZSBzZW5kIHN1Y2Nlc3Mgc3Rvcmllcy9idWcgcmVwb3J0cy8KK3BhdGNoZXMvaW1wcm92ZW1lbnQvY29tbWVudHMvZmxhbWVzIHRvIDxsaXp6aUBjbmFtLmZyPi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9mcmFtZXJlbGF5LnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9mcmFtZXJlbGF5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTBiNzIwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2ZyYW1lcmVsYXkudHh0CkBAIC0wLDAgKzEsMzkgQEAKK0ZyYW1lIFJlbGF5IChGUikgc3VwcG9ydCBmb3IgbGludXggaXMgYnVpbHQgaW50byBhIHR3byB0aWVyZWQgc3lzdGVtIG9mIGRldmljZSAKK2RyaXZlcnMuICBUaGUgdXBwZXIgbGF5ZXIgaW1wbGVtZW50cyBSRkMxNDkwIEZSIHNwZWNpZmljYXRpb24sIGFuZCB1c2VzIHRoZQorRGF0YSBMaW5rIENvbm5lY3Rpb24gSWRlbnRpZmllciAoRExDSSkgYXMgaXRzIGhhcmR3YXJlIGFkZHJlc3MuICBVc3VhbGx5IHRoZXNlCithcmUgYXNzaWduZWQgYnkgeW91ciBuZXR3b3JrIHN1cHBsaWVyLCB0aGV5IGdpdmUgeW91IHRoZSBudW1iZXIvbnVtYmVycyBvZgordGhlIFZpcnR1YWwgQ29ubmVjdGlvbnMgKFZDKSBhc3NpZ25lZCB0byB5b3UuCisKK0VhY2ggRExDSSBpcyBhIHBvaW50LXRvLXBvaW50IGxpbmsgYmV0d2VlbiB5b3VyIG1hY2hpbmUgYW5kIGEgcmVtb3RlIG9uZS4KK0FzIHN1Y2gsIGEgc2VwYXJhdGUgZGV2aWNlIGlzIG5lZWRlZCB0byBhY2NvbW1vZGF0ZSB0aGUgcm91dGluZy4gIFdpdGhpbiB0aGUKK25ldC10b29scyBhcmNoaXZlcyBpcyAnZGxjaWNmZycuICBUaGlzIHByb2dyYW0gd2lsbCBjb21tdW5pY2F0ZSB3aXRoIHRoZQorYmFzZSAiRExDSSIgZGV2aWNlLCBhbmQgY3JlYXRlIG5ldyBuZXQgZGV2aWNlcyBuYW1lZCAnZGxjaTAwJywgJ2RsY2kwMScuLi4gCitUaGUgY29uZmlndXJhdGlvbiBzY3JpcHQgd2lsbCBhc2sgeW91IGhvdyBtYW55IERMQ0lzIHlvdSBuZWVkLCBhcyB3ZWxsIGFzCitob3cgbWFueSBETENJcyB5b3Ugd2FudCB0byBhc3NpZ24gdG8gZWFjaCBGcmFtZSBSZWxheSBBY2Nlc3MgRGV2aWNlIChGUkFEKS4KKworVGhlIERMQ0kgdXNlcyBhIG51bWJlciBvZiBmdW5jdGlvbiBjYWxscyB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBGUkFELCBhbGwKK29mIHdoaWNoIGFyZSBzdG9yZWQgaW4gdGhlIEZSQUQncyBwcml2YXRlIGRhdGEgYXJlYS4gIGFzc29jL2RlYXNzb2MsIAorYWN0aXZhdGUvZGVhY3RpdmF0ZSBhbmQgZGxjaV9jb25maWcuICBUaGUgRExDSSBzdXBwbGllcyBhIHJlY2VpdmUgZnVuY3Rpb24KK3RvIHRoZSBGUkFEIHRvIGFjY2VwdCBpbmNvbWluZyBwYWNrZXRzLgorCitXaXRoIHRoaXMgaW5pdGlhbCBvZmZlcmluZywgb25seSAxIEZSQUQgZHJpdmVyIGlzIGF2YWlsYWJsZS4gIFdpdGggbWFueSB0aGFua3MKK3RvIFNhbmdvbWEgVGVjaG5vbG9naWVzLCBEYXZpZCBNYW5kZWxzdGFtICYgR2VuZSBLb3ppbiwgdGhlIFM1MDJBLCBTNTAyRSAmIAorUzUwOCBhcmUgc3VwcG9ydGVkLiAgVGhpcyBkcml2ZXIgaXMgY3VycmVudGx5IHNldCB1cCBmb3Igb25seSBGUiwgYnV0IGFzIAorU2FuZ29tYSBtYWtlcyBtb3JlIGZpcm13YXJlIG1vZHVsZXMgYXZhaWxhYmxlLCBpdCBjYW4gYmUgdXBkYXRlZCB0byBwcm92aWRlCit0aGVtIGFzIHdlbGwuCisKK0NvbmZpZ3VyYXRpb24gb2YgdGhlIEZSQUQgbWFrZXMgdXNlIG9mIGFub3RoZXIgbmV0LXRvb2xzIHByb2dyYW0sICdmcmFkY2ZnJy4KK1RoaXMgcHJvZ3JhbSBtYWtlcyB1c2Ugb2YgYSBjb25maWd1cmF0aW9uIGZpbGUgKHdoaWNoIGRsY2ljZmcgY2FuIGFsc28gcmVhZCkKK3RvIHNwZWNpZnkgdGhlIHR5cGVzIG9mIGJvYXJkcyB0byBiZSBjb25maWd1cmVkIGFzIEZSQURzLCBhcyB3ZWxsIGFzIHBlcmZvcm0KK2FueSBib2FyZCBzcGVjaWZpYyBjb25maWd1cmF0aW9uLiAgVGhlIFNhbmdvbWEgbW9kdWxlIG9mIGZyYWRjZmcgbG9hZHMgdGhlCitGUiBmaXJtd2FyZSBpbnRvIHRoZSBjYXJkLCBzZXRzIHRoZSBpcnEvcG9ydC9tZW1vcnkgaW5mb3JtYXRpb24sIGFuZCBwcm92aWRlcworYW4gaW5pdGlhbCBjb25maWd1cmF0aW9uLgorCitBZGRpdGlvbmFsIEZSQUQgZGV2aWNlIGRyaXZlcnMgY2FuIGJlIGFkZGVkIGFzIGhhcmR3YXJlIGlzIGF2YWlsYWJsZS4KKworQXQgdGhpcyB0aW1lLCB0aGUgZGxjaWNmZyBhbmQgZnJhZGNmZyBwcm9ncmFtcyBoYXZlIG5vdCBiZWVuIGluY29ycG9yYXRlZCBpbnRvCit0aGUgbmV0LXRvb2xzIGRpc3RyaWJ1dGlvbi4gIFRoZXkgY2FuIGJlIGZvdW5kIGF0IGZ0cC5pbnZsb2dpYy5jb20sIGluIAorL3B1Yi9saW51eC4gIE5vdGUgdGhhdCB3aXRoIE9TLzIgRlRQRCwgeW91IGVuZCB1cCBpbiAvcHViIGJ5IGRlZmF1bHQsIHNvIGp1c3QKK3VzZSAnY2QgbGludXgnLiAgdjAuMTAgaXMgZm9yIHVzZSBvbiBwcmUtMi4wLjMgYW5kIGVhcmxpZXIsIHYwLjE1IGlzIGZvciAKK3ByZS0yLjAuNCBhbmQgbGF0ZXIuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9nZW5fc3RhdHMudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2dlbl9zdGF0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMyOTdmNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9nZW5fc3RhdHMudHh0CkBAIC0wLDAgKzEsMTE3IEBACitHZW5lcmljIG5ldHdvcmtpbmcgc3RhdGlzdGljcyBmb3IgbmV0bGluayB1c2VycworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitTdGF0aXN0aWMgY291bnRlcnMgYXJlIGdyb3VwZWQgaW50byBzdHJ1Y3RzOgorCitTdHJ1Y3QgICAgICAgICAgICAgICBUTFYgdHlwZSAgICAgICAgICAgICAgRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2duZXRfc3RhdHNfYmFzaWMgICAgIFRDQV9TVEFUU19CQVNJQyAgICAgICBCYXNpYyBzdGF0aXN0aWNzCitnbmV0X3N0YXRzX3JhdGVfZXN0ICBUQ0FfU1RBVFNfUkFURV9FU1QgICAgUmF0ZSBlc3RpbWF0b3IKK2duZXRfc3RhdHNfcXVldWUgICAgIFRDQV9TVEFUU19RVUVVRSAgICAgICBRdWV1ZSBzdGF0aXN0aWNzCitub25lICAgICAgICAgICAgICAgICBUQ0FfU1RBVFNfQVBQICAgICAgICAgQXBwbGljYXRpb24gc3BlY2lmaWMKKworCitDb2xsZWN0aW5nOgorLS0tLS0tLS0tLS0KKworRGVjbGFyZSB0aGUgc3RhdGlzdGljIHN0cnVjdHMgeW91IG5lZWQ6CitzdHJ1Y3QgbXlzdHJ1Y3QgeworCXN0cnVjdCBnbmV0X3N0YXRzX2Jhc2ljCWJzdGF0czsKKwlzdHJ1Y3QgZ25ldF9zdGF0c19xdWV1ZQlxc3RhdHM7CisJLi4uCit9OworCitVcGRhdGUgc3RhdGlzdGljczoKK215c3RydWN0LT50c3RhdHMucGFja2V0Kys7CitteXN0cnVjdC0+cXN0YXRzLmJhY2tsb2cgKz0gc2tiLT5wa3RfbGVuOworCisKK0V4cG9ydCB0byB1c2Vyc3BhY2UgKER1bXApOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK215X2R1bXBpbmdfcm91dGluZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAuLi4pCit7CisJc3RydWN0IGduZXRfZHVtcCBkdW1wOworCisJaWYgKGduZXRfc3RhdHNfc3RhcnRfY29weShza2IsIFRDQV9TVEFUUzIsICZteXN0cnVjdC0+bG9jaywgJmR1bXApIDwgMCkKKwkJZ290byBydGF0dHJfZmFpbHVyZTsKKworCWlmIChnbmV0X3N0YXRzX2NvcHlfYmFzaWMoJmR1bXAsICZteXN0cnVjdC0+YnN0YXRzKSA8IDAgfHwKKwkgICAgZ25ldF9zdGF0c19jb3B5X3F1ZXVlKCZkdW1wLCAmbXlzdHJ1Y3QtPnFzdGF0cykgPCAwIHx8CisJCWduZXRfc3RhdHNfY29weV9hcHAoJmR1bXAsICZ4c3RhdHMsIHNpemVvZih4c3RhdHMpKSA8IDApCisJCWdvdG8gcnRhdHRyX2ZhaWx1cmU7CisKKwlpZiAoZ25ldF9zdGF0c19maW5pc2hfY29weSgmZHVtcCkgPCAwKQorCQlnb3RvIHJ0YXR0cl9mYWlsdXJlOworCS4uLgorfQorCitUQ0FfU1RBVFMvVENBX1hTVEFUUyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUHJpb3IgdXNlcnMgb2Ygc3RydWN0IHRjX3N0YXRzIGFuZCB4c3RhdHMgY2FuIG1haW50YWluIGJhY2t3YXJkCitjb21wYXRpYmlsaXR5IGJ5IGNhbGxpbmcgdGhlIGNvbXBhdCB3cmFwcGVycyB0byBrZWVwIHByb3ZpZGluZyB0aGUKK2V4aXN0aW5nIFRMViB0eXBlcy4KKworbXlfZHVtcGluZ19yb3V0aW5lKHN0cnVjdCBza19idWZmICpza2IsIC4uLikKK3sKKyAgICBpZiAoZ25ldF9zdGF0c19zdGFydF9jb3B5X2NvbXBhdChza2IsIFRDQV9TVEFUUzIsIFRDQV9TVEFUUywKKwkJVENBX1hTVEFUUywgJm15c3RydWN0LT5sb2NrLCAmZHVtcCkgPCAwKQorCQlnb3RvIHJ0YXR0cl9mYWlsdXJlOworCS4uLgorfQorCitBIHN0cnVjdCB0Y19zdGF0cyB3aWxsIGJlIGZpbGxlZCBvdXQgZHVyaW5nIGduZXRfc3RhdHNfY29weV8qIGNhbGxzCithbmQgYXBwZW5kZWQgdG8gdGhlIHNrYi4gVENBX1hTVEFUUyBpcyBwcm92aWRlZCBpZiBnbmV0X3N0YXRzX2NvcHlfYXBwCit3YXMgY2FsbGVkLgorCisKK0xvY2tpbmc6CistLS0tLS0tLQorCitMb2NrcyBhcmUgdGFrZW4gYmVmb3JlIHdyaXRpbmcgYW5kIHJlbGVhc2VkIG9uY2UgYWxsIHN0YXRpc3RpY3MgaGF2ZQorYmVlbiB3cml0dGVuLiBMb2NrcyBhcmUgYWx3YXlzIHJlbGVhc2VkIGluIGNhc2Ugb2YgYW4gZXJyb3IuIFlvdQorYXJlIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgc3VyZSB0aGF0IHRoZSBsb2NrIGlzIGluaXRpYWxpemVkLgorCisKK1JhdGUgRXN0aW1hdG9yOgorLS0tLS0tLS0tLS0tLS0KKworMCkgUHJlcGFyZSBhbiBlc3RpbWF0b3IgYXR0cmlidXRlLiBNb3N0IGxpa2VseSB0aGlzIHdvdWxkIGJlIGluIHVzZXIKKyAgIHNwYWNlLiBUaGUgdmFsdWUgb2YgdGhpcyBUTFYgc2hvdWxkIGNvbnRhaW4gYSB0Y19lc3RpbWF0b3Igc3RydWN0dXJlLgorICAgQXMgdXN1YWwsIHN1Y2ggYSBUTFYgbmVlcyB0byBiZSAzMiBiaXQgYWxpZ25lZCBhbmQgdGhlcmVmb3JlIHRoZQorICAgbGVuZ3RoIG5lZWRzIHRvIGJlIGFwcHJvcHJpYXRlbHkgc2V0IGV0Yy4gVGhlIGVzdGltYXRvciBpbnRlcnZhbAorICAgYW5kIGV3bWEgbG9nIG5lZWQgdG8gYmUgY29udmVydGVkIHRvIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZXMuCisgICB0Y19lc3RpbWF0b3IuYzo6dGNfc2V0dXBfZXN0aW1hdG9yKCkgaXMgYWR2aXNhYmxlIHRvIGJlIHVzZWQgYXMgdGhlCisgICBjb252ZXJzaW9uIHJvdXRpbmUuIEl0IGRvZXMgYSBmZXcgY2xldmVyIHRoaW5ncy4gSXQgdGFrZXMgYSB0aW1lCisgICBpbnRlcnZhbCBpbiBtaWNyb3NlY3MsIGEgdGltZSBjb25zdGFudCBhbHNvIGluIG1pY3Jvc2VjcyBhbmQgYSBzdHJ1Y3QKKyAgIHRjX2VzdGltYXRvciB0byAgYmUgcG9wdWxhdGVkLiBUaGUgcmV0dXJuZWQgdGNfZXN0aW1hdG9yIGNhbiBiZQorICAgdHJhbnNwb3J0ZWQgdG8gdGhlIGtlcm5lbC4gIFRyYW5zZmVyIHN1Y2ggYSBzdHJ1Y3R1cmUgaW4gYSBUTFYgb2YgdHlwZQorICAgVENBX1JBVEUgdG8geW91ciBjb2RlIGluIHRoZSBrZXJuZWwuCisKK0luIHRoZSBrZXJuZWwgd2hlbiBzZXR0aW5nIHVwOgorMSkgbWFrZSBzdXJlIHlvdSBoYXZlIGJhc2ljIHN0YXRzIGFuZCByYXRlIHN0YXRzIHNldHVwIGZpcnN0LgorMikgbWFrZSBzdXJlIHlvdSBoYXZlIGluaXRpYWxpemVkIHN0YXRzIGxvY2sgdGhhdCBpcyB1c2VkIHRvIHNldHVwIHN1Y2gKKyAgIHN0YXRzLgorMykgTm93IGluaXRpYWxpemUgYSBuZXcgZXN0aW1hdG9yOgorCisgICBpbnQgcmV0ID0gZ2VuX25ld19lc3RpbWF0b3IobXlfYmFzaWNzdGF0cyxteV9yYXRlX2VzdF9zdGF0cywKKyAgICAgICBteXN0YXRzX2xvY2ssIGF0dHJfd2l0aF90Y2VzdGltYXRvcl9zdHJ1Y3QpOworCisgICBpZiByZXQgPT0gMAorICAgICAgIHN1Y2Nlc3MKKyAgIGVsc2UKKyAgICAgICBmYWlsZWQKKworRnJvbSBub3cgb24sIGV2ZXJ5dGltZSB5b3UgZHVtcCBteV9yYXRlX2VzdF9zdGF0cyBpdCB3aWxsIGNvbnRhaW4KK3VwdG9kYXRlIGluZm8uCisKK09uY2UgeW91IGFyZSBkb25lLCBjYWxsIGdlbl9raWxsX2VzdGltYXRvcihteV9iYXNpY3N0YXRzLAorbXlfcmF0ZV9lc3Rfc3RhdHMpIE1ha2Ugc3VyZSB0aGF0IG15X2Jhc2ljc3RhdHMgYW5kIG15X3JhdGVfZXN0X3N0YXRzCithcmUgc3RpbGwgdmFsaWQgKGkuZSBzdGlsbCBleGlzdCkgYXQgdGhlIHRpbWUgb2YgbWFraW5nIHRoaXMgY2FsbC4KKworCitBdXRob3JzOgorLS0tLS0tLS0KK1Rob21hcyBHcmFmIDx0Z3JhZkBzdXVnLmNoPgorSmFtYWwgSGFkaSBTYWxpbSA8aGFkaUBjeWJlcnVzLmNhPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2dlbmVyaWMtaGRsYy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZ2VuZXJpYy1oZGxjLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDFkYzZiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2dlbmVyaWMtaGRsYy50eHQKQEAgLTAsMCArMSwxMzEgQEAKK0dlbmVyaWMgSERMQyBsYXllcgorS3J6eXN6dG9mIEhhbGFzYSA8a2hjQHBtLndhdy5wbD4KK0phbnVhcnksIDIwMDMKKworCitHZW5lcmljIEhETEMgbGF5ZXIgY3VycmVudGx5IHN1cHBvcnRzOgorLSBGcmFtZSBSZWxheSAoQU5TSSwgQ0NJVFQgYW5kIG5vIExNSSksIHdpdGggQVJQIHN1cHBvcnQgKG5vIEluQVJQKS4KKyAgTm9ybWFsIChyb3V0ZWQpIGFuZCBFdGhlcm5ldC1icmlkZ2VkIChFdGhlcm5ldCBkZXZpY2UgZW11bGF0aW9uKQorICBpbnRlcmZhY2VzIGNhbiBzaGFyZSBhIHNpbmdsZSBQVkMuCistIHJhdyBIRExDIC0gZWl0aGVyIElQIChJUHY0KSBpbnRlcmZhY2Ugb3IgRXRoZXJuZXQgZGV2aWNlIGVtdWxhdGlvbi4KKy0gQ2lzY28gSERMQywKKy0gUFBQICh1c2VzIHN5bmNwcHAuYyksCistIFguMjUgKHVzZXMgWC4yNSByb3V0aW5lcykuCisKK1RoZXJlIGFyZSBoYXJkd2FyZSBkcml2ZXJzIGZvciB0aGUgZm9sbG93aW5nIGNhcmRzOgorLSBDMTAxIGJ5IE1veGEgVGVjaG5vbG9naWVzIENvLiwgTHRkLgorLSBSSVNDb20vTjIgYnkgU0RMIENvbW11bmljYXRpb25zIEluYy4KKy0gYW5kIG90aGVycywgc29tZSBub3QgaW4gdGhlIG9mZmljaWFsIGtlcm5lbC4KKworRXRoZXJuZXQgZGV2aWNlIGVtdWxhdGlvbiAodXNpbmcgSERMQyBvciBGcmFtZS1SZWxheSBQVkMpIGlzIGNvbXBhdGlibGUKK3dpdGggSUVFRSA4MDIuMVEgKFZMQU5zKSBhbmQgODAyLjFEIChFdGhlcm5ldCBicmlkZ2luZykuCisKKworTWFrZSBzdXJlIHRoZSBoZGxjLm8gYW5kIHRoZSBoYXJkd2FyZSBkcml2ZXIgYXJlIGxvYWRlZC4gSXQgc2hvdWxkCitjcmVhdGUgYSBudW1iZXIgb2YgImhkbGMiIChoZGxjMCBldGMpIG5ldHdvcmsgZGV2aWNlcywgb25lIGZvciBlYWNoCitXQU4gcG9ydC4gWW91J2xsIG5lZWQgdGhlICJzZXRoZGxjIiB1dGlsaXR5LCBnZXQgaXQgZnJvbToKKwlodHRwOi8vaHEucG0ud2F3LnBsL2hkbGMvCisKK0NvbXBpbGUgc2V0aGRsYy5jIHV0aWxpdHk6CisJZ2NjIC1PMiAtV2FsbCAtbyBzZXRoZGxjIHNldGhkbGMuYworTWFrZSBzdXJlIHlvdSdyZSB1c2luZyBhIGNvcnJlY3QgdmVyc2lvbiBvZiBzZXRoZGxjIGZvciB5b3VyIGtlcm5lbC4KKworVXNlIHNldGhkbGMgdG8gc2V0IHBoeXNpY2FsIGludGVyZmFjZSwgY2xvY2sgcmF0ZSwgSERMQyBtb2RlIHVzZWQsCithbmQgYWRkIGFueSByZXF1aXJlZCBQVkNzIGlmIHVzaW5nIEZyYW1lIFJlbGF5LgorVXN1YWxseSB5b3Ugd2FudCBzb21ldGhpbmcgbGlrZToKKworCXNldGhkbGMgaGRsYzAgY2xvY2sgaW50IHJhdGUgMTI4MDAwCisJc2V0aGRsYyBoZGxjMCBjaXNjbyBpbnRlcnZhbCAxMCB0aW1lb3V0IDI1CitvcgorCXNldGhkbGMgaGRsYzAgcnMyMzIgY2xvY2sgZXh0CisJc2V0aGRsYyBoZGxjMCBmciBsbWkgYW5zaQorCXNldGhkbGMgaGRsYzAgY3JlYXRlIDk5CisJaWZjb25maWcgaGRsYzAgdXAKKwlpZmNvbmZpZyBwdmMwIGxvY2FsSVAgcG9pbnRvcG9pbnQgcmVtb3RlSVAKKworSW4gRnJhbWUgUmVsYXkgbW9kZSwgaWZjb25maWcgbWFzdGVyIGhkbGMgZGV2aWNlIHVwICh3aXRob3V0IGFzc2lnbmluZworYW55IElQIGFkZHJlc3MgdG8gaXQpIGJlZm9yZSB1c2luZyBwdmMgZGV2aWNlcy4KKworCitTZXR0aW5nIGludGVyZmFjZToKKworKiB2MzUgfCByczIzMiB8IHgyMSB8IHQxIHwgZTEgLSBzZXRzIHBoeXNpY2FsIGludGVyZmFjZSBmb3IgYSBnaXZlbiBwb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRoZSBjYXJkIGhhcyBzb2Z0d2FyZS1zZWxlY3RhYmxlIGludGVyZmFjZXMKKyAgbG9vcGJhY2sgLSBhY3RpdmF0ZSBoYXJkd2FyZSBsb29wYmFjayAoZm9yIHRlc3Rpbmcgb25seSkKKyogY2xvY2sgZXh0IC0gZXh0ZXJuYWwgY2xvY2sgKHVzZXMgRFRFIFJYIGFuZCBUWCBjbG9jaykKKyogY2xvY2sgaW50IC0gaW50ZXJuYWwgY2xvY2sgKHByb3ZpZGVzIGNsb2NrIHNpZ25hbCBvbiBEQ0UgY2xvY2sgb3V0cHV0KQorKiBjbG9jayB0eGludCAtIFRYIGludGVybmFsLCBSWCBleHRlcm5hbCAocHJvdmlkZXMgVFggY2xvY2sgb24gRENFIG91dHB1dCkKKyogY2xvY2sgdHhmcm9tcnggLSBUWCBjbG9jayBkZXJpdmVkIGZyb20gUlggY2xvY2sgKFRYIGNsb2NrIG9uIERDRSBvdXRwdXQpCisqIHJhdGUgLSBzZXRzIGNsb2NrIHJhdGUgaW4gYnBzIChub3QgcmVxdWlyZWQgZm9yIGV4dGVybmFsIGNsb2NrIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdHhmcm9tcngpCisKK1NldHRpbmcgcHJvdG9jb2w6CisKKyogaGRsYyAtIHNldHMgcmF3IEhETEMgKElQLW9ubHkpIG1vZGUKKyAgbnJ6IC8gbnJ6aSAvIGZtLW1hcmsgLyBmbS1zcGFjZSAvIG1hbmNoZXN0ZXIgLSBzZXRzIHRyYW5zbWlzc2lvbiBjb2RlCisgIG5vLXBhcml0eSAvIGNyYzE2IC8gY3JjMTYtcHIwIChDUkMxNiB3aXRoIHByZXNldCB6ZXJvcykgLyBjcmMzMi1pdHUKKyAgY3JjMTYtaXR1IChDUkMxNiB3aXRoIElUVS1UIHBvbHlub21pYWwpIC8gY3JjMTYtaXR1LXByMCAtIHNldHMgcGFyaXR5CisKKyogaGRsYy1ldGggLSBFdGhlcm5ldCBkZXZpY2UgZW11bGF0aW9uIHVzaW5nIEhETEMuIFBhcml0eSBhbmQgZW5jb2RpbmcKKyAgYXMgYWJvdmUuCisKKyogY2lzY28gLSBzZXRzIENpc2NvIEhETEMgbW9kZSAoSVAsIElQdjYgYW5kIElQWCBzdXBwb3J0ZWQpCisgIGludGVydmFsIC0gdGltZSBpbiBzZWNvbmRzIGJldHdlZW4ga2VlcGFsaXZlIHBhY2tldHMKKyAgdGltZW91dCAtIHRpbWUgaW4gc2Vjb25kcyBhZnRlciBsYXN0IHJlY2VpdmVkIGtlZXBhbGl2ZSBwYWNrZXQgYmVmb3JlCisgICAgICAgICAgICB3ZSBhc3N1bWUgdGhlIGxpbmsgaXMgZG93bgorCisqIHBwcCAtIHNldHMgc3luY2hyb25vdXMgUFBQIG1vZGUKKworKiB4MjUgLSBzZXRzIFguMjUgbW9kZQorCisqIGZyIC0gRnJhbWUgUmVsYXkgbW9kZQorICBsbWkgYW5zaSAvIGNjaXR0IC8gbm9uZSAtIExNSSAobGluayBtYW5hZ2VtZW50KSB0eXBlCisgIGRjZSAtIEZyYW1lIFJlbGF5IERDRSAobmV0d29yaykgc2lkZSBMTUkgaW5zdGVhZCBvZiBkZWZhdWx0IERURSAodXNlcikuCisgIEl0IGhhcyBub3RoaW5nIHRvIGRvIHdpdGggY2xvY2tzIQorICB0MzkxIC0gbGluayBpbnRlZ3JpdHkgdmVyaWZpY2F0aW9uIHBvbGxpbmcgdGltZXIgKGluIHNlY29uZHMpIC0gdXNlcgorICB0MzkyIC0gcG9sbGluZyB2ZXJpZmljYXRpb24gdGltZXIgKGluIHNlY29uZHMpIC0gbmV0d29yaworICBuMzkxIC0gZnVsbCBzdGF0dXMgcG9sbGluZyBjb3VudGVyIC0gdXNlcgorICBuMzkyIC0gZXJyb3IgdGhyZXNob2xkIC0gYm90aCB1c2VyIGFuZCBuZXR3b3JrCisgIG4zOTMgLSBtb25pdG9yZWQgZXZlbnRzIGNvdW50IC0gYm90aCB1c2VyIGFuZCBuZXR3b3JrCisKK0ZyYW1lLVJlbGF5IG9ubHk6CisqIGNyZWF0ZSBuIHwgZGVsZXRlIG4gLSBhZGRzIC8gZGVsZXRlcyBQVkMgaW50ZXJmYWNlIHdpdGggRExDSSAjbi4KKyAgTmV3bHkgY3JlYXRlZCBpbnRlcmZhY2Ugd2lsbCBiZSBuYW1lZCBwdmMwLCBwdmMxIGV0Yy4KKworKiBjcmVhdGUgZXRoZXIgbiB8IGRlbGV0ZSBldGhlciBuIC0gYWRkcyBhIGRldmljZSBmb3IgRXRoZXJuZXQtYnJpZGdlZAorICBmcmFtZXMuIFRoZSBkZXZpY2Ugd2lsbCBiZSBuYW1lZCBwdmNldGgwLCBwdmNldGgxIGV0Yy4KKworCisKKworQm9hcmQtc3BlY2lmaWMgaXNzdWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbjIubyBhbmQgYzEwMS5vIG5lZWQgcGFyYW1ldGVycyB0byB3b3JrOgorCisJaW5zbW9kIG4yIGh3PWlvLGlycSxyYW0scG9ydHNbOmlvLGlycSwuLi5dCitleGFtcGxlOgorCWluc21vZCBuMiBodz0weDMwMCwxMCwweEQwMDAwLDAxCisKK29yCisJaW5zbW9kIGMxMDEgaHc9aXJxLHJhbVs6aXJxLC4uLl0KK2V4YW1wbGU6CisJaW5zbW9kIGMxMDEgaHc9OSwweGRjMDAwCisKK0lmIGJ1aWx0IGludG8gdGhlIGtlcm5lbCwgdGhlc2UgZHJpdmVycyBuZWVkIGtlcm5lbCAoY29tbWFuZCBsaW5lKSBwYXJhbWV0ZXJzOgorCW4yLmh3PWlvLGlycSxyYW0scG9ydHM6Li4uCitvcgorCWMxMDEuaHc9aXJxLHJhbTouLi4KKworCisKK0lmIHlvdSBoYXZlIGEgcHJvYmxlbSB3aXRoIE4yIG9yIEMxMDEgY2FyZCwgeW91IGNhbiBpc3N1ZSB0aGUgInByaXZhdGUiCitjb21tYW5kIHRvIHNlZSBwb3J0J3MgcGFja2V0IGRlc2NyaXB0b3IgcmluZ3MgKGluIGtlcm5lbCBsb2dzKToKKworCXNldGhkbGMgaGRsYzAgcHJpdmF0ZQorCitUaGUgaGFyZHdhcmUgZHJpdmVyIGhhcyB0byBiZSBidWlsZCB3aXRoIENPTkZJR19IRExDX0RFQlVHX1JJTkdTLgorQXR0YWNoaW5nIHRoaXMgaW5mbyB0byBidWcgcmVwb3J0cyB3b3VsZCBiZSBoZWxwZnVsLiBBbnl3YXksIGxldCBtZSBrbm93CitpZiB5b3UgaGF2ZSBwcm9ibGVtcyB1c2luZyB0aGlzLgorCitGb3IgcGF0Y2hlcyBhbmQgb3RoZXIgaW5mbyBsb29rIGF0IGh0dHA6Ly9ocS5wbS53YXcucGwvaGRsYy8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pZmVuc2xhdmUuYyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pZmVuc2xhdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzE1ZDIwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lmZW5zbGF2ZS5jCkBAIC0wLDAgKzEsMTExMCBAQAorLyogTW9kZTogQzsKKyAqIGlmZW5zbGF2ZS5jOiBDb25maWd1cmUgbmV0d29yayBpbnRlcmZhY2VzIGZvciBwYXJhbGxlbCByb3V0aW5nLgorICoKKyAqCVRoaXMgcHJvZ3JhbSBjb250cm9scyB0aGUgTGludXggaW1wbGVtZW50YXRpb24gb2YgcnVubmluZyBtdWx0aXBsZQorICoJbmV0d29yayBpbnRlcmZhY2VzIGluIHBhcmFsbGVsLgorICoKKyAqIEF1dGhvcjoJRG9uYWxkIEJlY2tlciA8YmVja2VyQGNlc2Rpcy5nc2ZjLm5hc2EuZ292PgorICoJCUNvcHlyaWdodCAxOTk0LTE5OTYgRG9uYWxkIEJlY2tlcgorICoKKyAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQKKyAqCQlhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKgkJTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKglUaGUgYXV0aG9yIG1heSBiZSByZWFjaGVkIGFzIGJlY2tlckBDRVNESVMuZ3NmYy5uYXNhLmdvdiwgb3IgQy9PCisgKglDZW50ZXIgb2YgRXhjZWxsZW5jZSBpbiBTcGFjZSBEYXRhIGFuZCBJbmZvcm1hdGlvbiBTY2llbmNlcworICoJICAgQ29kZSA5MzAuNSwgR29kZGFyZCBTcGFjZSBGbGlnaHQgQ2VudGVyLCBHcmVlbmJlbHQgTUQgMjA3NzEKKyAqCisgKiAgQ2hhbmdlcyA6CisgKiAgICAtIDIwMDAvMTAvMDIgV2lsbHkgVGFycmVhdSA8d2lsbHkgYXQgbWV0YS14Lm9yZz4gOgorICogICAgICAgLSBmZXcgZml4ZXMuIE1hc3RlcidzIE1BQyBhZGRyZXNzIGlzIG5vdyBjb3JyZWN0bHkgdGFrZW4gZnJvbQorICogICAgICAgICB0aGUgZmlyc3QgZGV2aWNlIHdoZW4gbm90IHByZXZpb3VzbHkgc2V0IDsKKyAqICAgICAgIC0gZGV0YWNoIHN1cHBvcnQgOiBjYWxsIEJPTkRfUkVMRUFTRSB0byBkZXRhY2ggYW4gZW5zbGF2ZWQgaW50ZXJmYWNlLgorICogICAgICAgLSBnaXZlIGEgbWluaS1ob3d0byBmcm9tIGNvbW1hbmQtbGluZSBoZWxwIDogIyBpZmVuc2xhdmUgLWgKKyAqCisgKiAgICAtIDIwMDEvMDIvMTYgQ2hhZCBOLiBUaW5kZWwgPGN0aW5kZWwgYXQgaWVlZSBkb3Qgb3JnPiA6CisgKiAgICAgICAtIE1hc3RlciBpcyBub3cgYnJvdWdodCBkb3duIGJlZm9yZSBzZXR0aW5nIHRoZSBNQUMgYWRkcmVzcy4gIEluCisgKiAgICAgICAgIHRoZSAyLjQga2VybmVsIHlvdSBjYW4ndCBjaGFuZ2UgdGhlIE1BQyBhZGRyZXNzIHdoaWxlIHRoZSBkZXZpY2UgaXMKKyAqICAgICAgICAgdXAgYmVjYXVzZSB5b3UgZ2V0IEVCVVNZLgorICoKKyAqICAgIC0gMjAwMS8wOS8xMyBUYWthbyBJbmRvaCA8aW5kb3UgZG90IHRha2FvIGF0IGpwIGRvdCBmdWppdHN1IGRvdCBjb20+CisgKiAgICAgICAtIEFkZGVkIHRoZSBhYmlsaXR5IHRvIGNoYW5nZSB0aGUgYWN0aXZlIGludGVyZmFjZSBvbiBhIG1vZGUgMSBib25kCisgKiAgICAgICAgIGF0IHJ1bnRpbWUuCisgKgorICogICAgLSAyMDAxLzEwLzIzIENoYWQgTi4gVGluZGVsIDxjdGluZGVsIGF0IGllZWUgZG90IG9yZz4gOgorICogICAgICAgLSBObyBsb25nZXIgc2V0IHRoZSBNQUMgYWRkcmVzcyBvZiB0aGUgbWFzdGVyLiAgVGhlIGJvbmQgZGV2aWNlIHdpbGwKKyAqICAgICAgICAgdGFrZSBjYXJlIG9mIHRoaXMgaXRzZWxmCisgKiAgICAgICAtIFRyeSB0aGUgU0lPQyoqKiB2ZXJzaW9ucyBvZiB0aGUgYm9uZGluZyBpb2N0bHMgYmVmb3JlIHVzaW5nIHRoZQorICogICAgICAgICBvbGQgdmVyc2lvbnMKKyAqICAgIC0gMjAwMi8wMi8xOCBFcmlrIEhhYmJpbmdhIDxlcmlrX2hhYmJpbmdhIEAgaHAgZG90IGNvbT4gOgorICogICAgICAgLSBpZnIyLmlmcl9mbGFncyB3YXMgbm90IGluaXRpYWxpemVkIGluIHRoZSBod2FkZHJfbm90c2V0IGNhc2UsCisgKiAgICAgICAgIFNJT0NHSUZGTEFHUyBub3cgY2FsbGVkIGJlZm9yZSBod2FkZHJfbm90c2V0IHRlc3QKKyAqCisgKiAgICAtIDIwMDIvMTAvMzEgVG9ueSBDdXJlaW5ndG9uIDx0b255LmN1cmVpbmd0b24gKiBocF9jb20+IDoKKyAqICAgICAgIC0gSWYgdGhlIG1hc3RlciBkb2VzIG5vdCBoYXZlIGEgaGFyZHdhcmUgYWRkcmVzcyB3aGVuIHRoZSBmaXJzdCBzbGF2ZQorICogICAgICAgICBpcyBlbnNsYXZlZCwgdGhlIG1hc3RlciBpcyBhc3NpZ25lZCB0aGUgaGFyZHdhcmUgYWRkcmVzcyBvZiB0aGF0CisgKiAgICAgICAgIHNsYXZlIC0gdGhlcmUgaXMgYSBjb21tZW50IGluIGJvbmRpbmcuYyBzdGF0aW5nICJpZmVuc2xhdmUgdGFrZXMKKyAqICAgICAgICAgY2FyZSBvZiB0aGlzIG5vdy4iIFRoaXMgY29ycmVjdHMgdGhlIHByb2JsZW0gb2Ygc2xhdmVzIGhhdmluZworICogICAgICAgICBkaWZmZXJlbnQgaGFyZHdhcmUgYWRkcmVzc2VzIGluIGFjdGl2ZS1iYWNrdXAgbW9kZSB3aGVuCisgKiAgICAgICAgIG11bHRpcGxlIGludGVyZmFjZXMgYXJlIHNwZWNpZmllZCBvbiBhIHNpbmdsZSBpZmVuc2xhdmUgY29tbWFuZAorICogICAgICAgICAoaWZlbnNsYXZlIGJvbmQwIGV0aDAgZXRoMSkuCisgKgorICogICAgLSAyMDAzLzAzLzE4IC0gVHNpcHB5IE1lbmRlbHNvbiA8dHNpcHB5Lm1lbmRlbHNvbiBhdCBpbnRlbCBkb3QgY29tPiBhbmQKKyAqICAgICAgICAgICAgICAgICAgIFNobXVsaWsgSGVuIDxzaG11bGlrLmhlbiBhdCBpbnRlbCBkb3QgY29tPgorICogICAgICAgLSBNb3ZlZCBzZXR0aW5nIHRoZSBzbGF2ZSdzIG1hYyBhZGRyZXNzIGFuZCBvcGVubmluZyBpdCwgZnJvbQorICogICAgICAgICB0aGUgYXBwbGljYXRpb24gdG8gdGhlIGRyaXZlci4gVGhpcyBlbmFibGVzIHN1cHBvcnQgb2YgbW9kZXMKKyAqICAgICAgICAgdGhhdCBuZWVkIHRvIHVzZSB0aGUgdW5pcXVlIG1hYyBhZGRyZXNzIG9mIGVhY2ggc2xhdmUuCisgKiAgICAgICAgIFRoZSBkcml2ZXIgYWxzbyB0YWtlcyBjYXJlIG9mIGNsb3NpbmcgdGhlIHNsYXZlIGFuZCByZXN0b3JpbmcgaXRzCisgKiAgICAgICAgIG9yaWdpbmFsIG1hYyBhZGRyZXNzIHVwb24gcmVsZWFzZS4KKyAqICAgICAgICAgSW4gYWRkaXRpb24sIGJsb2NrIHBvc3NpYmlsaXR5IG9mIGVuc2xhdmluZyBiZWZvcmUgdGhlIG1hc3RlciBpcyB1cC4KKyAqICAgICAgICAgVGhpcyBwcmV2ZW50cyBwdXR0aW5nIHRoZSBzeXN0ZW0gaW4gYW4gdW5kZWZpbmVkIHN0YXRlLgorICoKKyAqICAgIC0gMjAwMy8wNS8wMSAtIEFtaXIgTm9hbSA8YW1pci5ub2FtIGF0IGludGVsIGRvdCBjb20+CisgKiAgICAgICAtIEFkZGVkIEFCSSB2ZXJzaW9uIGNvbnRyb2wgdG8gcmVzdG9yZSBjb21wYXRpYmlsaXR5IGJldHdlZW4KKyAqICAgICAgICAgbmV3L29sZCBpZmVuc2xhdmUgYW5kIG5ldy9vbGQgYm9uZGluZy4KKyAqICAgICAgIC0gUHJldmVudCBhZGRpbmcgYW4gYWRhcHRlciB0aGF0IGlzIGFscmVhZHkgYSBzbGF2ZS4KKyAqICAgICAgICAgRml4ZXMgdGhlIHByb2JsZW0gb2Ygc3RhbGxpbmcgdGhlIHRyYW5zbWlzc2lvbiBhbmQgbGVhdmluZworICogICAgICAgICB0aGUgc2xhdmUgaW4gYSBkb3duIHN0YXRlLgorICoKKyAqICAgIC0gMjAwMy8wNS8wMSAtIFNobXVsaWsgSGVuIDxzaG11bGlrLmhlbiBhdCBpbnRlbCBkb3QgY29tPgorICogICAgICAgLSBQcmV2ZW50IGVuc2xhdmluZyBpZiB0aGUgYm9uZCBkZXZpY2UgaXMgZG93bi4KKyAqICAgICAgICAgRml4ZXMgdGhlIHByb2JsZW0gb2YgbGVhdmluZyB0aGUgc3lzdGVtIGluIHVuc3RhYmxlIHN0YXRlIGFuZAorICogICAgICAgICBoYWx0aW5nIHdoZW4gdHJ5aW5nIHRvIHJlbW92ZSB0aGUgbW9kdWxlLgorICogICAgICAgLSBDbG9zZSBzb2NrZXQgb24gYWxsIGFibm9ybWFsIGV4aXN0cy4KKyAqICAgICAgIC0gQWRkIHZlcnNpb25pbmcgc2NoZW1lIHRoYXQgZm9sbG93cyB0aGF0IG9mIHRoZSBib25kaW5nIGRyaXZlci4KKyAqICAgICAgICAgY3VycmVudCB2ZXJzaW9uIGlzIDEuMC4wIGFzIGEgYmFzZSBsaW5lLgorICoKKyAqICAgIC0gMjAwMy8wNS8yMiAtIEpheSBWb3NidXJnaCA8ZnViYXIgYXQgdXMgZG90IGlibSBkb3QgY29tPgorICoJIC0gaWZlbnNsYXZlIC1jIHdhcyBicm9rZW47IGl0J3Mgbm93IGZpeGVkCisgKgkgLSBGaXhlZCBwcm9ibGVtIHdpdGggcm91dGVzIHZhbmlzaGluZyBmcm9tIG1hc3RlciBkdXJpbmcgZW5zbGF2ZQorICoJICAgcHJvY2Vzc2luZy4KKyAqCisgKiAgICAtIDIwMDMvMDUvMjcgLSBBbWlyIE5vYW0gPGFtaXIubm9hbSBhdCBpbnRlbCBkb3QgY29tPgorICoJIC0gRml4IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgaXNzdWVzOgorICoJICAgRm9yIGRyaXZlcnMgbm90IHVzaW5nIEFCSSB2ZXJzaW9ucywgc2xhdmUgd2FzIHNldCBkb3duIHdoaWxlCisgKgkgICBpdCBzaG91bGQgYmUgbGVmdCB1cCBiZWZvcmUgZW5zbGF2aW5nLgorICoJICAgQWxzbywgbWFzdGVyIHdhcyBub3Qgc2V0IGRvd24gYW5kIHRoZSBkZWZhdWx0IHNldF9tYWNfYWRkcmVzcygpCisgKgkgICB3b3VsZCBmYWlsIGFuZCBnZW5lcmF0ZSBhbiBlcnJvciBtZXNzYWdlIGluIHRoZSBzeXN0ZW0gbG9nLgorICogCSAtIEZvciBvcHRfYzogc2xhdmUgc2hvdWxkIG5vdCBiZSBzZXQgdG8gdGhlIG1hc3RlcidzIHNldHRpbmcKKyAqCSAgIHdoaWxlIGl0IGlzIHJ1bm5pbmcuIEl0IHdhcyBhbHJlYWR5IHNldCBkdXJpbmcgZW5zbGF2ZS4gVG8KKyAqCSAgIHNpbXBsaWZ5IHRoaW5ncywgaXQgaXMgbm93IGhhbmRlbGVkIHNlcGFyYXRlbHkuCisgKgorICogICAgLSAyMDAzLzEyLzAxIC0gU2htdWxpayBIZW4gPHNobXVsaWsuaGVuIGF0IGludGVsIGRvdCBjb20+CisgKgkgLSBDb2RlIGNsZWFudXAgYW5kIHN0eWxlIGNoYW5nZXMKKyAqCSAgIHNldCB2ZXJzaW9uIHRvIDEuMS4wCisgKi8KKworI2RlZmluZSBBUFBfVkVSU0lPTgkiMS4xLjAiCisjZGVmaW5lIEFQUF9SRUxEQVRFCSJEZWNlbWJlciAxLCAyMDAzIgorI2RlZmluZSBBUFBfTkFNRQkiaWZlbnNsYXZlIgorCitzdGF0aWMgY2hhciAqdmVyc2lvbiA9CitBUFBfTkFNRSAiLmM6diIgQVBQX1ZFUlNJT04gIiAoIiBBUFBfUkVMREFURSAiKVxuIgorIm8gRG9uYWxkIEJlY2tlciAoYmVja2VyQGNlc2Rpcy5nc2ZjLm5hc2EuZ292KS5cbiIKKyJvIERldGFjaCBzdXBwb3J0IGFkZGVkIG9uIDIwMDAvMTAvMDIgYnkgV2lsbHkgVGFycmVhdSAod2lsbHkgYXQgbWV0YS14Lm9yZykuXG4iCisibyAyLjQga2VybmVsIHN1cHBvcnQgYWRkZWQgb24gMjAwMS8wMi8xNiBieSBDaGFkIE4uIFRpbmRlbFxuIgorIiAgKGN0aW5kZWwgYXQgaWVlZSBkb3Qgb3JnKS5cbiI7CisKK3N0YXRpYyBjb25zdCBjaGFyICp1c2FnZV9tc2cgPQorIlVzYWdlOiBpZmVuc2xhdmUgWy1mXSA8bWFzdGVyLWlmPiA8c2xhdmUtaWY+IFs8c2xhdmUtaWY+Li4uXVxuIgorIiAgICAgICBpZmVuc2xhdmUgLWQgICA8bWFzdGVyLWlmPiA8c2xhdmUtaWY+IFs8c2xhdmUtaWY+Li4uXVxuIgorIiAgICAgICBpZmVuc2xhdmUgLWMgICA8bWFzdGVyLWlmPiA8c2xhdmUtaWY+XG4iCisiICAgICAgIGlmZW5zbGF2ZSAtLWhlbHBcbiI7CisKK3N0YXRpYyBjb25zdCBjaGFyICpoZWxwX21zZyA9CisiXG4iCisiICAgICAgIFRvIGNyZWF0ZSBhIGJvbmQgZGV2aWNlLCBzaW1wbHkgZm9sbG93IHRoZXNlIHRocmVlIHN0ZXBzIDpcbiIKKyIgICAgICAgLSBlbnN1cmUgdGhhdCB0aGUgcmVxdWlyZWQgZHJpdmVycyBhcmUgcHJvcGVybHkgbG9hZGVkIDpcbiIKKyIgICAgICAgICAjIG1vZHByb2JlIGJvbmRpbmcgOyBtb2Rwcm9iZSA8M2M1OXh8ZWVwcm8xMDB8cGNuZXQzMnx0dWxpcHwuLi4+XG4iCisiICAgICAgIC0gYXNzaWduIGFuIElQIGFkZHJlc3MgdG8gdGhlIGJvbmQgZGV2aWNlIDpcbiIKKyIgICAgICAgICAjIGlmY29uZmlnIGJvbmQwIDxhZGRyPiBuZXRtYXNrIDxtYXNrPiBicm9hZGNhc3QgPGJjYXN0PlxuIgorIiAgICAgICAtIGF0dGFjaCBhbGwgdGhlIGludGVyZmFjZXMgeW91IG5lZWQgdG8gdGhlIGJvbmQgZGV2aWNlIDpcbiIKKyIgICAgICAgICAjIGlmZW5zbGF2ZSBbey1mfC0tZm9yY2V9XSBib25kMCBldGgwIFtldGgxIFtldGgyXS4uLl1cbiIKKyIgICAgICAgICBJZiBib25kMCBkaWRuJ3QgaGF2ZSBhIE1BQyBhZGRyZXNzLCBpdCB3aWxsIHRha2UgZXRoMCdzLiBUaGVuLCBhbGxcbiIKKyIgICAgICAgICBpbnRlcmZhY2VzIGF0dGFjaGVkIEFGVEVSIHRoaXMgYXNzaWdubWVudCB3aWxsIGdldCB0aGUgc2FtZSBNQUMgYWRkci5cbiIKKyIgICAgICAgICAoZXhjZXB0IGZvciBBTEIvVExCIG1vZGVzKVxuIgorIlxuIgorIiAgICAgICBUbyBzZXQgdGhlIGJvbmQgZGV2aWNlIGRvd24gYW5kIGF1dG9tYXRpY2FsbHkgcmVsZWFzZSBhbGwgdGhlIHNsYXZlcyA6XG4iCisiICAgICAgICAgIyBpZmNvbmZpZyBib25kMCBkb3duXG4iCisiXG4iCisiICAgICAgIFRvIGRldGFjaCBhIGRlYWQgaW50ZXJmYWNlIHdpdGhvdXQgc2V0dGluZyB0aGUgYm9uZCBkZXZpY2UgZG93biA6XG4iCisiICAgICAgICAgIyBpZmVuc2xhdmUgey1kfC0tZGV0YWNofSBib25kMCBldGgwIFtldGgxIFtldGgyXS4uLl1cbiIKKyJcbiIKKyIgICAgICAgVG8gY2hhbmdlIGFjdGl2ZSBzbGF2ZSA6XG4iCisiICAgICAgICAgIyBpZmVuc2xhdmUgey1jfC0tY2hhbmdlLWFjdGl2ZX0gYm9uZDAgZXRoMFxuIgorIlxuIgorIiAgICAgICBUbyBzaG93IG1hc3RlciBpbnRlcmZhY2UgaW5mb1xuIgorIiAgICAgICAgICMgaWZlbnNsYXZlIGJvbmQwXG4iCisiXG4iCisiICAgICAgIFRvIHNob3cgYWxsIGludGVyZmFjZXMgaW5mb1xuIgorIiAgICAgICAjIGlmZW5zbGF2ZSB7LWF8LS1hbGwtaW50ZXJmYWNlc31cbiIKKyJcbiIKKyIgICAgICAgVG8gYmUgbW9yZSB2ZXJib3NlXG4iCisiICAgICAgICMgaWZlbnNsYXZlIHstdnwtLXZlcmJvc2V9IC4uLlxuIgorIlxuIgorIiAgICAgICAjIGlmZW5zbGF2ZSB7LXV8LS11c2FnZX0gICBTaG93IHVzYWdlXG4iCisiICAgICAgICMgaWZlbnNsYXZlIHstVnwtLXZlcnNpb259IFNob3cgdmVyc2lvblxuIgorIiAgICAgICAjIGlmZW5zbGF2ZSB7LWh8LS1oZWxwfSAgICBUaGlzIG1lc3NhZ2VcbiIKKyJcbiI7CisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGdldG9wdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9pZi5oPgorI2luY2x1ZGUgPG5ldC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2JvbmRpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NraW9zLmg+CisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHU2NDsJLyogaGFjaywgc28gd2UgbWF5IGluY2x1ZGUga2VybmVsJ3MgZXRodG9vbC5oICovCit0eXBlZGVmIF9fdWludDMyX3QgdTMyOwkJLyogZGl0dG8gKi8KK3R5cGVkZWYgX191aW50MTZfdCB1MTY7CQkvKiBkaXR0byAqLwordHlwZWRlZiBfX3VpbnQ4X3QgdTg7CQkvKiBkaXR0byAqLworI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKworc3RydWN0IG9wdGlvbiBsb25nb3B0c1tdID0geworCS8qIHsgbmFtZSAgaGFzX2FyZyAgKmZsYWcgIHZhbCB9ICovCisJeyJhbGwtaW50ZXJmYWNlcyIsCTAsIDAsICdhJ30sCS8qIFNob3cgYWxsIGludGVyZmFjZXMuICovCisJeyJjaGFuZ2UtYWN0aXZlIiwJMCwgMCwgJ2MnfSwJLyogQ2hhbmdlIHRoZSBhY3RpdmUgc2xhdmUuICAqLworCXsiZGV0YWNoIiwJCTAsIDAsICdkJ30sCS8qIERldGFjaCBhIHNsYXZlIGludGVyZmFjZS4gKi8KKwl7ImZvcmNlIiwJCTAsIDAsICdmJ30sCS8qIEZvcmNlIHRoZSBvcGVyYXRpb24uICovCisJeyJoZWxwIiwJCTAsIDAsICdoJ30sCS8qIEdpdmUgaGVscCAqLworCXsidXNhZ2UiLAkJMCwgMCwgJ3UnfSwJLyogR2l2ZSB1c2FnZSAqLworCXsidmVyYm9zZSIsCQkwLCAwLCAndid9LAkvKiBSZXBvcnQgZWFjaCBhY3Rpb24gdGFrZW4uICovCisJeyJ2ZXJzaW9uIiwJCTAsIDAsICdWJ30sCS8qIEVtaXQgdmVyc2lvbiBpbmZvcm1hdGlvbi4gKi8KKwl7IDAsIDAsIDAsIDB9Cit9OworCisvKiBDb21tYW5kLWxpbmUgZmxhZ3MuICovCit1bnNpZ25lZCBpbnQKK29wdF9hID0gMCwJLyogU2hvdy1hbGwtaW50ZXJmYWNlcyBmbGFnLiAqLworb3B0X2MgPSAwLAkvKiBDaGFuZ2UtYWN0aXZlLXNsYXZlIGZsYWcuICovCitvcHRfZCA9IDAsCS8qIERldGFjaCBhIHNsYXZlIGludGVyZmFjZS4gKi8KK29wdF9mID0gMCwJLyogRm9yY2UgdGhlIG9wZXJhdGlvbi4gKi8KK29wdF9oID0gMCwJLyogSGVscCAqLworb3B0X3UgPSAwLAkvKiBVc2FnZSAqLworb3B0X3YgPSAwLAkvKiBWZXJib3NlIGZsYWcuICovCitvcHRfViA9IDA7CS8qIFZlcnNpb24gKi8KKworaW50IHNrZmQgPSAtMTsJCS8qIEFGX0lORVQgc29ja2V0IGZvciBpb2N0bCgpIGNhbGxzLiovCitpbnQgYWJpX3ZlciA9IDA7CS8qIHVzZXJsYW5kIC0ga2VybmVsIEFCSSB2ZXJzaW9uICovCitpbnQgaHdhZGRyX3NldCA9IDA7CS8qIE1hc3RlcidzIGh3YWRkciBpcyBzZXQgKi8KK2ludCBzYXZlZF9lcnJubzsKKworc3RydWN0IGlmcmVxIG1hc3Rlcl9tdHUsIG1hc3Rlcl9mbGFncywgbWFzdGVyX2h3YWRkcjsKK3N0cnVjdCBpZnJlcSBzbGF2ZV9tdHUsIHNsYXZlX2ZsYWdzLCBzbGF2ZV9od2FkZHI7CisKK3N0cnVjdCBkZXZfaWZyIHsKKwlzdHJ1Y3QgaWZyZXEgKnJlcV9pZnI7CisJY2hhciAqcmVxX25hbWU7CisJaW50IHJlcV90eXBlOworfTsKKworc3RydWN0IGRldl9pZnIgbWFzdGVyX2lmcmFbXSA9IHsKKwl7Jm1hc3Rlcl9tdHUsICAgICAiU0lPQ0dJRk1UVSIsICAgICBTSU9DR0lGTVRVfSwKKwl7Jm1hc3Rlcl9mbGFncywgICAiU0lPQ0dJRkZMQUdTIiwgICBTSU9DR0lGRkxBR1N9LAorCXsmbWFzdGVyX2h3YWRkciwgICJTSU9DR0lGSFdBRERSIiwgIFNJT0NHSUZIV0FERFJ9LAorCXtOVUxMLCAiIiwgMH0KK307CisKK3N0cnVjdCBkZXZfaWZyIHNsYXZlX2lmcmFbXSA9IHsKKwl7JnNsYXZlX210dSwgICAgICJTSU9DR0lGTVRVIiwgICAgIFNJT0NHSUZNVFV9LAorCXsmc2xhdmVfZmxhZ3MsICAgIlNJT0NHSUZGTEFHUyIsICAgU0lPQ0dJRkZMQUdTfSwKKwl7JnNsYXZlX2h3YWRkciwgICJTSU9DR0lGSFdBRERSIiwgIFNJT0NHSUZIV0FERFJ9LAorCXtOVUxMLCAiIiwgMH0KK307CisKK3N0YXRpYyB2b2lkIGlmX3ByaW50KGNoYXIgKmlmbmFtZSk7CitzdGF0aWMgaW50IGdldF9kcnZfaW5mbyhjaGFyICptYXN0ZXJfaWZuYW1lKTsKK3N0YXRpYyBpbnQgZ2V0X2lmX3NldHRpbmdzKGNoYXIgKmlmbmFtZSwgc3RydWN0IGRldl9pZnIgaWZyYVtdKTsKK3N0YXRpYyBpbnQgZ2V0X3NsYXZlX2ZsYWdzKGNoYXIgKnNsYXZlX2lmbmFtZSk7CitzdGF0aWMgaW50IHNldF9tYXN0ZXJfaHdhZGRyKGNoYXIgKm1hc3Rlcl9pZm5hbWUsIHN0cnVjdCBzb2NrYWRkciAqaHdhZGRyKTsKK3N0YXRpYyBpbnQgc2V0X3NsYXZlX2h3YWRkcihjaGFyICpzbGF2ZV9pZm5hbWUsIHN0cnVjdCBzb2NrYWRkciAqaHdhZGRyKTsKK3N0YXRpYyBpbnQgc2V0X3NsYXZlX210dShjaGFyICpzbGF2ZV9pZm5hbWUsIGludCBtdHUpOworc3RhdGljIGludCBzZXRfaWZfZmxhZ3MoY2hhciAqaWZuYW1lLCBzaG9ydCBmbGFncyk7CitzdGF0aWMgaW50IHNldF9pZl91cChjaGFyICppZm5hbWUsIHNob3J0IGZsYWdzKTsKK3N0YXRpYyBpbnQgc2V0X2lmX2Rvd24oY2hhciAqaWZuYW1lLCBzaG9ydCBmbGFncyk7CitzdGF0aWMgaW50IGNsZWFyX2lmX2FkZHIoY2hhciAqaWZuYW1lKTsKK3N0YXRpYyBpbnQgc2V0X2lmX2FkZHIoY2hhciAqbWFzdGVyX2lmbmFtZSwgY2hhciAqc2xhdmVfaWZuYW1lKTsKK3N0YXRpYyBpbnQgY2hhbmdlX2FjdGl2ZShjaGFyICptYXN0ZXJfaWZuYW1lLCBjaGFyICpzbGF2ZV9pZm5hbWUpOworc3RhdGljIGludCBlbnNsYXZlKGNoYXIgKm1hc3Rlcl9pZm5hbWUsIGNoYXIgKnNsYXZlX2lmbmFtZSk7CitzdGF0aWMgaW50IHJlbGVhc2UoY2hhciAqbWFzdGVyX2lmbmFtZSwgY2hhciAqc2xhdmVfaWZuYW1lKTsKKyNkZWZpbmUgdl9wcmludChmbXQsIGFyZ3MuLi4pCVwKKwlpZiAob3B0X3YpCQlcCisJCWZwcmludGYoc3RkZXJyLCBmbXQsICMjIGFyZ3MgKQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWNoYXIgKipzcHAsICptYXN0ZXJfaWZuYW1lLCAqc2xhdmVfaWZuYW1lOworCWludCBjLCBpLCBydjsKKwlpbnQgcmVzID0gMDsKKwlpbnQgZXhjbHVzaXZlID0gMDsKKworCXdoaWxlICgoYyA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJhY2RmaHV2ViIsIGxvbmdvcHRzLCAwKSkgIT0gRU9GKSB7CisJCXN3aXRjaCAoYykgeworCQljYXNlICdhJzogb3B0X2ErKzsgZXhjbHVzaXZlKys7IGJyZWFrOworCQljYXNlICdjJzogb3B0X2MrKzsgZXhjbHVzaXZlKys7IGJyZWFrOworCQljYXNlICdkJzogb3B0X2QrKzsgZXhjbHVzaXZlKys7IGJyZWFrOworCQljYXNlICdmJzogb3B0X2YrKzsgZXhjbHVzaXZlKys7IGJyZWFrOworCQljYXNlICdoJzogb3B0X2grKzsgZXhjbHVzaXZlKys7IGJyZWFrOworCQljYXNlICd1Jzogb3B0X3UrKzsgZXhjbHVzaXZlKys7IGJyZWFrOworCQljYXNlICd2Jzogb3B0X3YrKzsgYnJlYWs7CisJCWNhc2UgJ1YnOiBvcHRfVisrOyBleGNsdXNpdmUrKzsgYnJlYWs7CisKKwkJY2FzZSAnPyc6CisJCQlmcHJpbnRmKHN0ZGVyciwgdXNhZ2VfbXNnKTsKKwkJCXJlcyA9IDI7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCS8qIG9wdGlvbnMgY2hlY2sgKi8KKwlpZiAoZXhjbHVzaXZlID4gMSkgeworCQlmcHJpbnRmKHN0ZGVyciwgdXNhZ2VfbXNnKTsKKwkJcmVzID0gMjsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKG9wdF92IHx8IG9wdF9WKSB7CisJCXByaW50Zih2ZXJzaW9uKTsKKwkJaWYgKG9wdF9WKSB7CisJCQlyZXMgPSAwOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlpZiAob3B0X3UpIHsKKwkJcHJpbnRmKHVzYWdlX21zZyk7CisJCXJlcyA9IDA7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChvcHRfaCkgeworCQlwcmludGYodXNhZ2VfbXNnKTsKKwkJcHJpbnRmKGhlbHBfbXNnKTsKKwkJcmVzID0gMDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogT3BlbiBhIGJhc2ljIHNvY2tldCAqLworCWlmICgoc2tmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKSkgPCAwKSB7CisJCXBlcnJvcigic29ja2V0Iik7CisJCXJlcyA9IDE7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChvcHRfYSkgeworCQlpZiAob3B0aW5kID09IGFyZ2MpIHsKKwkJCS8qIE5vIHJlbWFpbmluZyBhcmdzICovCisJCQkvKiBzaG93IGFsbCBpbnRlcmZhY2VzICovCisJCQlpZl9wcmludCgoY2hhciAqKU5VTEwpOworCQkJZ290byBvdXQ7CisJCX0gZWxzZSB7CisJCQkvKiBKdXN0IHNob3cgdXNhZ2UgKi8KKwkJCWZwcmludGYoc3RkZXJyLCB1c2FnZV9tc2cpOworCQkJcmVzID0gMjsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyogQ29weSB0aGUgaW50ZXJmYWNlIG5hbWUgKi8KKwlzcHAgPSBhcmd2ICsgb3B0aW5kOworCW1hc3Rlcl9pZm5hbWUgPSAqc3BwKys7CisKKwlpZiAobWFzdGVyX2lmbmFtZSA9PSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCB1c2FnZV9tc2cpOworCQlyZXMgPSAyOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBleGNoYW5nZSBhYmkgdmVyc2lvbiB3aXRoIGJvbmRpbmcgbW9kdWxlICovCisJcmVzID0gZ2V0X2Rydl9pbmZvKG1hc3Rlcl9pZm5hbWUpOworCWlmIChyZXMpIHsKKwkJZnByaW50ZihzdGRlcnIsCisJCQkiTWFzdGVyICclcyc6IEVycm9yOiBoYW5kc2hha2Ugd2l0aCBkcml2ZXIgZmFpbGVkLiAiCisJCQkiQWJvcnRpbmdcbiIsCisJCQltYXN0ZXJfaWZuYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJc2xhdmVfaWZuYW1lID0gKnNwcCsrOworCisJaWYgKHNsYXZlX2lmbmFtZSA9PSBOVUxMKSB7CisJCWlmIChvcHRfZCB8fCBvcHRfYykgeworCQkJZnByaW50ZihzdGRlcnIsIHVzYWdlX21zZyk7CisJCQlyZXMgPSAyOworCQkJZ290byBvdXQ7CisJCX0KKworCQkvKiBBIHNpbmdsZSBhcmcgbWVhbnMgc2hvdyB0aGUKKwkJICogY29uZmlndXJhdGlvbiBmb3IgdGhpcyBpbnRlcmZhY2UKKwkJICovCisJCWlmX3ByaW50KG1hc3Rlcl9pZm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXMgPSBnZXRfaWZfc2V0dGluZ3MobWFzdGVyX2lmbmFtZSwgbWFzdGVyX2lmcmEpOworCWlmIChyZXMpIHsKKwkJLyogUHJvYmFibHkgYSBnb29kIHJlYXNvbiBub3QgdG8gZ28gb24gKi8KKwkJZnByaW50ZihzdGRlcnIsCisJCQkiTWFzdGVyICclcyc6IEVycm9yOiBnZXQgc2V0dGluZ3MgZmFpbGVkOiAlcy4gIgorCQkJIkFib3J0aW5nXG4iLAorCQkJbWFzdGVyX2lmbmFtZSwgc3RyZXJyb3IocmVzKSk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIGNoZWNrIGlmIG1hc3RlciBpcyBpbmRlZWQgYSBtYXN0ZXI7CisJICogaWYgbm90IHRoZW4gZmFpbCBhbnkgb3BlcmF0aW9uCisJICovCisJaWYgKCEobWFzdGVyX2ZsYWdzLmlmcl9mbGFncyAmIElGRl9NQVNURVIpKSB7CisJCWZwcmludGYoc3RkZXJyLAorCQkJIklsbGVnYWwgb3BlcmF0aW9uOyB0aGUgc3BlY2lmaWVkIGludGVyZmFjZSAnJXMnICIKKwkJCSJpcyBub3QgYSBtYXN0ZXIuIEFib3J0aW5nXG4iLAorCQkJbWFzdGVyX2lmbmFtZSk7CisJCXJlcyA9IDE7CisJCWdvdG8gb3V0OworCX0KKworCS8qIGNoZWNrIGlmIG1hc3RlciBpcyB1cDsgaWYgbm90IHRoZW4gZmFpbCBhbnkgb3BlcmF0aW9uICovCisJaWYgKCEobWFzdGVyX2ZsYWdzLmlmcl9mbGFncyAmIElGRl9VUCkpIHsKKwkJZnByaW50ZihzdGRlcnIsCisJCQkiSWxsZWdhbCBvcGVyYXRpb247IHRoZSBzcGVjaWZpZWQgbWFzdGVyIGludGVyZmFjZSAiCisJCQkiJyVzJyBpcyBub3QgdXAuXG4iLAorCQkJbWFzdGVyX2lmbmFtZSk7CisJCXJlcyA9IDE7CisJCWdvdG8gb3V0OworCX0KKworCS8qIE9ubHkgZm9yIGVuc2xhdmluZyAqLworCWlmICghb3B0X2MgJiYgIW9wdF9kKSB7CisJCXNhX2ZhbWlseV90IG1hc3Rlcl9mYW1pbHkgPSBtYXN0ZXJfaHdhZGRyLmlmcl9od2FkZHIuc2FfZmFtaWx5OworCQl1bnNpZ25lZCBjaGFyICpod2FkZHIgPQorCQkJKHVuc2lnbmVkIGNoYXIgKiltYXN0ZXJfaHdhZGRyLmlmcl9od2FkZHIuc2FfZGF0YTsKKworCQkvKiBUaGUgZmFtaWx5ICcxJyBpcyBBUlBIUkRfRVRIRVIgZm9yIGV0aGVybmV0LiAqLworCQlpZiAobWFzdGVyX2ZhbWlseSAhPSAxICYmICFvcHRfZikgeworCQkJZnByaW50ZihzdGRlcnIsCisJCQkJIklsbGVnYWwgb3BlcmF0aW9uOiBUaGUgc3BlY2lmaWVkIG1hc3RlciAiCisJCQkJImludGVyZmFjZSAnJXMnIGlzIG5vdCBldGhlcm5ldC1saWtlLlxuICIKKwkJCQkiVGhpcyBwcm9ncmFtIGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCAiCisJCQkJImV0aGVybmV0LWxpa2UgbmV0d29yayBpbnRlcmZhY2VzLlxuICIKKwkJCQkiVXNlIHRoZSAnLWYnIG9wdGlvbiB0byBmb3JjZSB0aGUgIgorCQkJCSJvcGVyYXRpb24uXG4iLAorCQkJCW1hc3Rlcl9pZm5hbWUpOworCQkJcmVzID0gMTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJLyogQ2hlY2sgbWFzdGVyJ3MgaHcgYWRkciAqLworCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CisJCQlpZiAoaHdhZGRyW2ldICE9IDApIHsKKwkJCQlod2FkZHJfc2V0ID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChod2FkZHJfc2V0KSB7CisJCQl2X3ByaW50KCJjdXJyZW50IGhhcmR3YXJlIGFkZHJlc3Mgb2YgbWFzdGVyICclcycgIgorCQkJCSJpcyAlMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeCwgIgorCQkJCSJ0eXBlICVkXG4iLAorCQkJCW1hc3Rlcl9pZm5hbWUsCisJCQkJaHdhZGRyWzBdLCBod2FkZHJbMV0sCisJCQkJaHdhZGRyWzJdLCBod2FkZHJbM10sCisJCQkJaHdhZGRyWzRdLCBod2FkZHJbNV0sCisJCQkJbWFzdGVyX2ZhbWlseSk7CisJCX0KKwl9CisKKwkvKiBBY2NlcHRzIG9ubHkgb25lIHNsYXZlICovCisJaWYgKG9wdF9jKSB7CisJCS8qIGNoYW5nZSBhY3RpdmUgc2xhdmUgKi8KKwkJcmVzID0gZ2V0X3NsYXZlX2ZsYWdzKHNsYXZlX2lmbmFtZSk7CisJCWlmIChyZXMpIHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJTbGF2ZSAnJXMnOiBFcnJvcjogZ2V0IGZsYWdzIGZhaWxlZC4gIgorCQkJCSJBYm9ydGluZ1xuIiwKKwkJCQlzbGF2ZV9pZm5hbWUpOworCQkJZ290byBvdXQ7CisJCX0KKwkJcmVzID0gY2hhbmdlX2FjdGl2ZShtYXN0ZXJfaWZuYW1lLCBzbGF2ZV9pZm5hbWUpOworCQlpZiAocmVzKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiTWFzdGVyICclcycsIFNsYXZlICclcyc6IEVycm9yOiAiCisJCQkJIkNoYW5nZSBhY3RpdmUgZmFpbGVkXG4iLAorCQkJCW1hc3Rlcl9pZm5hbWUsIHNsYXZlX2lmbmFtZSk7CisJCX0KKwl9IGVsc2UgeworCQkvKiBBY2NlcHQgbXVsdGlwbGUgc2xhdmVzICovCisJCWRvIHsKKwkJCWlmIChvcHRfZCkgeworCQkJCS8qIGRldGFjaCBhIHNsYXZlIGludGVyZmFjZSBmcm9tIHRoZSBtYXN0ZXIgKi8KKwkJCQlydiA9IGdldF9zbGF2ZV9mbGFncyhzbGF2ZV9pZm5hbWUpOworCQkJCWlmIChydikgeworCQkJCQkvKiBDYW4ndCB3b3JrIHdpdGggdGhpcyBzbGF2ZS4gKi8KKwkJCQkJLyogcmVtZW1iZXIgdGhlIGVycm9yIGFuZCBza2lwIGl0Ki8KKwkJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCQkiU2xhdmUgJyVzJzogRXJyb3I6IGdldCBmbGFncyAiCisJCQkJCQkiZmFpbGVkLiBTa2lwcGluZ1xuIiwKKwkJCQkJCXNsYXZlX2lmbmFtZSk7CisJCQkJCXJlcyA9IHJ2OworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJcnYgPSByZWxlYXNlKG1hc3Rlcl9pZm5hbWUsIHNsYXZlX2lmbmFtZSk7CisJCQkJaWYgKHJ2KSB7CisJCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkJIk1hc3RlciAnJXMnLCBTbGF2ZSAnJXMnOiBFcnJvcjogIgorCQkJCQkJIlJlbGVhc2UgZmFpbGVkXG4iLAorCQkJCQkJbWFzdGVyX2lmbmFtZSwgc2xhdmVfaWZuYW1lKTsKKwkJCQkJcmVzID0gcnY7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBhdHRhY2ggYSBzbGF2ZSBpbnRlcmZhY2UgdG8gdGhlIG1hc3RlciAqLworCQkJCXJ2ID0gZ2V0X2lmX3NldHRpbmdzKHNsYXZlX2lmbmFtZSwgc2xhdmVfaWZyYSk7CisJCQkJaWYgKHJ2KSB7CisJCQkJCS8qIENhbid0IHdvcmsgd2l0aCB0aGlzIHNsYXZlLiAqLworCQkJCQkvKiByZW1lbWJlciB0aGUgZXJyb3IgYW5kIHNraXAgaXQqLworCQkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJCSJTbGF2ZSAnJXMnOiBFcnJvcjogZ2V0ICIKKwkJCQkJCSJzZXR0aW5ncyBmYWlsZWQ6ICVzLiAiCisJCQkJCQkiU2tpcHBpbmdcbiIsCisJCQkJCQlzbGF2ZV9pZm5hbWUsIHN0cmVycm9yKHJ2KSk7CisJCQkJCXJlcyA9IHJ2OworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJcnYgPSBlbnNsYXZlKG1hc3Rlcl9pZm5hbWUsIHNsYXZlX2lmbmFtZSk7CisJCQkJaWYgKHJ2KSB7CisJCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkJIk1hc3RlciAnJXMnLCBTbGF2ZSAnJXMnOiBFcnJvcjogIgorCQkJCQkJIkVuc2xhdmUgZmFpbGVkXG4iLAorCQkJCQkJbWFzdGVyX2lmbmFtZSwgc2xhdmVfaWZuYW1lKTsKKwkJCQkJcmVzID0gcnY7CisJCQkJfQorCQkJfQorCQl9IHdoaWxlICgoc2xhdmVfaWZuYW1lID0gKnNwcCsrKSAhPSBOVUxMKTsKKwl9CisKK291dDoKKwlpZiAoc2tmZCA+PSAwKSB7CisJCWNsb3NlKHNrZmQpOworCX0KKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBzaG9ydCBtaWZfZmxhZ3M7CisKKy8qIEdldCB0aGUgaW50ZWZhY2UgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBrZXJuZWwuICovCitzdGF0aWMgaW50IGlmX2dldGNvbmZpZyhjaGFyICppZm5hbWUpCit7CisJc3RydWN0IGlmcmVxIGlmcjsKKwlpbnQgbWV0cmljLCBtdHU7CS8qIFBhcmFtZXRlcnMgb2YgdGhlIG1hc3RlciBpbnRlcmZhY2UuICovCisJc3RydWN0IHNvY2thZGRyIGRzdGFkZHIsIGJyb2FkYWRkciwgbmV0bWFzazsKKwl1bnNpZ25lZCBjaGFyICpod2FkZHI7CisKKwlzdHJjcHkoaWZyLmlmcl9uYW1lLCBpZm5hbWUpOworCWlmIChpb2N0bChza2ZkLCBTSU9DR0lGRkxBR1MsICZpZnIpIDwgMCkKKwkJcmV0dXJuIC0xOworCW1pZl9mbGFncyA9IGlmci5pZnJfZmxhZ3M7CisJcHJpbnRmKCJUaGUgcmVzdWx0IG9mIFNJT0NHSUZGTEFHUyBvbiAlcyBpcyAleC5cbiIsCisJICAgICAgIGlmbmFtZSwgaWZyLmlmcl9mbGFncyk7CisKKwlzdHJjcHkoaWZyLmlmcl9uYW1lLCBpZm5hbWUpOworCWlmIChpb2N0bChza2ZkLCBTSU9DR0lGQUREUiwgJmlmcikgPCAwKQorCQlyZXR1cm4gLTE7CisJcHJpbnRmKCJUaGUgcmVzdWx0IG9mIFNJT0NHSUZBRERSIGlzICUyLjJ4LiUyLjJ4LiUyLjJ4LiUyLjJ4LlxuIiwKKwkgICAgICAgaWZyLmlmcl9hZGRyLnNhX2RhdGFbMF0sIGlmci5pZnJfYWRkci5zYV9kYXRhWzFdLAorCSAgICAgICBpZnIuaWZyX2FkZHIuc2FfZGF0YVsyXSwgaWZyLmlmcl9hZGRyLnNhX2RhdGFbM10pOworCisJc3RyY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1lKTsKKwlpZiAoaW9jdGwoc2tmZCwgU0lPQ0dJRkhXQUREUiwgJmlmcikgPCAwKQorCQlyZXR1cm4gLTE7CisKKwkvKiBHb3R0YSBjb252ZXJ0IGZyb20gJ2NoYXInIHRvIHVuc2lnbmVkIGZvciBwcmludGYoKS4gKi8KKwlod2FkZHIgPSAodW5zaWduZWQgY2hhciAqKWlmci5pZnJfaHdhZGRyLnNhX2RhdGE7CisJcHJpbnRmKCJUaGUgcmVzdWx0IG9mIFNJT0NHSUZIV0FERFIgaXMgdHlwZSAlZCAgIgorCSAgICAgICAiJTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMnguXG4iLAorCSAgICAgICBpZnIuaWZyX2h3YWRkci5zYV9mYW1pbHksIGh3YWRkclswXSwgaHdhZGRyWzFdLAorCSAgICAgICBod2FkZHJbMl0sIGh3YWRkclszXSwgaHdhZGRyWzRdLCBod2FkZHJbNV0pOworCisJc3RyY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1lKTsKKwlpZiAoaW9jdGwoc2tmZCwgU0lPQ0dJRk1FVFJJQywgJmlmcikgPCAwKSB7CisJCW1ldHJpYyA9IDA7CisJfSBlbHNlCisJCW1ldHJpYyA9IGlmci5pZnJfbWV0cmljOworCisJc3RyY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1lKTsKKwlpZiAoaW9jdGwoc2tmZCwgU0lPQ0dJRk1UVSwgJmlmcikgPCAwKQorCQltdHUgPSAwOworCWVsc2UKKwkJbXR1ID0gaWZyLmlmcl9tdHU7CisKKwlzdHJjcHkoaWZyLmlmcl9uYW1lLCBpZm5hbWUpOworCWlmIChpb2N0bChza2ZkLCBTSU9DR0lGRFNUQUREUiwgJmlmcikgPCAwKSB7CisJCW1lbXNldCgmZHN0YWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpOworCX0gZWxzZQorCQlkc3RhZGRyID0gaWZyLmlmcl9kc3RhZGRyOworCisJc3RyY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1lKTsKKwlpZiAoaW9jdGwoc2tmZCwgU0lPQ0dJRkJSREFERFIsICZpZnIpIDwgMCkgeworCQltZW1zZXQoJmJyb2FkYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpOworCX0gZWxzZQorCQlicm9hZGFkZHIgPSBpZnIuaWZyX2Jyb2FkYWRkcjsKKworCXN0cmNweShpZnIuaWZyX25hbWUsIGlmbmFtZSk7CisJaWYgKGlvY3RsKHNrZmQsIFNJT0NHSUZORVRNQVNLLCAmaWZyKSA8IDApIHsKKwkJbWVtc2V0KCZuZXRtYXNrLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSk7CisJfSBlbHNlCisJCW5ldG1hc2sgPSBpZnIuaWZyX25ldG1hc2s7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaWZfcHJpbnQoY2hhciAqaWZuYW1lKQoreworCWNoYXIgYnVmZlsxMDI0XTsKKwlzdHJ1Y3QgaWZjb25mIGlmYzsKKwlzdHJ1Y3QgaWZyZXEgKmlmcjsKKwlpbnQgaTsKKworCWlmIChpZm5hbWUgPT0gKGNoYXIgKilOVUxMKSB7CisJCWlmYy5pZmNfbGVuID0gc2l6ZW9mKGJ1ZmYpOworCQlpZmMuaWZjX2J1ZiA9IGJ1ZmY7CisJCWlmIChpb2N0bChza2ZkLCBTSU9DR0lGQ09ORiwgJmlmYykgPCAwKSB7CisJCQlwZXJyb3IoIlNJT0NHSUZDT05GIGZhaWxlZCIpOworCQkJcmV0dXJuOworCQl9CisKKwkJaWZyID0gaWZjLmlmY19yZXE7CisJCWZvciAoaSA9IGlmYy5pZmNfbGVuIC8gc2l6ZW9mKHN0cnVjdCBpZnJlcSk7IC0taSA+PSAwOyBpZnIrKykgeworCQkJaWYgKGlmX2dldGNvbmZpZyhpZnItPmlmcl9uYW1lKSA8IDApIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJIiVzOiB1bmtub3duIGludGVyZmFjZS5cbiIsCisJCQkJCWlmci0+aWZyX25hbWUpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpZiAoKChtaWZfZmxhZ3MgJiBJRkZfVVApID09IDApICYmICFvcHRfYSkgY29udGludWU7CisJCQkvKmlmZV9wcmludCgmaWZlKTsqLworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGlmX2dldGNvbmZpZyhpZm5hbWUpIDwgMCkgeworCQkJZnByaW50ZihzdGRlcnIsCisJCQkJIiVzOiB1bmtub3duIGludGVyZmFjZS5cbiIsIGlmbmFtZSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2Rydl9pbmZvKGNoYXIgKm1hc3Rlcl9pZm5hbWUpCit7CisJc3RydWN0IGlmcmVxIGlmcjsKKwlzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvIGluZm87CisJY2hhciAqZW5kcHRyOworCisJbWVtc2V0KCZpZnIsIDAsIHNpemVvZihpZnIpKTsKKwlzdHJuY3B5KGlmci5pZnJfbmFtZSwgbWFzdGVyX2lmbmFtZSwgSUZOQU1TSVopOworCWlmci5pZnJfZGF0YSA9IChjYWRkcl90KSZpbmZvOworCisJaW5mby5jbWQgPSBFVEhUT09MX0dEUlZJTkZPOworCXN0cm5jcHkoaW5mby5kcml2ZXIsICJpZmVuc2xhdmUiLCAzMik7CisJc25wcmludGYoaW5mby5md192ZXJzaW9uLCAzMiwgIiVkIiwgQk9ORF9BQklfVkVSU0lPTik7CisKKwlpZiAoaW9jdGwoc2tmZCwgU0lPQ0VUSFRPT0wsICZpZnIpIDwgMCkgeworCQlpZiAoZXJybm8gPT0gRU9QTk9UU1VQUCkgeworCQkJZ290byBvdXQ7CisJCX0KKworCQlzYXZlZF9lcnJubyA9IGVycm5vOworCQl2X3ByaW50KCJNYXN0ZXIgJyVzJzogRXJyb3I6IGdldCBib25kaW5nIGluZm8gZmFpbGVkICVzXG4iLAorCQkJbWFzdGVyX2lmbmFtZSwgc3RyZXJyb3Ioc2F2ZWRfZXJybm8pKTsKKwkJcmV0dXJuIDE7CisJfQorCisJYWJpX3ZlciA9IHN0cnRvdWwoaW5mby5md192ZXJzaW9uLCAmZW5kcHRyLCAwKTsKKwlpZiAoKmVuZHB0cikgeworICAgICAgICAgICAgICAgIHZfcHJpbnQoIk1hc3RlciAnJXMnOiBFcnJvcjogZ290IGludmFsaWQgc3RyaW5nIGFzIGFuIEFCSSAiCisJCQkidmVyc2lvbiBmcm9tIHRoZSBib25kaW5nIG1vZHVsZVxuIiwKKwkJCW1hc3Rlcl9pZm5hbWUpOworCQlyZXR1cm4gMTsKKwl9CisKK291dDoKKwl2X3ByaW50KCJBQkkgdmVyIGlzICVkXG4iLCBhYmlfdmVyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNoYW5nZV9hY3RpdmUoY2hhciAqbWFzdGVyX2lmbmFtZSwgY2hhciAqc2xhdmVfaWZuYW1lKQoreworCXN0cnVjdCBpZnJlcSBpZnI7CisJaW50IHJlcyA9IDA7CisKKwlpZiAoIShzbGF2ZV9mbGFncy5pZnJfZmxhZ3MgJiBJRkZfU0xBVkUpKSB7CisJCWZwcmludGYoc3RkZXJyLAorCQkJIklsbGVnYWwgb3BlcmF0aW9uOiBUaGUgc3BlY2lmaWVkIHNsYXZlIGludGVyZmFjZSAiCisJCQkiJyVzJyBpcyBub3QgYSBzbGF2ZVxuIiwKKwkJCXNsYXZlX2lmbmFtZSk7CisJCXJldHVybiAxOworCX0KKworCXN0cm5jcHkoaWZyLmlmcl9uYW1lLCBtYXN0ZXJfaWZuYW1lLCBJRk5BTVNJWik7CisJc3RybmNweShpZnIuaWZyX3NsYXZlLCBzbGF2ZV9pZm5hbWUsIElGTkFNU0laKTsKKwlpZiAoKGlvY3RsKHNrZmQsIFNJT0NCT05EQ0hBTkdFQUNUSVZFLCAmaWZyKSA8IDApICYmCisJICAgIChpb2N0bChza2ZkLCBCT05EX0NIQU5HRV9BQ1RJVkVfT0xELCAmaWZyKSA8IDApKSB7CisJCXNhdmVkX2Vycm5vID0gZXJybm87CisJCXZfcHJpbnQoIk1hc3RlciAnJXMnOiBFcnJvcjogU0lPQ0JPTkRDSEFOR0VBQ1RJVkUgZmFpbGVkOiAiCisJCQkiJXNcbiIsCisJCQltYXN0ZXJfaWZuYW1lLCBzdHJlcnJvcihzYXZlZF9lcnJubykpOworCQlyZXMgPSAxOworCX0KKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgZW5zbGF2ZShjaGFyICptYXN0ZXJfaWZuYW1lLCBjaGFyICpzbGF2ZV9pZm5hbWUpCit7CisJc3RydWN0IGlmcmVxIGlmcjsKKwlpbnQgcmVzID0gMDsKKworCWlmIChzbGF2ZV9mbGFncy5pZnJfZmxhZ3MgJiBJRkZfU0xBVkUpIHsKKwkJZnByaW50ZihzdGRlcnIsCisJCQkiSWxsZWdhbCBvcGVyYXRpb246IFRoZSBzcGVjaWZpZWQgc2xhdmUgaW50ZXJmYWNlICIKKwkJCSInJXMnIGlzIGFscmVhZHkgYSBzbGF2ZVxuIiwKKwkJCXNsYXZlX2lmbmFtZSk7CisJCXJldHVybiAxOworCX0KKworCXJlcyA9IHNldF9pZl9kb3duKHNsYXZlX2lmbmFtZSwgc2xhdmVfZmxhZ3MuaWZyX2ZsYWdzKTsKKwlpZiAocmVzKSB7CisJCWZwcmludGYoc3RkZXJyLAorCQkJIlNsYXZlICclcyc6IEVycm9yOiBicmluZyBpbnRlcmZhY2UgZG93biBmYWlsZWRcbiIsCisJCQlzbGF2ZV9pZm5hbWUpOworCQlyZXR1cm4gcmVzOworCX0KKworCWlmIChhYmlfdmVyIDwgMikgeworCQkvKiBPbGRlciBib25kaW5nIHZlcnNpb25zIHdvdWxkIHBhbmljIGlmIHRoZSBzbGF2ZSBoYXMgbm8gSVAKKwkJICogYWRkcmVzcywgc28gZ2V0IHRoZSBJUCBzZXR0aW5nIGZyb20gdGhlIG1hc3Rlci4KKwkJICovCisJCXJlcyA9IHNldF9pZl9hZGRyKG1hc3Rlcl9pZm5hbWUsIHNsYXZlX2lmbmFtZSk7CisJCWlmIChyZXMpIHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJTbGF2ZSAnJXMnOiBFcnJvcjogc2V0IGFkZHJlc3MgZmFpbGVkXG4iLAorCQkJCXNsYXZlX2lmbmFtZSk7CisJCQlyZXR1cm4gcmVzOworCQl9CisJfSBlbHNlIHsKKwkJcmVzID0gY2xlYXJfaWZfYWRkcihzbGF2ZV9pZm5hbWUpOworCQlpZiAocmVzKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiU2xhdmUgJyVzJzogRXJyb3I6IGNsZWFyIGFkZHJlc3MgZmFpbGVkXG4iLAorCQkJCXNsYXZlX2lmbmFtZSk7CisJCQlyZXR1cm4gcmVzOworCQl9CisJfQorCisJaWYgKG1hc3Rlcl9tdHUuaWZyX210dSAhPSBzbGF2ZV9tdHUuaWZyX210dSkgeworCQlyZXMgPSBzZXRfc2xhdmVfbXR1KHNsYXZlX2lmbmFtZSwgbWFzdGVyX210dS5pZnJfbXR1KTsKKwkJaWYgKHJlcykgeworCQkJZnByaW50ZihzdGRlcnIsCisJCQkJIlNsYXZlICclcyc6IEVycm9yOiBzZXQgTVRVIGZhaWxlZFxuIiwKKwkJCQlzbGF2ZV9pZm5hbWUpOworCQkJcmV0dXJuIHJlczsKKwkJfQorCX0KKworCWlmIChod2FkZHJfc2V0KSB7CisJCS8qIE1hc3RlciBhbHJlYWR5IGhhcyBhbiBod2FkZHIKKwkJICogc28gc2V0IGl0J3MgaHdhZGRyIHRvIHRoZSBzbGF2ZQorCQkgKi8KKwkJaWYgKGFiaV92ZXIgPCAxKSB7CisJCQkvKiBUaGUgZHJpdmVyIGlzIHVzaW5nIGFuIG9sZCBBQkksIHNvCisJCQkgKiB0aGUgYXBwbGljYXRpb24gc2V0cyB0aGUgc2xhdmUncworCQkJICogaHdhZGRyCisJCQkgKi8KKwkJCXJlcyA9IHNldF9zbGF2ZV9od2FkZHIoc2xhdmVfaWZuYW1lLAorCQkJCQkgICAgICAgJihtYXN0ZXJfaHdhZGRyLmlmcl9od2FkZHIpKTsKKwkJCWlmIChyZXMpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJIlNsYXZlICclcyc6IEVycm9yOiBzZXQgaHcgYWRkcmVzcyAiCisJCQkJCSJmYWlsZWRcbiIsCisJCQkJCXNsYXZlX2lmbmFtZSk7CisJCQkJZ290byB1bmRvX210dTsKKwkJCX0KKworCQkJLyogRm9yIG9sZCBBQkkgdGhlIGFwcGxpY2F0aW9uIG5lZWRzIHRvIGJyaW5nIHRoZQorCQkJICogc2xhdmUgYmFjayB1cAorCQkJICovCisJCQlyZXMgPSBzZXRfaWZfdXAoc2xhdmVfaWZuYW1lLCBzbGF2ZV9mbGFncy5pZnJfZmxhZ3MpOworCQkJaWYgKHJlcykgeworCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkiU2xhdmUgJyVzJzogRXJyb3I6IGJyaW5nIGludGVyZmFjZSAiCisJCQkJCSJkb3duIGZhaWxlZFxuIiwKKwkJCQkJc2xhdmVfaWZuYW1lKTsKKwkJCQlnb3RvIHVuZG9fc2xhdmVfbWFjOworCQkJfQorCQl9CisJCS8qIFRoZSBkcml2ZXIgaXMgdXNpbmcgYSBuZXcgQUJJLAorCQkgKiBzbyB0aGUgZHJpdmVyIHRha2VzIGNhcmUgb2Ygc2V0dGluZworCQkgKiB0aGUgc2xhdmUncyBod2FkZHIgYW5kIGJyaW5naW5nCisJCSAqIGl0IHVwIGFnYWluCisJCSAqLworCX0gZWxzZSB7CisJCS8qIE5vIGh3YWRkciBmb3IgbWFzdGVyIHlldCwgc28KKwkJICogc2V0IHRoZSBzbGF2ZSdzIGh3YWRkciB0byBpdAorCQkgKi8KKwkJaWYgKGFiaV92ZXIgPCAxKSB7CisJCQkvKiBGb3Igb2xkIEFCSSwgdGhlIG1hc3RlciBuZWVkcyB0byBiZQorCQkJICogZG93biBiZWZvcmUgc2V0dGluZyBpdCdzIGh3YWRkcgorCQkJICovCisJCQlyZXMgPSBzZXRfaWZfZG93bihtYXN0ZXJfaWZuYW1lLCBtYXN0ZXJfZmxhZ3MuaWZyX2ZsYWdzKTsKKwkJCWlmIChyZXMpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJIk1hc3RlciAnJXMnOiBFcnJvcjogYnJpbmcgaW50ZXJmYWNlICIKKwkJCQkJImRvd24gZmFpbGVkXG4iLAorCQkJCQltYXN0ZXJfaWZuYW1lKTsKKwkJCQlnb3RvIHVuZG9fbXR1OworCQkJfQorCQl9CisKKwkJcmVzID0gc2V0X21hc3Rlcl9od2FkZHIobWFzdGVyX2lmbmFtZSwKKwkJCQkJJihzbGF2ZV9od2FkZHIuaWZyX2h3YWRkcikpOworCQlpZiAocmVzKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiTWFzdGVyICclcyc6IEVycm9yOiBzZXQgaHcgYWRkcmVzcyAiCisJCQkJImZhaWxlZFxuIiwKKwkJCQltYXN0ZXJfaWZuYW1lKTsKKwkJCWdvdG8gdW5kb19tdHU7CisJCX0KKworCQlpZiAoYWJpX3ZlciA8IDEpIHsKKwkJCS8qIEZvciBvbGQgQUJJLCBicmluZyB0aGUgbWFzdGVyCisJCQkgKiBiYWNrIHVwCisJCQkgKi8KKwkJCXJlcyA9IHNldF9pZl91cChtYXN0ZXJfaWZuYW1lLCBtYXN0ZXJfZmxhZ3MuaWZyX2ZsYWdzKTsKKwkJCWlmIChyZXMpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJIk1hc3RlciAnJXMnOiBFcnJvcjogYnJpbmcgaW50ZXJmYWNlICIKKwkJCQkJInVwIGZhaWxlZFxuIiwKKwkJCQkJbWFzdGVyX2lmbmFtZSk7CisJCQkJZ290byB1bmRvX21hc3Rlcl9tYWM7CisJCQl9CisJCX0KKworCQlod2FkZHJfc2V0ID0gMTsKKwl9CisKKwkvKiBEbyB0aGUgcmVhbCB0aGluZyAqLworCXN0cm5jcHkoaWZyLmlmcl9uYW1lLCBtYXN0ZXJfaWZuYW1lLCBJRk5BTVNJWik7CisJc3RybmNweShpZnIuaWZyX3NsYXZlLCBzbGF2ZV9pZm5hbWUsIElGTkFNU0laKTsKKwlpZiAoKGlvY3RsKHNrZmQsIFNJT0NCT05ERU5TTEFWRSwgJmlmcikgPCAwKSAmJgorCSAgICAoaW9jdGwoc2tmZCwgQk9ORF9FTlNMQVZFX09MRCwgJmlmcikgPCAwKSkgeworCQlzYXZlZF9lcnJubyA9IGVycm5vOworCQl2X3ByaW50KCJNYXN0ZXIgJyVzJzogRXJyb3I6IFNJT0NCT05ERU5TTEFWRSBmYWlsZWQ6ICVzXG4iLAorCQkJbWFzdGVyX2lmbmFtZSwgc3RyZXJyb3Ioc2F2ZWRfZXJybm8pKTsKKwkJcmVzID0gMTsKKwl9CisKKwlpZiAocmVzKSB7CisJCWdvdG8gdW5kb19tYXN0ZXJfbWFjOworCX0KKworCXJldHVybiAwOworCisvKiByb2xsYmFjayAoYmVzdCBlZmZvcnQpICovCit1bmRvX21hc3Rlcl9tYWM6CisJc2V0X21hc3Rlcl9od2FkZHIobWFzdGVyX2lmbmFtZSwgJihtYXN0ZXJfaHdhZGRyLmlmcl9od2FkZHIpKTsKKwlod2FkZHJfc2V0ID0gMDsKKwlnb3RvIHVuZG9fbXR1OwordW5kb19zbGF2ZV9tYWM6CisJc2V0X3NsYXZlX2h3YWRkcihzbGF2ZV9pZm5hbWUsICYoc2xhdmVfaHdhZGRyLmlmcl9od2FkZHIpKTsKK3VuZG9fbXR1OgorCXNldF9zbGF2ZV9tdHUoc2xhdmVfaWZuYW1lLCBzbGF2ZV9tdHUuaWZyX210dSk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCByZWxlYXNlKGNoYXIgKm1hc3Rlcl9pZm5hbWUsIGNoYXIgKnNsYXZlX2lmbmFtZSkKK3sKKwlzdHJ1Y3QgaWZyZXEgaWZyOworCWludCByZXMgPSAwOworCisJaWYgKCEoc2xhdmVfZmxhZ3MuaWZyX2ZsYWdzICYgSUZGX1NMQVZFKSkgeworCQlmcHJpbnRmKHN0ZGVyciwKKwkJCSJJbGxlZ2FsIG9wZXJhdGlvbjogVGhlIHNwZWNpZmllZCBzbGF2ZSBpbnRlcmZhY2UgIgorCQkJIiclcycgaXMgbm90IGEgc2xhdmVcbiIsCisJCQlzbGF2ZV9pZm5hbWUpOworCQlyZXR1cm4gMTsKKwl9CisKKwlzdHJuY3B5KGlmci5pZnJfbmFtZSwgbWFzdGVyX2lmbmFtZSwgSUZOQU1TSVopOworCXN0cm5jcHkoaWZyLmlmcl9zbGF2ZSwgc2xhdmVfaWZuYW1lLCBJRk5BTVNJWik7CisJaWYgKChpb2N0bChza2ZkLCBTSU9DQk9ORFJFTEVBU0UsICZpZnIpIDwgMCkgJiYKKwkgICAgKGlvY3RsKHNrZmQsIEJPTkRfUkVMRUFTRV9PTEQsICZpZnIpIDwgMCkpIHsKKwkJc2F2ZWRfZXJybm8gPSBlcnJubzsKKwkJdl9wcmludCgiTWFzdGVyICclcyc6IEVycm9yOiBTSU9DQk9ORFJFTEVBU0UgZmFpbGVkOiAlc1xuIiwKKwkJCW1hc3Rlcl9pZm5hbWUsIHN0cmVycm9yKHNhdmVkX2Vycm5vKSk7CisJCXJldHVybiAxOworCX0gZWxzZSBpZiAoYWJpX3ZlciA8IDEpIHsKKwkJLyogVGhlIGRyaXZlciBpcyB1c2luZyBhbiBvbGQgQUJJLCBzbyB3ZSdsbCBzZXQgdGhlIGludGVyZmFjZQorCQkgKiBkb3duIHRvIGF2b2lkIGFueSBjb25mbGljdHMgZHVlIHRvIHNhbWUgTUFDL0lQCisJCSAqLworCQlyZXMgPSBzZXRfaWZfZG93bihzbGF2ZV9pZm5hbWUsIHNsYXZlX2ZsYWdzLmlmcl9mbGFncyk7CisJCWlmIChyZXMpIHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJTbGF2ZSAnJXMnOiBFcnJvcjogYnJpbmcgaW50ZXJmYWNlICIKKwkJCQkiZG93biBmYWlsZWRcbiIsCisJCQkJc2xhdmVfaWZuYW1lKTsKKwkJfQorCX0KKworCS8qIHNldCB0byBkZWZhdWx0IG10dSAqLworCXNldF9zbGF2ZV9tdHUoc2xhdmVfaWZuYW1lLCAxNTAwKTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2lmX3NldHRpbmdzKGNoYXIgKmlmbmFtZSwgc3RydWN0IGRldl9pZnIgaWZyYVtdKQoreworCWludCBpOworCWludCByZXMgPSAwOworCisJZm9yIChpID0gMDsgaWZyYVtpXS5yZXFfaWZyOyBpKyspIHsKKwkJc3RybmNweShpZnJhW2ldLnJlcV9pZnItPmlmcl9uYW1lLCBpZm5hbWUsIElGTkFNU0laKTsKKwkJcmVzID0gaW9jdGwoc2tmZCwgaWZyYVtpXS5yZXFfdHlwZSwgaWZyYVtpXS5yZXFfaWZyKTsKKwkJaWYgKHJlcyA8IDApIHsKKwkJCXNhdmVkX2Vycm5vID0gZXJybm87CisJCQl2X3ByaW50KCJJbnRlcmZhY2UgJyVzJzogRXJyb3I6ICVzIGZhaWxlZDogJXNcbiIsCisJCQkJaWZuYW1lLCBpZnJhW2ldLnJlcV9uYW1lLAorCQkJCXN0cmVycm9yKHNhdmVkX2Vycm5vKSk7CisKKwkJCXJldHVybiBzYXZlZF9lcnJubzsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF9zbGF2ZV9mbGFncyhjaGFyICpzbGF2ZV9pZm5hbWUpCit7CisJaW50IHJlcyA9IDA7CisKKwlzdHJuY3B5KHNsYXZlX2ZsYWdzLmlmcl9uYW1lLCBzbGF2ZV9pZm5hbWUsIElGTkFNU0laKTsKKwlyZXMgPSBpb2N0bChza2ZkLCBTSU9DR0lGRkxBR1MsICZzbGF2ZV9mbGFncyk7CisJaWYgKHJlcyA8IDApIHsKKwkJc2F2ZWRfZXJybm8gPSBlcnJubzsKKwkJdl9wcmludCgiU2xhdmUgJyVzJzogRXJyb3I6IFNJT0NHSUZGTEFHUyBmYWlsZWQ6ICVzXG4iLAorCQkJc2xhdmVfaWZuYW1lLCBzdHJlcnJvcihzYXZlZF9lcnJubykpOworCX0gZWxzZSB7CisJCXZfcHJpbnQoIlNsYXZlICVzOiBmbGFncyAlMDRYLlxuIiwKKwkJCXNsYXZlX2lmbmFtZSwgc2xhdmVfZmxhZ3MuaWZyX2ZsYWdzKTsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHNldF9tYXN0ZXJfaHdhZGRyKGNoYXIgKm1hc3Rlcl9pZm5hbWUsIHN0cnVjdCBzb2NrYWRkciAqaHdhZGRyKQoreworCXVuc2lnbmVkIGNoYXIgKmFkZHIgPSAodW5zaWduZWQgY2hhciAqKWh3YWRkci0+c2FfZGF0YTsKKwlzdHJ1Y3QgaWZyZXEgaWZyOworCWludCByZXMgPSAwOworCisJc3RybmNweShpZnIuaWZyX25hbWUsIG1hc3Rlcl9pZm5hbWUsIElGTkFNU0laKTsKKwltZW1jcHkoJihpZnIuaWZyX2h3YWRkciksIGh3YWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpOworCXJlcyA9IGlvY3RsKHNrZmQsIFNJT0NTSUZIV0FERFIsICZpZnIpOworCWlmIChyZXMgPCAwKSB7CisJCXNhdmVkX2Vycm5vID0gZXJybm87CisJCXZfcHJpbnQoIk1hc3RlciAnJXMnOiBFcnJvcjogU0lPQ1NJRkhXQUREUiBmYWlsZWQ6ICVzXG4iLAorCQkJbWFzdGVyX2lmbmFtZSwgc3RyZXJyb3Ioc2F2ZWRfZXJybm8pKTsKKwkJcmV0dXJuIHJlczsKKwl9IGVsc2UgeworCQl2X3ByaW50KCJNYXN0ZXIgJyVzJzogaGFyZHdhcmUgYWRkcmVzcyBzZXQgdG8gIgorCQkJIiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4LlxuIiwKKwkJCW1hc3Rlcl9pZm5hbWUsIGFkZHJbMF0sIGFkZHJbMV0sIGFkZHJbMl0sCisJCQlhZGRyWzNdLCBhZGRyWzRdLCBhZGRyWzVdKTsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHNldF9zbGF2ZV9od2FkZHIoY2hhciAqc2xhdmVfaWZuYW1lLCBzdHJ1Y3Qgc29ja2FkZHIgKmh3YWRkcikKK3sKKwl1bnNpZ25lZCBjaGFyICphZGRyID0gKHVuc2lnbmVkIGNoYXIgKilod2FkZHItPnNhX2RhdGE7CisJc3RydWN0IGlmcmVxIGlmcjsKKwlpbnQgcmVzID0gMDsKKworCXN0cm5jcHkoaWZyLmlmcl9uYW1lLCBzbGF2ZV9pZm5hbWUsIElGTkFNU0laKTsKKwltZW1jcHkoJihpZnIuaWZyX2h3YWRkciksIGh3YWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpOworCXJlcyA9IGlvY3RsKHNrZmQsIFNJT0NTSUZIV0FERFIsICZpZnIpOworCWlmIChyZXMgPCAwKSB7CisJCXNhdmVkX2Vycm5vID0gZXJybm87CisKKwkJdl9wcmludCgiU2xhdmUgJyVzJzogRXJyb3I6IFNJT0NTSUZIV0FERFIgZmFpbGVkOiAlc1xuIiwKKwkJCXNsYXZlX2lmbmFtZSwgc3RyZXJyb3Ioc2F2ZWRfZXJybm8pKTsKKworCQlpZiAoc2F2ZWRfZXJybm8gPT0gRUJVU1kpIHsKKwkJCXZfcHJpbnQoIiAgVGhlIGRldmljZSBpcyBidXN5OiBpdCBtdXN0IGJlIGlkbGUgIgorCQkJCSJiZWZvcmUgcnVubmluZyB0aGlzIGNvbW1hbmQuXG4iKTsKKwkJfSBlbHNlIGlmIChzYXZlZF9lcnJubyA9PSBFT1BOT1RTVVBQKSB7CisJCQl2X3ByaW50KCIgIFRoZSBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCBzZXR0aW5nICIKKwkJCQkidGhlIE1BQyBhZGRyZXNzLlxuIgorCQkJCSIgIFlvdXIga2VybmVsIGxpa2VseSBkb2VzIG5vdCBzdXBwb3J0IHNsYXZlICIKKwkJCQkiZGV2aWNlcy5cbiIpOworCQl9IGVsc2UgaWYgKHNhdmVkX2Vycm5vID09IEVJTlZBTCkgeworCQkJdl9wcmludCgiICBUaGUgZGV2aWNlJ3MgYWRkcmVzcyB0eXBlIGRvZXMgbm90IG1hdGNoICIKKwkJCQkidGhlIG1hc3RlcidzIGFkZHJlc3MgdHlwZS5cbiIpOworCQl9CisJCXJldHVybiByZXM7CisJfSBlbHNlIHsKKwkJdl9wcmludCgiU2xhdmUgJyVzJzogaGFyZHdhcmUgYWRkcmVzcyBzZXQgdG8gIgorCQkJIiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4LlxuIiwKKwkJCXNsYXZlX2lmbmFtZSwgYWRkclswXSwgYWRkclsxXSwgYWRkclsyXSwKKwkJCWFkZHJbM10sIGFkZHJbNF0sIGFkZHJbNV0pOworCX0KKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3NsYXZlX210dShjaGFyICpzbGF2ZV9pZm5hbWUsIGludCBtdHUpCit7CisJc3RydWN0IGlmcmVxIGlmcjsKKwlpbnQgcmVzID0gMDsKKworCWlmci5pZnJfbXR1ID0gbXR1OworCXN0cm5jcHkoaWZyLmlmcl9uYW1lLCBzbGF2ZV9pZm5hbWUsIElGTkFNU0laKTsKKworCXJlcyA9IGlvY3RsKHNrZmQsIFNJT0NTSUZNVFUsICZpZnIpOworCWlmIChyZXMgPCAwKSB7CisJCXNhdmVkX2Vycm5vID0gZXJybm87CisJCXZfcHJpbnQoIlNsYXZlICclcyc6IEVycm9yOiBTSU9DU0lGTVRVIGZhaWxlZDogJXNcbiIsCisJCQlzbGF2ZV9pZm5hbWUsIHN0cmVycm9yKHNhdmVkX2Vycm5vKSk7CisJfSBlbHNlIHsKKwkJdl9wcmludCgiU2xhdmUgJyVzJzogTVRVIHNldCB0byAlZC5cbiIsIHNsYXZlX2lmbmFtZSwgbXR1KTsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHNldF9pZl9mbGFncyhjaGFyICppZm5hbWUsIHNob3J0IGZsYWdzKQoreworCXN0cnVjdCBpZnJlcSBpZnI7CisJaW50IHJlcyA9IDA7CisKKwlpZnIuaWZyX2ZsYWdzID0gZmxhZ3M7CisJc3RybmNweShpZnIuaWZyX25hbWUsIGlmbmFtZSwgSUZOQU1TSVopOworCisJcmVzID0gaW9jdGwoc2tmZCwgU0lPQ1NJRkZMQUdTLCAmaWZyKTsKKwlpZiAocmVzIDwgMCkgeworCQlzYXZlZF9lcnJubyA9IGVycm5vOworCQl2X3ByaW50KCJJbnRlcmZhY2UgJyVzJzogRXJyb3I6IFNJT0NTSUZGTEFHUyBmYWlsZWQ6ICVzXG4iLAorCQkJaWZuYW1lLCBzdHJlcnJvcihzYXZlZF9lcnJubykpOworCX0gZWxzZSB7CisJCXZfcHJpbnQoIkludGVyZmFjZSAnJXMnOiBmbGFncyBzZXQgdG8gJTA0WC5cbiIsIGlmbmFtZSwgZmxhZ3MpOworCX0KKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgc2V0X2lmX3VwKGNoYXIgKmlmbmFtZSwgc2hvcnQgZmxhZ3MpCit7CisJcmV0dXJuIHNldF9pZl9mbGFncyhpZm5hbWUsIGZsYWdzIHwgSUZGX1VQKTsKK30KKworc3RhdGljIGludCBzZXRfaWZfZG93bihjaGFyICppZm5hbWUsIHNob3J0IGZsYWdzKQoreworCXJldHVybiBzZXRfaWZfZmxhZ3MoaWZuYW1lLCBmbGFncyAmIH5JRkZfVVApOworfQorCitzdGF0aWMgaW50IGNsZWFyX2lmX2FkZHIoY2hhciAqaWZuYW1lKQoreworCXN0cnVjdCBpZnJlcSBpZnI7CisJaW50IHJlcyA9IDA7CisKKwlzdHJuY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1lLCBJRk5BTVNJWik7CisJaWZyLmlmcl9hZGRyLnNhX2ZhbWlseSA9IEFGX0lORVQ7CisJbWVtc2V0KGlmci5pZnJfYWRkci5zYV9kYXRhLCAwLCBzaXplb2YoaWZyLmlmcl9hZGRyLnNhX2RhdGEpKTsKKworCXJlcyA9IGlvY3RsKHNrZmQsIFNJT0NTSUZBRERSLCAmaWZyKTsKKwlpZiAocmVzIDwgMCkgeworCQlzYXZlZF9lcnJubyA9IGVycm5vOworCQl2X3ByaW50KCJJbnRlcmZhY2UgJyVzJzogRXJyb3I6IFNJT0NTSUZBRERSIGZhaWxlZDogJXNcbiIsCisJCQlpZm5hbWUsIHN0cmVycm9yKHNhdmVkX2Vycm5vKSk7CisJfSBlbHNlIHsKKwkJdl9wcmludCgiSW50ZXJmYWNlICclcyc6IGFkZHJlc3MgY2xlYXJlZFxuIiwgaWZuYW1lKTsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHNldF9pZl9hZGRyKGNoYXIgKm1hc3Rlcl9pZm5hbWUsIGNoYXIgKnNsYXZlX2lmbmFtZSkKK3sKKwlzdHJ1Y3QgaWZyZXEgaWZyOworCWludCByZXM7CisJdW5zaWduZWQgY2hhciAqaXBhZGRyOworCWludCBpOworCXN0cnVjdCB7CisJCWNoYXIgKnJlcV9uYW1lOworCQljaGFyICpkZXNjOworCQlpbnQgZ19pb2N0bDsKKwkJaW50IHNfaW9jdGw7CisJfSBpZnJhW10gPSB7CisJCXsiSUZBRERSIiwgImFkZHIiLCBTSU9DR0lGQUREUiwgU0lPQ1NJRkFERFJ9LAorCQl7IkRTVEFERFIiLCAiZGVzdGluYXRpb24gYWRkciIsIFNJT0NHSUZEU1RBRERSLCBTSU9DU0lGRFNUQUREUn0sCisJCXsiQlJEQUREUiIsICJicm9hZGNhc3QgYWRkciIsIFNJT0NHSUZCUkRBRERSLCBTSU9DU0lGQlJEQUREUn0sCisJCXsiTkVUTUFTSyIsICJuZXRtYXNrIiwgU0lPQ0dJRk5FVE1BU0ssIFNJT0NTSUZORVRNQVNLfSwKKwkJe05VTEwsIE5VTEwsIDAsIDB9LAorCX07CisKKwlmb3IgKGkgPSAwOyBpZnJhW2ldLnJlcV9uYW1lOyBpKyspIHsKKwkJc3RybmNweShpZnIuaWZyX25hbWUsIG1hc3Rlcl9pZm5hbWUsIElGTkFNU0laKTsKKwkJcmVzID0gaW9jdGwoc2tmZCwgaWZyYVtpXS5nX2lvY3RsLCAmaWZyKTsKKwkJaWYgKHJlcyA8IDApIHsKKwkJCWludCBzYXZlZF9lcnJubyA9IGVycm5vOworCisJCQl2X3ByaW50KCJJbnRlcmZhY2UgJyVzJzogRXJyb3I6IFNJT0NHJXMgZmFpbGVkOiAlc1xuIiwKKwkJCQltYXN0ZXJfaWZuYW1lLCBpZnJhW2ldLnJlcV9uYW1lLAorCQkJCXN0cmVycm9yKHNhdmVkX2Vycm5vKSk7CisKKwkJCWlmci5pZnJfYWRkci5zYV9mYW1pbHkgPSBBRl9JTkVUOworCQkJbWVtc2V0KGlmci5pZnJfYWRkci5zYV9kYXRhLCAwLAorCQkJICAgICAgIHNpemVvZihpZnIuaWZyX2FkZHIuc2FfZGF0YSkpOworCQl9CisKKwkJc3RybmNweShpZnIuaWZyX25hbWUsIHNsYXZlX2lmbmFtZSwgSUZOQU1TSVopOworCQlyZXMgPSBpb2N0bChza2ZkLCBpZnJhW2ldLnNfaW9jdGwsICZpZnIpOworCQlpZiAocmVzIDwgMCkgeworCQkJaW50IHNhdmVkX2Vycm5vID0gZXJybm87CisKKwkJCXZfcHJpbnQoIkludGVyZmFjZSAnJXMnOiBFcnJvcjogU0lPQ1MlcyBmYWlsZWQ6ICVzXG4iLAorCQkJCXNsYXZlX2lmbmFtZSwgaWZyYVtpXS5yZXFfbmFtZSwKKwkJCQlzdHJlcnJvcihzYXZlZF9lcnJubykpOworCisJCQlyZXR1cm4gcmVzOworCQl9CisKKwkJaXBhZGRyID0gaWZyLmlmcl9hZGRyLnNhX2RhdGE7CisJCXZfcHJpbnQoIkludGVyZmFjZSAnJXMnOiBzZXQgSVAgJXMgdG8gJWQuJWQuJWQuJWRcbiIsCisJCQlzbGF2ZV9pZm5hbWUsIGlmcmFbaV0uZGVzYywKKwkJCWlwYWRkclswXSwgaXBhZGRyWzFdLCBpcGFkZHJbMl0sIGlwYWRkclszXSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiAgdmVyc2lvbi1jb250cm9sOiB0CisgKiAga2VwdC1uZXctdmVyc2lvbnM6IDUKKyAqICBjLWluZGVudC1sZXZlbDogNAorICogIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiAgdGFiLXdpZHRoOiA0CisgKiAgY29tcGlsZS1jb21tYW5kOiAiZ2NjIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLU8gLUkvdXNyL3NyYy9saW51eC9pbmNsdWRlIGlmZW5zbGF2ZS5jIC1vIGlmZW5zbGF2ZSIKKyAqIEVuZDoKKyAqLworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYzg5M2E3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQKQEAgLTAsMCArMSw4NzggQEAKKy9wcm9jL3N5cy9uZXQvaXB2NC8qIFZhcmlhYmxlczoKKworaXBfZm9yd2FyZCAtIEJPT0xFQU4KKwkwIC0gZGlzYWJsZWQgKGRlZmF1bHQpCisJbm90IDAgLSBlbmFibGVkIAorCisJRm9yd2FyZCBQYWNrZXRzIGJldHdlZW4gaW50ZXJmYWNlcy4KKworCVRoaXMgdmFyaWFibGUgaXMgc3BlY2lhbCwgaXRzIGNoYW5nZSByZXNldHMgYWxsIGNvbmZpZ3VyYXRpb24KKwlwYXJhbWV0ZXJzIHRvIHRoZWlyIGRlZmF1bHQgc3RhdGUgKFJGQzExMjIgZm9yIGhvc3RzLCBSRkMxODEyCisJZm9yIHJvdXRlcnMpCisKK2lwX2RlZmF1bHRfdHRsIC0gSU5URUdFUgorCWRlZmF1bHQgNjQKKworaXBfbm9fcG10dV9kaXNjIC0gQk9PTEVBTgorCURpc2FibGUgUGF0aCBNVFUgRGlzY292ZXJ5LgorCWRlZmF1bHQgRkFMU0UKKworbWluX3BtdHUgLSBJTlRFR0VSCisJZGVmYXVsdCA1NjIgLSBtaW5pbXVtIGRpc2NvdmVyZWQgUGF0aCBNVFUKKworbXR1X2V4cGlyZXMgLSBJTlRFR0VSCisJVGltZSwgaW4gc2Vjb25kcywgdGhhdCBjYWNoZWQgUE1UVSBpbmZvcm1hdGlvbiBpcyBrZXB0LgorCittaW5fYWR2X21zcyAtIElOVEVHRVIKKwlUaGUgYWR2ZXJ0aXNlZCBNU1MgZGVwZW5kcyBvbiB0aGUgZmlyc3QgaG9wIHJvdXRlIE1UVSwgYnV0IHdpbGwKKwluZXZlciBiZSBsb3dlciB0aGFuIHRoaXMgc2V0dGluZy4KKworSVAgRnJhZ21lbnRhdGlvbjoKKworaXBmcmFnX2hpZ2hfdGhyZXNoIC0gSU5URUdFUgorCU1heGltdW0gbWVtb3J5IHVzZWQgdG8gcmVhc3NlbWJsZSBJUCBmcmFnbWVudHMuIFdoZW4gCisJaXBmcmFnX2hpZ2hfdGhyZXNoIGJ5dGVzIG9mIG1lbW9yeSBpcyBhbGxvY2F0ZWQgZm9yIHRoaXMgcHVycG9zZSwKKwl0aGUgZnJhZ21lbnQgaGFuZGxlciB3aWxsIHRvc3MgcGFja2V0cyB1bnRpbCBpcGZyYWdfbG93X3RocmVzaAorCWlzIHJlYWNoZWQuCisJCitpcGZyYWdfbG93X3RocmVzaCAtIElOVEVHRVIKKwlTZWUgaXBmcmFnX2hpZ2hfdGhyZXNoCQorCitpcGZyYWdfdGltZSAtIElOVEVHRVIKKwlUaW1lIGluIHNlY29uZHMgdG8ga2VlcCBhbiBJUCBmcmFnbWVudCBpbiBtZW1vcnkuCQorCitpcGZyYWdfc2VjcmV0X2ludGVydmFsIC0gSU5URUdFUgorCVJlZ2VuZXJhdGlvbiBpbnRlcnZhbCAoaW4gc2Vjb25kcykgb2YgdGhlIGhhc2ggc2VjcmV0IChvciBsaWZldGltZSAKKwlmb3IgdGhlIGhhc2ggc2VjcmV0KSBmb3IgSVAgZnJhZ21lbnRzLgorCURlZmF1bHQ6IDYwMAorCitJTkVUIHBlZXIgc3RvcmFnZToKKworaW5ldF9wZWVyX3RocmVzaG9sZCAtIElOVEVHRVIKKwlUaGUgYXBwcm94aW1hdGUgc2l6ZSBvZiB0aGUgc3RvcmFnZS4gIFN0YXJ0aW5nIGZyb20gdGhpcyB0aHJlc2hvbGQJCisJZW50cmllcyB3aWxsIGJlIHRocm93biBhZ2dyZXNzaXZlbHkuICBUaGlzIHRocmVzaG9sZCBhbHNvIGRldGVybWluZXMKKwllbnRyaWVzJyB0aW1lLXRvLWxpdmUgYW5kIHRpbWUgaW50ZXJ2YWxzIGJldHdlZW4gZ2FyYmFnZSBjb2xsZWN0aW9uCisJcGFzc2VzLiAgTW9yZSBlbnRyaWVzLCBsZXNzIHRpbWUtdG8tbGl2ZSwgbGVzcyBHQyBpbnRlcnZhbC4KKworaW5ldF9wZWVyX21pbnR0bCAtIElOVEVHRVIKKwlNaW5pbXVtIHRpbWUtdG8tbGl2ZSBvZiBlbnRyaWVzLiAgU2hvdWxkIGJlIGVub3VnaCB0byBjb3ZlciBmcmFnbWVudAorCXRpbWUtdG8tbGl2ZSBvbiB0aGUgcmVhc3NlbWJsaW5nIHNpZGUuICBUaGlzIG1pbmltdW0gdGltZS10by1saXZlICBpcworCWd1YXJhbnRlZWQgaWYgdGhlIHBvb2wgc2l6ZSBpcyBsZXNzIHRoYW4gaW5ldF9wZWVyX3RocmVzaG9sZC4KKwlNZWFzdXJlZCBpbiBqaWZmaWVzKDEpLgorCitpbmV0X3BlZXJfbWF4dHRsIC0gSU5URUdFUgorCU1heGltdW0gdGltZS10by1saXZlIG9mIGVudHJpZXMuICBVbnVzZWQgZW50cmllcyB3aWxsIGV4cGlyZSBhZnRlcgorCXRoaXMgcGVyaW9kIG9mIHRpbWUgaWYgdGhlcmUgaXMgbm8gbWVtb3J5IHByZXNzdXJlIG9uIHRoZSBwb29sIChpLmUuCisJd2hlbiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHBvb2wgaXMgdmVyeSBzbWFsbCkuCisJTWVhc3VyZWQgaW4gamlmZmllcygxKS4KKworaW5ldF9wZWVyX2djX21pbnRpbWUgLSBJTlRFR0VSCisJTWluaW11bSBpbnRlcnZhbCBiZXR3ZWVuIGdhcmJhZ2UgY29sbGVjdGlvbiBwYXNzZXMuICBUaGlzIGludGVydmFsIGlzCisJaW4gZWZmZWN0IHVuZGVyIGhpZ2ggbWVtb3J5IHByZXNzdXJlIG9uIHRoZSBwb29sLgorCU1lYXN1cmVkIGluIGppZmZpZXMoMSkuCisKK2luZXRfcGVlcl9nY19tYXh0aW1lIC0gSU5URUdFUgorCU1pbmltdW0gaW50ZXJ2YWwgYmV0d2VlbiBnYXJiYWdlIGNvbGxlY3Rpb24gcGFzc2VzLiAgVGhpcyBpbnRlcnZhbCBpcworCWluIGVmZmVjdCB1bmRlciBsb3cgKG9yIGFic2VudCkgbWVtb3J5IHByZXNzdXJlIG9uIHRoZSBwb29sLgorCU1lYXN1cmVkIGluIGppZmZpZXMoMSkuCisKK1RDUCB2YXJpYWJsZXM6IAorCit0Y3Bfc3luX3JldHJpZXMgLSBJTlRFR0VSCisJTnVtYmVyIG9mIHRpbWVzIGluaXRpYWwgU1lOcyBmb3IgYW4gYWN0aXZlIFRDUCBjb25uZWN0aW9uIGF0dGVtcHQKKwl3aWxsIGJlIHJldHJhbnNtaXR0ZWQuIFNob3VsZCBub3QgYmUgaGlnaGVyIHRoYW4gMjU1LiBEZWZhdWx0IHZhbHVlCisJaXMgNSwgd2hpY2ggY29ycmVzcG9uZHMgdG8gfjE4MHNlY29uZHMuCisKK3RjcF9zeW5hY2tfcmV0cmllcyAtIElOVEVHRVIKKwlOdW1iZXIgb2YgdGltZXMgU1lOQUNLcyBmb3IgYSBwYXNzaXZlIFRDUCBjb25uZWN0aW9uIGF0dGVtcHQgd2lsbAorCWJlIHJldHJhbnNtaXR0ZWQuIFNob3VsZCBub3QgYmUgaGlnaGVyIHRoYW4gMjU1LiBEZWZhdWx0IHZhbHVlCisJaXMgNSwgd2hpY2ggY29ycmVzcG9uZHMgdG8gfjE4MHNlY29uZHMuCisKK3RjcF9rZWVwYWxpdmVfdGltZSAtIElOVEVHRVIKKwlIb3cgb2Z0ZW4gVENQIHNlbmRzIG91dCBrZWVwYWxpdmUgbWVzc2FnZXMgd2hlbiBrZWVwYWxpdmUgaXMgZW5hYmxlZC4KKwlEZWZhdWx0OiAyaG91cnMuCisKK3RjcF9rZWVwYWxpdmVfcHJvYmVzIC0gSU5URUdFUgorCUhvdyBtYW55IGtlZXBhbGl2ZSBwcm9iZXMgVENQIHNlbmRzIG91dCwgdW50aWwgaXQgZGVjaWRlcyB0aGF0IHRoZQorCWNvbm5lY3Rpb24gaXMgYnJva2VuLiBEZWZhdWx0IHZhbHVlOiA5LgorCit0Y3Bfa2VlcGFsaXZlX2ludHZsIC0gSU5URUdFUgorCUhvdyBmcmVxdWVudGx5IHRoZSBwcm9iZXMgYXJlIHNlbmQgb3V0LiBNdWx0aXBsaWVkIGJ5CisJdGNwX2tlZXBhbGl2ZV9wcm9iZXMgaXQgaXMgdGltZSB0byBraWxsIG5vdCByZXNwb25kaW5nIGNvbm5lY3Rpb24sCisJYWZ0ZXIgcHJvYmVzIHN0YXJ0ZWQuIERlZmF1bHQgdmFsdWU6IDc1c2VjIGkuZS4gY29ubmVjdGlvbgorCXdpbGwgYmUgYWJvcnRlZCBhZnRlciB+MTEgbWludXRlcyBvZiByZXRyaWVzLgorCit0Y3BfcmV0cmllczEgLSBJTlRFR0VSCisJSG93IG1hbnkgdGltZXMgdG8gcmV0cnkgYmVmb3JlIGRlY2lkaW5nIHRoYXQgc29tZXRoaW5nIGlzIHdyb25nCisJYW5kIGl0IGlzIG5lY2Vzc2FyeSB0byByZXBvcnQgdGhpcyBzdXNwaWNpb24gdG8gbmV0d29yayBsYXllci4KKwlNaW5pbWFsIFJGQyB2YWx1ZSBpcyAzLCBpdCBpcyBkZWZhdWx0LCB3aGljaCBjb3JyZXNwb25kcworCXRvIH4zc2VjLThtaW4gZGVwZW5kaW5nIG9uIFJUTy4KKwordGNwX3JldHJpZXMyIC0gSU5URUdFUgorCUhvdyBtYXkgdGltZXMgdG8gcmV0cnkgYmVmb3JlIGtpbGxpbmcgYWxpdmUgVENQIGNvbm5lY3Rpb24uCisJUkZDMTEyMiBzYXlzIHRoYXQgdGhlIGxpbWl0IHNob3VsZCBiZSBsb25nZXIgdGhhbiAxMDAgc2VjLgorCUl0IGlzIHRvbyBzbWFsbCBudW1iZXIuCURlZmF1bHQgdmFsdWUgMTUgY29ycmVzcG9uZHMgdG8gfjEzLTMwbWluCisJZGVwZW5kaW5nIG9uIFJUTy4KKwordGNwX29ycGhhbl9yZXRyaWVzIC0gSU5URUdFUgorCUhvdyBtYXkgdGltZXMgdG8gcmV0cnkgYmVmb3JlIGtpbGxpbmcgVENQIGNvbm5lY3Rpb24sIGNsb3NlZAorCWJ5IG91ciBzaWRlLiBEZWZhdWx0IHZhbHVlIDcgY29ycmVzcG9uZHMgdG8gfjUwc2VjLTE2bWluCisJZGVwZW5kaW5nIG9uIFJUTy4gSWYgeW91IG1hY2hpbmUgaXMgbG9hZGVkIFdFQiBzZXJ2ZXIsCisJeW91IHNob3VsZCB0aGluayBhYm91dCBsb3dlcmluZyB0aGlzIHZhbHVlLCBzdWNoIHNvY2tldHMKKwltYXkgY29uc3VtZSBzaWduaWZpY2FudCByZXNvdXJjZXMuIENmLiB0Y3BfbWF4X29ycGhhbnMuCisKK3RjcF9maW5fdGltZW91dCAtIElOVEVHRVIKKwlUaW1lIHRvIGhvbGQgc29ja2V0IGluIHN0YXRlIEZJTi1XQUlULTIsIGlmIGl0IHdhcyBjbG9zZWQKKwlieSBvdXIgc2lkZS4gUGVlciBjYW4gYmUgYnJva2VuIGFuZCBuZXZlciBjbG9zZSBpdHMgc2lkZSwKKwlvciBldmVuIGRpZWQgdW5leHBlY3RlZGx5LiBEZWZhdWx0IHZhbHVlIGlzIDYwc2VjLgorCVVzdWFsIHZhbHVlIHVzZWQgaW4gMi4yIHdhcyAxODAgc2Vjb25kcywgeW91IG1heSByZXN0b3JlCisJaXQsIGJ1dCByZW1lbWJlciB0aGF0IGlmIHlvdXIgbWFjaGluZSBpcyBldmVuIHVuZGVybG9hZGVkIFdFQiBzZXJ2ZXIsCisJeW91IHJpc2sgdG8gb3ZlcmZsb3cgbWVtb3J5IHdpdGgga2lsb3RvbnMgb2YgZGVhZCBzb2NrZXRzLAorCUZJTi1XQUlULTIgc29ja2V0cyBhcmUgbGVzcyBkYW5nZXJvdXMgdGhhbiBGSU4tV0FJVC0xLAorCWJlY2F1c2UgdGhleSBlYXQgbWF4aW11bSAxLjVLIG9mIG1lbW9yeSwgYnV0IHRoZXkgdGVuZAorCXRvIGxpdmUgbG9uZ2VyLglDZi4gdGNwX21heF9vcnBoYW5zLgorCit0Y3BfbWF4X3R3X2J1Y2tldHMgLSBJTlRFR0VSCisJTWF4aW1hbCBudW1iZXIgb2YgdGltZXdhaXQgc29ja2V0cyBoZWxkIGJ5IHN5c3RlbSBzaW11bHRhbmVvdXNseS4KKwlJZiB0aGlzIG51bWJlciBpcyBleGNlZWRlZCB0aW1lLXdhaXQgc29ja2V0IGlzIGltbWVkaWF0ZWx5IGRlc3Ryb3llZAorCWFuZCB3YXJuaW5nIGlzIHByaW50ZWQuIFRoaXMgbGltaXQgZXhpc3RzIG9ubHkgdG8gcHJldmVudAorCXNpbXBsZSBEb1MgYXR0YWNrcywgeW91IF9tdXN0XyBub3QgbG93ZXIgdGhlIGxpbWl0IGFydGlmaWNpYWxseSwKKwlidXQgcmF0aGVyIGluY3JlYXNlIGl0IChwcm9iYWJseSwgYWZ0ZXIgaW5jcmVhc2luZyBpbnN0YWxsZWQgbWVtb3J5KSwKKwlpZiBuZXR3b3JrIGNvbmRpdGlvbnMgcmVxdWlyZSBtb3JlIHRoYW4gZGVmYXVsdCB2YWx1ZS4KKwordGNwX3R3X3JlY3ljbGUgLSBCT09MRUFOCisJRW5hYmxlIGZhc3QgcmVjeWNsaW5nIFRJTUUtV0FJVCBzb2NrZXRzLiBEZWZhdWx0IHZhbHVlIGlzIDAuCisJSXQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIHdpdGhvdXQgYWR2aWNlL3JlcXVlc3Qgb2YgdGVjaG5pY2FsCisJZXhwZXJ0cy4KKwordGNwX3R3X3JldXNlIC0gQk9PTEVBTgorCUFsbG93IHRvIHJldXNlIFRJTUUtV0FJVCBzb2NrZXRzIGZvciBuZXcgY29ubmVjdGlvbnMgd2hlbiBpdCBpcworCXNhZmUgZnJvbSBwcm90b2NvbCB2aWV3cG9pbnQuIERlZmF1bHQgdmFsdWUgaXMgMC4KKwlJdCBzaG91bGQgbm90IGJlIGNoYW5nZWQgd2l0aG91dCBhZHZpY2UvcmVxdWVzdCBvZiB0ZWNobmljYWwKKwlleHBlcnRzLgorCit0Y3BfbWF4X29ycGhhbnMgLSBJTlRFR0VSCisJTWF4aW1hbCBudW1iZXIgb2YgVENQIHNvY2tldHMgbm90IGF0dGFjaGVkIHRvIGFueSB1c2VyIGZpbGUgaGFuZGxlLAorCWhlbGQgYnkgc3lzdGVtLglJZiB0aGlzIG51bWJlciBpcyBleGNlZWRlZCBvcnBoYW5lZCBjb25uZWN0aW9ucyBhcmUKKwlyZXNldCBpbW1lZGlhdGVseSBhbmQgd2FybmluZyBpcyBwcmludGVkLiBUaGlzIGxpbWl0IGV4aXN0cworCW9ubHkgdG8gcHJldmVudCBzaW1wbGUgRG9TIGF0dGFja3MsIHlvdSBfbXVzdF8gbm90IHJlbHkgb24gdGhpcworCW9yIGxvd2VyIHRoZSBsaW1pdCBhcnRpZmljaWFsbHksIGJ1dCByYXRoZXIgaW5jcmVhc2UgaXQKKwkocHJvYmFibHksIGFmdGVyIGluY3JlYXNpbmcgaW5zdGFsbGVkIG1lbW9yeSksCisJaWYgbmV0d29yayBjb25kaXRpb25zIHJlcXVpcmUgbW9yZSB0aGFuIGRlZmF1bHQgdmFsdWUsCisJYW5kIHR1bmUgbmV0d29yayBzZXJ2aWNlcyB0byBsaW5nZXIgYW5kIGtpbGwgc3VjaCBzdGF0ZXMKKwltb3JlIGFnZ3Jlc3NpdmVseS4gTGV0IG1lIHRvIHJlbWluZCBhZ2FpbjogZWFjaCBvcnBoYW4gZWF0cworCXVwIHRvIH42NEsgb2YgdW5zd2FwcGFibGUgbWVtb3J5LgorCit0Y3BfYWJvcnRfb25fb3ZlcmZsb3cgLSBCT09MRUFOCisJSWYgbGlzdGVuaW5nIHNlcnZpY2UgaXMgdG9vIHNsb3cgdG8gYWNjZXB0IG5ldyBjb25uZWN0aW9ucywKKwlyZXNldCB0aGVtLiBEZWZhdWx0IHN0YXRlIGlzIEZBTFNFLiBJdCBtZWFucyB0aGF0IGlmIG92ZXJmbG93CisJb2NjdXJyZWQgZHVlIHRvIGEgYnVyc3QsIGNvbm5lY3Rpb24gd2lsbCByZWNvdmVyLiBFbmFibGUgdGhpcworCW9wdGlvbiBfb25seV8gaWYgeW91IGFyZSByZWFsbHkgc3VyZSB0aGF0IGxpc3RlbmluZyBkYWVtb24KKwljYW5ub3QgYmUgdHVuZWQgdG8gYWNjZXB0IGNvbm5lY3Rpb25zIGZhc3Rlci4gRW5hYmxpbmcgdGhpcworCW9wdGlvbiBjYW4gaGFybSBjbGllbnRzIG9mIHlvdXIgc2VydmVyLgorCit0Y3Bfc3luY29va2llcyAtIEJPT0xFQU4KKwlPbmx5IHZhbGlkIHdoZW4gdGhlIGtlcm5lbCB3YXMgY29tcGlsZWQgd2l0aCBDT05GSUdfU1lOQ09PS0lFUworCVNlbmQgb3V0IHN5bmNvb2tpZXMgd2hlbiB0aGUgc3luIGJhY2tsb2cgcXVldWUgb2YgYSBzb2NrZXQgCisJb3ZlcmZsb3dzLiBUaGlzIGlzIHRvIHByZXZlbnQgYWdhaW5zdCB0aGUgY29tbW9uICdzeW4gZmxvb2QgYXR0YWNrJworCURlZmF1bHQ6IEZBTFNFCisKKwlOb3RlLCB0aGF0IHN5bmNvb2tpZXMgaXMgZmFsbGJhY2sgZmFjaWxpdHkuCisJSXQgTVVTVCBOT1QgYmUgdXNlZCB0byBoZWxwIGhpZ2hseSBsb2FkZWQgc2VydmVycyB0byBzdGFuZAorCWFnYWluc3QgbGVnYWwgY29ubmVjdGlvbiByYXRlLiBJZiB5b3Ugc2VlIHN5bmZsb29kIHdhcm5pbmdzCisJaW4geW91ciBsb2dzLCBidXQgaW52ZXN0aWdhdGlvbglzaG93cyB0aGF0IHRoZXkgb2NjdXIKKwliZWNhdXNlIG9mIG92ZXJsb2FkIHdpdGggbGVnYWwgY29ubmVjdGlvbnMsIHlvdSBzaG91bGQgdHVuZQorCWFub3RoZXIgcGFyYW1ldGVycyB1bnRpbCB0aGlzIHdhcm5pbmcgZGlzYXBwZWFyLgorCVNlZTogdGNwX21heF9zeW5fYmFja2xvZywgdGNwX3N5bmFja19yZXRyaWVzLCB0Y3BfYWJvcnRfb25fb3ZlcmZsb3cuCisKKwlzeW5jb29raWVzIHNlcmlvdXNseSB2aW9sYXRlIFRDUCBwcm90b2NvbCwgZG8gbm90IGFsbG93CisJdG8gdXNlIFRDUCBleHRlbnNpb25zLCBjYW4gcmVzdWx0IGluIHNlcmlvdXMgZGVncmFkYXRpb24KKwlvZiBzb21lIHNlcnZpY2VzIChmLmUuIFNNVFAgcmVsYXlpbmcpLCB2aXNpYmxlIG5vdCBieSB5b3UsCisJYnV0IHlvdXIgY2xpZW50cyBhbmQgcmVsYXlzLCBjb250YWN0aW5nIHlvdS4gV2hpbGUgeW91IHNlZQorCXN5bmZsb29kIHdhcm5pbmdzIGluIGxvZ3Mgbm90IGJlaW5nIHJlYWxseSBmbG9vZGVkLCB5b3VyIHNlcnZlcgorCWlzIHNlcmlvdXNseSBtaXNjb25maWd1cmVkLgorCit0Y3Bfc3RkdXJnIC0gQk9PTEVBTgorCVVzZSB0aGUgSG9zdCByZXF1aXJlbWVudHMgaW50ZXJwcmV0YXRpb24gb2YgdGhlIFRDUCB1cmcgcG9pbnRlciBmaWVsZC4KKwlNb3N0IGhvc3RzIHVzZSB0aGUgb2xkZXIgQlNEIGludGVycHJldGF0aW9uLCBzbyBpZiB5b3UgdHVybiB0aGlzIG9uCisJTGludXggbWlnaHQgbm90IGNvbW11bmljYXRlIGNvcnJlY3RseSB3aXRoIHRoZW0uCQorCURlZmF1bHQ6IEZBTFNFIAorCQordGNwX21heF9zeW5fYmFja2xvZyAtIElOVEVHRVIKKwlNYXhpbWFsIG51bWJlciBvZiByZW1lbWJlcmVkIGNvbm5lY3Rpb24gcmVxdWVzdHMsIHdoaWNoIGFyZQorCXN0aWxsIGRpZCBub3QgcmVjZWl2ZSBhbiBhY2tub3dsZWRnbWVudCBmcm9tIGNvbm5lY3RpbmcgY2xpZW50LgorCURlZmF1bHQgdmFsdWUgaXMgMTAyNCBmb3Igc3lzdGVtcyB3aXRoIG1vcmUgdGhhbiAxMjhNYiBvZiBtZW1vcnksCisJYW5kIDEyOCBmb3IgbG93IG1lbW9yeSBtYWNoaW5lcy4gSWYgc2VydmVyIHN1ZmZlcnMgb2Ygb3ZlcmxvYWQsCisJdHJ5IHRvIGluY3JlYXNlIHRoaXMgbnVtYmVyLgorCit0Y3Bfd2luZG93X3NjYWxpbmcgLSBCT09MRUFOCisJRW5hYmxlIHdpbmRvdyBzY2FsaW5nIGFzIGRlZmluZWQgaW4gUkZDMTMyMy4KKwordGNwX3RpbWVzdGFtcHMgLSBCT09MRUFOCisJRW5hYmxlIHRpbWVzdGFtcHMgYXMgZGVmaW5lZCBpbiBSRkMxMzIzLgorCit0Y3Bfc2FjayAtIEJPT0xFQU4KKwlFbmFibGUgc2VsZWN0IGFja25vd2xlZGdtZW50cyAoU0FDS1MpLgorCit0Y3BfZmFjayAtIEJPT0xFQU4KKwlFbmFibGUgRkFDSyBjb25nZXN0aW9uIGF2b2lkYW5jZSBhbmQgZmFzdCByZXRyYW5zbWlzc2lvbi4KKwlUaGUgdmFsdWUgaXMgbm90IHVzZWQsIGlmIHRjcF9zYWNrIGlzIG5vdCBlbmFibGVkLgorCit0Y3BfZHNhY2sgLSBCT09MRUFOCisJQWxsb3dzIFRDUCB0byBzZW5kICJkdXBsaWNhdGUiIFNBQ0tzLgorCit0Y3BfZWNuIC0gQk9PTEVBTgorCUVuYWJsZSBFeHBsaWNpdCBDb25nZXN0aW9uIE5vdGlmaWNhdGlvbiBpbiBUQ1AuCisKK3RjcF9yZW9yZGVyaW5nIC0gSU5URUdFUgorCU1heGltYWwgcmVvcmRlcmluZyBvZiBwYWNrZXRzIGluIGEgVENQIHN0cmVhbS4KKwlEZWZhdWx0OiAzCQorCit0Y3BfcmV0cmFuc19jb2xsYXBzZSAtIEJPT0xFQU4KKwlCdWctdG8tYnVnIGNvbXBhdGliaWxpdHkgd2l0aCBzb21lIGJyb2tlbiBwcmludGVycy4KKwlPbiByZXRyYW5zbWl0IHRyeSB0byBzZW5kIGJpZ2dlciBwYWNrZXRzIHRvIHdvcmsgYXJvdW5kIGJ1Z3MgaW4KKwljZXJ0YWluIFRDUCBzdGFja3MuCisKK3RjcF93bWVtIC0gdmVjdG9yIG9mIDMgSU5URUdFUnM6IG1pbiwgZGVmYXVsdCwgbWF4CisJbWluOiBBbW91bnQgb2YgbWVtb3J5IHJlc2VydmVkIGZvciBzZW5kIGJ1ZmZlcnMgZm9yIFRDUCBzb2NrZXQuCisJRWFjaCBUQ1Agc29ja2V0IGhhcyByaWdodHMgdG8gdXNlIGl0IGR1ZSB0byBmYWN0IG9mIGl0cyBiaXJ0aC4KKwlEZWZhdWx0OiA0SworCisJZGVmYXVsdDogQW1vdW50IG9mIG1lbW9yeSBhbGxvd2VkIGZvciBzZW5kIGJ1ZmZlcnMgZm9yIFRDUCBzb2NrZXQKKwlieSBkZWZhdWx0LiBUaGlzIHZhbHVlIG92ZXJyaWRlcyBuZXQuY29yZS53bWVtX2RlZmF1bHQgdXNlZAorCWJ5IG90aGVyIHByb3RvY29scywgaXQgaXMgdXN1YWxseSBsb3dlciB0aGFuIG5ldC5jb3JlLndtZW1fZGVmYXVsdC4KKwlEZWZhdWx0OiAxNksKKworCW1heDogTWF4aW1hbCBhbW91bnQgb2YgbWVtb3J5IGFsbG93ZWQgZm9yIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQKKwlzZW5kIGJ1ZmZlcnMgZm9yIFRDUCBzb2NrZXQuIFRoaXMgdmFsdWUgZG9lcyBub3Qgb3ZlcnJpZGUKKwluZXQuY29yZS53bWVtX21heCwgInN0YXRpYyIgc2VsZWN0aW9uIHZpYSBTT19TTkRCVUYgZG9lcyBub3QgdXNlIHRoaXMuCisJRGVmYXVsdDogMTI4SworCit0Y3Bfcm1lbSAtIHZlY3RvciBvZiAzIElOVEVHRVJzOiBtaW4sIGRlZmF1bHQsIG1heAorCW1pbjogTWluaW1hbCBzaXplIG9mIHJlY2VpdmUgYnVmZmVyIHVzZWQgYnkgVENQIHNvY2tldHMuCisJSXQgaXMgZ3VhcmFudGVlZCB0byBlYWNoIFRDUCBzb2NrZXQsIGV2ZW4gdW5kZXIgbW9kZXJhdGUgbWVtb3J5CisJcHJlc3N1cmUuCisJRGVmYXVsdDogOEsKKworCWRlZmF1bHQ6IGRlZmF1bHQgc2l6ZSBvZiByZWNlaXZlIGJ1ZmZlciB1c2VkIGJ5IFRDUCBzb2NrZXRzLgorCVRoaXMgdmFsdWUgb3ZlcnJpZGVzIG5ldC5jb3JlLnJtZW1fZGVmYXVsdCB1c2VkIGJ5IG90aGVyIHByb3RvY29scy4KKwlEZWZhdWx0OiA4NzM4MCBieXRlcy4gVGhpcyB2YWx1ZSByZXN1bHRzIGluIHdpbmRvdyBvZiA2NTUzNSB3aXRoCisJZGVmYXVsdCBzZXR0aW5nIG9mIHRjcF9hZHZfd2luX3NjYWxlIGFuZCB0Y3BfYXBwX3dpbjowIGFuZCBhIGJpdAorCWxlc3MgZm9yIGRlZmF1bHQgdGNwX2FwcF93aW4uIFNlZSBiZWxvdyBhYm91dCB0aGVzZSB2YXJpYWJsZXMuCisKKwltYXg6IG1heGltYWwgc2l6ZSBvZiByZWNlaXZlIGJ1ZmZlciBhbGxvd2VkIGZvciBhdXRvbWF0aWNhbGx5CisJc2VsZWN0ZWQgcmVjZWl2ZXIgYnVmZmVycyBmb3IgVENQIHNvY2tldC4gVGhpcyB2YWx1ZSBkb2VzIG5vdCBvdmVycmlkZQorCW5ldC5jb3JlLnJtZW1fbWF4LCAic3RhdGljIiBzZWxlY3Rpb24gdmlhIFNPX1JDVkJVRiBkb2VzIG5vdCB1c2UgdGhpcy4KKwlEZWZhdWx0OiA4NzM4MCoyIGJ5dGVzLgorCit0Y3BfbWVtIC0gdmVjdG9yIG9mIDMgSU5URUdFUnM6IG1pbiwgcHJlc3N1cmUsIG1heAorCWxvdzogYmVsb3cgdGhpcyBudW1iZXIgb2YgcGFnZXMgVENQIGlzIG5vdCBib3RoZXJlZCBhYm91dCBpdHMKKwltZW1vcnkgYXBwZXRpdGUuCisKKwlwcmVzc3VyZTogd2hlbiBhbW91bnQgb2YgbWVtb3J5IGFsbG9jYXRlZCBieSBUQ1AgZXhjZWVkcyB0aGlzIG51bWJlcgorCW9mIHBhZ2VzLCBUQ1AgbW9kZXJhdGVzIGl0cyBtZW1vcnkgY29uc3VtcHRpb24gYW5kIGVudGVycyBtZW1vcnkKKwlwcmVzc3VyZSBtb2RlLCB3aGljaCBpcyBleGl0ZWQgd2hlbiBtZW1vcnkgY29uc3VtcHRpb24gZmFsbHMKKwl1bmRlciAibG93Ii4KKworCWhpZ2g6IG51bWJlciBvZiBwYWdlcyBhbGxvd2VkIGZvciBxdWV1ZWluZyBieSBhbGwgVENQIHNvY2tldHMuCisKKwlEZWZhdWx0cyBhcmUgY2FsY3VsYXRlZCBhdCBib290IHRpbWUgZnJvbSBhbW91bnQgb2YgYXZhaWxhYmxlCisJbWVtb3J5LgorCit0Y3BfYXBwX3dpbiAtIElOVEVHRVIKKwlSZXNlcnZlIG1heCh3aW5kb3cvMl50Y3BfYXBwX3dpbiwgbXNzKSBvZiB3aW5kb3cgZm9yIGFwcGxpY2F0aW9uCisJYnVmZmVyLiBWYWx1ZSAwIGlzIHNwZWNpYWwsIGl0IG1lYW5zIHRoYXQgbm90aGluZyBpcyByZXNlcnZlZC4KKwlEZWZhdWx0OiAzMQorCit0Y3BfYWR2X3dpbl9zY2FsZSAtIElOVEVHRVIKKwlDb3VudCBidWZmZXJpbmcgb3ZlcmhlYWQgYXMgYnl0ZXMvMl50Y3BfYWR2X3dpbl9zY2FsZQorCShpZiB0Y3BfYWR2X3dpbl9zY2FsZSA+IDApIG9yIGJ5dGVzLWJ5dGVzLzJeKC10Y3BfYWR2X3dpbl9zY2FsZSksCisJaWYgaXQgaXMgPD0gMC4KKwlEZWZhdWx0OiAyCisKK3RjcF9yZmMxMzM3IC0gQk9PTEVBTgorCUlmIHNldCwgdGhlIFRDUCBzdGFjayBiZWhhdmVzIGNvbmZvcm1pbmcgdG8gUkZDMTMzNy4gSWYgdW5zZXQsCisJd2UgYXJlIG5vdCBjb25mb3JtaW5nIHRvIFJGQywgYnV0IHByZXZlbnQgVENQIFRJTUVfV0FJVAorCWFzc2Fzc2luYXRpb24uICAgCisJRGVmYXVsdDogMAorCit0Y3BfbG93X2xhdGVuY3kgLSBCT09MRUFOCisJSWYgc2V0LCB0aGUgVENQIHN0YWNrIG1ha2VzIGRlY2lzaW9ucyB0aGF0IHByZWZlciBsb3dlcgorCWxhdGVuY3kgYXMgb3Bwb3NlZCB0byBoaWdoZXIgdGhyb3VnaHB1dC4gIEJ5IGRlZmF1bHQsIHRoaXMKKwlvcHRpb24gaXMgbm90IHNldCBtZWFuaW5nIHRoYXQgaGlnaGVyIHRocm91Z2hwdXQgaXMgcHJlZmVycmVkLgorCUFuIGV4YW1wbGUgb2YgYW4gYXBwbGljYXRpb24gd2hlcmUgdGhpcyBkZWZhdWx0IHNob3VsZCBiZQorCWNoYW5nZWQgd291bGQgYmUgYSBCZW93dWxmIGNvbXB1dGUgY2x1c3Rlci4KKwlEZWZhdWx0OiAwCisKK3RjcF93ZXN0d29vZCAtIEJPT0xFQU4KKyAgICAgICAgRW5hYmxlIFRDUCBXZXN0d29vZCsgY29uZ2VzdGlvbiBjb250cm9sIGFsZ29yaXRobS4KKwlUQ1AgV2VzdHdvb2QrIGlzIGEgc2VuZGVyLXNpZGUgb25seSBtb2RpZmljYXRpb24gb2YgdGhlIFRDUCBSZW5vIAorCXByb3RvY29sIHN0YWNrIHRoYXQgb3B0aW1pemVzIHRoZSBwZXJmb3JtYW5jZSBvZiBUQ1AgY29uZ2VzdGlvbiAKKwljb250cm9sLiBJdCBpcyBiYXNlZCBvbiBlbmQtdG8tZW5kIGJhbmR3aWR0aCBlc3RpbWF0aW9uIHRvIHNldCAKKwljb25nZXN0aW9uIHdpbmRvdyBhbmQgc2xvdyBzdGFydCB0aHJlc2hvbGQgYWZ0ZXIgYSBjb25nZXN0aW9uIAorCWVwaXNvZGUuIFVzaW5nIHRoaXMgZXN0aW1hdGlvbiwgVENQIFdlc3R3b29kKyBhZGFwdGl2ZWx5IHNldHMgYSAKKwlzbG93IHN0YXJ0IHRocmVzaG9sZCBhbmQgYSBjb25nZXN0aW9uIHdpbmRvdyB3aGljaCB0YWtlcyBpbnRvIAorCWFjY291bnQgdGhlIGJhbmR3aWR0aCB1c2VkICBhdCB0aGUgdGltZSBjb25nZXN0aW9uIGlzIGV4cGVyaWVuY2VkLiAKKwlUQ1AgV2VzdHdvb2QrIHNpZ25pZmljYW50bHkgaW5jcmVhc2VzIGZhaXJuZXNzIHdydCBUQ1AgUmVubyBpbiAKKwl3aXJlZCBuZXR3b3JrcyBhbmQgdGhyb3VnaHB1dCBvdmVyIHdpcmVsZXNzIGxpbmtzLiAgIAorICAgICAgICBEZWZhdWx0OiAwCisKK3RjcF92ZWdhc19jb25nX2F2b2lkIC0gQk9PTEVBTgorCUVuYWJsZSBUQ1AgVmVnYXMgY29uZ2VzdGlvbiBhdm9pZGFuY2UgYWxnb3JpdGhtLgorCVRDUCBWZWdhcyBpcyBhIHNlbmRlci1zaWRlIG9ubHkgY2hhbmdlIHRvIFRDUCB0aGF0IGFudGljaXBhdGVzCisJdGhlIG9uc2V0IG9mIGNvbmdlc3Rpb24gYnkgZXN0aW1hdGluZyB0aGUgYmFuZHdpZHRoLiBUQ1AgVmVnYXMKKwlhZGp1c3RzIHRoZSBzZW5kaW5nIHJhdGUgYnkgbW9kaWZ5aW5nIHRoZSBjb25nZXN0aW9uCisJd2luZG93LiBUQ1AgVmVnYXMgc2hvdWxkIHByb3ZpZGUgbGVzcyBwYWNrZXQgbG9zcywgYnV0IGl0IGlzCisJbm90IGFzIGFnZ3Jlc3NpdmUgYXMgVENQIFJlbm8uCisJRGVmYXVsdDowCisKK3RjcF9iaWMgLSBCT09MRUFOCisJRW5hYmxlIEJJQyBUQ1AgY29uZ2VzdGlvbiBjb250cm9sIGFsZ29yaXRobS4KKwlCSUMtVENQIGlzIGEgc2VuZGVyLXNpZGUgb25seSBjaGFuZ2UgdGhhdCBlbnN1cmVzIGEgbGluZWFyIFJUVAorCWZhaXJuZXNzIHVuZGVyIGxhcmdlIHdpbmRvd3Mgd2hpbGUgb2ZmZXJpbmcgYm90aCBzY2FsYWJpbGl0eSBhbmQKKwlib3VuZGVkIFRDUC1mcmllbmRsaW5lc3MuIFRoZSBwcm90b2NvbCBjb21iaW5lcyB0d28gc2NoZW1lcworCWNhbGxlZCBhZGRpdGl2ZSBpbmNyZWFzZSBhbmQgYmluYXJ5IHNlYXJjaCBpbmNyZWFzZS4gV2hlbiB0aGUKKwljb25nZXN0aW9uIHdpbmRvdyBpcyBsYXJnZSwgYWRkaXRpdmUgaW5jcmVhc2Ugd2l0aCBhIGxhcmdlCisJaW5jcmVtZW50IGVuc3VyZXMgbGluZWFyIFJUVCBmYWlybmVzcyBhcyB3ZWxsIGFzIGdvb2QKKwlzY2FsYWJpbGl0eS4gVW5kZXIgc21hbGwgY29uZ2VzdGlvbiB3aW5kb3dzLCBiaW5hcnkgc2VhcmNoCisJaW5jcmVhc2UgcHJvdmlkZXMgVENQIGZyaWVuZGxpbmVzcy4KKwlEZWZhdWx0OiAwCisKK3RjcF9iaWNfbG93X3dpbmRvdyAtIElOVEVHRVIKKwlTZXRzIHRoZSB0aHJlc2hvbGQgd2luZG93IChpbiBwYWNrZXRzKSB3aGVyZSBCSUMgVENQIHN0YXJ0cyB0bworCWFkanVzdCB0aGUgY29uZ2VzdGlvbiB3aW5kb3cuIEJlbG93IHRoaXMgdGhyZXNob2xkIEJJQyBUQ1AgYmVoYXZlcworCXRoZSBzYW1lIGFzIHRoZSBkZWZhdWx0IFRDUCBSZW5vLiAKKwlEZWZhdWx0OiAxNAorCit0Y3BfYmljX2Zhc3RfY29udmVyZ2VuY2UgLSBCT09MRUFOCisJRm9yY2VzIEJJQyBUQ1AgdG8gbW9yZSBxdWlja2x5IHJlc3BvbmQgdG8gY2hhbmdlcyBpbiBjb25nZXN0aW9uCisJd2luZG93LiBBbGxvd3MgdHdvIGZsb3dzIHNoYXJpbmcgdGhlIHNhbWUgY29ubmVjdGlvbiB0byBjb252ZXJnZQorCW1vcmUgcmFwaWRseS4KKwlEZWZhdWx0OiAxCisKK3RjcF9kZWZhdWx0X3dpbl9zY2FsZSAtIElOVEVHRVIKKwlTZXRzIHRoZSBtaW5pbXVtIHdpbmRvdyBzY2FsZSBUQ1Agd2lsbCBuZWdvdGlhdGUgZm9yIG9uIGFsbAorCWNvbmVjdGlvbnMuCisJRGVmYXVsdDogNworCit0Y3BfdHNvX3dpbl9kaXZpc29yIC0gSU5URUdFUgorICAgICAgIFRoaXMgYWxsb3dzIGNvbnRyb2wgb3ZlciB3aGF0IHBlcmNlbnRhZ2Ugb2YgdGhlIGNvbmdlc3Rpb24gd2luZG93CisgICAgICAgY2FuIGJlIGNvbnN1bWVkIGJ5IGEgc2luZ2xlIFRTTyBmcmFtZS4KKyAgICAgICBUaGUgc2V0dGluZyBvZiB0aGlzIHBhcmFtZXRlciBpcyBhIGNob2ljZSBiZXR3ZWVuIGJ1cnN0aW5lc3MgYW5kCisgICAgICAgYnVpbGRpbmcgbGFyZ2VyIFRTTyBmcmFtZXMuCisgICAgICAgRGVmYXVsdDogOAorCit0Y3BfZnJ0byAtIEJPT0xFQU4KKwlFbmFibGVzIEYtUlRPLCBhbiBlbmhhbmNlZCByZWNvdmVyeSBhbGdvcml0aG0gZm9yIFRDUCByZXRyYW5zbWlzc2lvbgorCXRpbWVvdXRzLiAgSXQgaXMgcGFydGljdWxhcmx5IGJlbmVmaWNpYWwgaW4gd2lyZWxlc3MgZW52aXJvbm1lbnRzCisJd2hlcmUgcGFja2V0IGxvc3MgaXMgdHlwaWNhbGx5IGR1ZSB0byByYW5kb20gcmFkaW8gaW50ZXJmZXJlbmNlCisJcmF0aGVyIHRoYW4gaW50ZXJtZWRpYXRlIHJvdXRlciBjb25nZXN0aW9uLgorCitzb21heGNvbm4gLSBJTlRFR0VSCisJTGltaXQgb2Ygc29ja2V0IGxpc3RlbigpIGJhY2tsb2csIGtub3duIGluIHVzZXJzcGFjZSBhcyBTT01BWENPTk4uCisJRGVmYXVsdHMgdG8gMTI4LiAgU2VlIGFsc28gdGNwX21heF9zeW5fYmFja2xvZyBmb3IgYWRkaXRpb25hbCB0dW5pbmcKKwlmb3IgVENQIHNvY2tldHMuCisKK0lQIFZhcmlhYmxlczoKKworaXBfbG9jYWxfcG9ydF9yYW5nZSAtIDIgSU5URUdFUlMKKwlEZWZpbmVzIHRoZSBsb2NhbCBwb3J0IHJhbmdlIHRoYXQgaXMgdXNlZCBieSBUQ1AgYW5kIFVEUCB0bworCWNob29zZSB0aGUgbG9jYWwgcG9ydC4gVGhlIGZpcnN0IG51bWJlciBpcyB0aGUgZmlyc3QsIHRoZSAKKwlzZWNvbmQgdGhlIGxhc3QgbG9jYWwgcG9ydCBudW1iZXIuIERlZmF1bHQgdmFsdWUgZGVwZW5kcyBvbgorCWFtb3VudCBvZiBtZW1vcnkgYXZhaWxhYmxlIG9uIHRoZSBzeXN0ZW06CisJPiAxMjhNYiAzMjc2OC02MTAwMAorCTwgMTI4TWIgMTAyNC00OTk5IG9yIGV2ZW4gbGVzcy4KKwlUaGlzIG51bWJlciBkZWZpbmVzIG51bWJlciBvZiBhY3RpdmUgY29ubmVjdGlvbnMsIHdoaWNoIHRoaXMKKwlzeXN0ZW0gY2FuIGlzc3VlIHNpbXVsdGFuZW91c2x5IHRvIHN5c3RlbXMgbm90IHN1cHBvcnRpbmcKKwlUQ1AgZXh0ZW5zaW9ucyAodGltZXN0YW1wcykuIFdpdGggdGNwX3R3X3JlY3ljbGUgZW5hYmxlZAorCShpLmUuIGJ5IGRlZmF1bHQpIHJhbmdlIDEwMjQtNDk5OSBpcyBlbm91Z2ggdG8gaXNzdWUgdXAgdG8KKwkyMDAwIGNvbm5lY3Rpb25zIHBlciBzZWNvbmQgdG8gc3lzdGVtcyBzdXBwb3J0aW5nIHRpbWVzdGFtcHMuCisKK2lwX25vbmxvY2FsX2JpbmQgLSBCT09MRUFOCisJSWYgc2V0LCBhbGxvd3MgcHJvY2Vzc2VzIHRvIGJpbmQoKSB0byBub24tbG9jYWwgSVAgYWRkcmVzc2VzLAorCXdoaWNoIGNhbiBiZSBxdWl0ZSB1c2VmdWwgLSBidXQgbWF5IGJyZWFrIHNvbWUgYXBwbGljYXRpb25zLgorCURlZmF1bHQ6IDAKKworaXBfZHluYWRkciAtIEJPT0xFQU4KKwlJZiBzZXQgbm9uLXplcm8sIGVuYWJsZXMgc3VwcG9ydCBmb3IgZHluYW1pYyBhZGRyZXNzZXMuCisJSWYgc2V0IHRvIGEgbm9uLXplcm8gdmFsdWUgbGFyZ2VyIHRoYW4gMSwgYSBrZXJuZWwgbG9nCisJbWVzc2FnZSB3aWxsIGJlIHByaW50ZWQgd2hlbiBkeW5hbWljIGFkZHJlc3MgcmV3cml0aW5nCisJb2NjdXJzLgorCURlZmF1bHQ6IDAKKworaWNtcF9lY2hvX2lnbm9yZV9hbGwgLSBCT09MRUFOCitpY21wX2VjaG9faWdub3JlX2Jyb2FkY2FzdHMgLSBCT09MRUFOCisJSWYgZWl0aGVyIGlzIHNldCB0byB0cnVlLCB0aGVuIHRoZSBrZXJuZWwgd2lsbCBpZ25vcmUgZWl0aGVyIGFsbAorCUlDTVAgRUNITyByZXF1ZXN0cyBzZW50IHRvIGl0IG9yIGp1c3QgdGhvc2UgdG8gYnJvYWRjYXN0L211bHRpY2FzdAorCWFkZHJlc3NlcywgcmVzcGVjdGl2ZWx5LgorCitpY21wX3JhdGVsaW1pdCAtIElOVEVHRVIKKwlMaW1pdCB0aGUgbWF4aW1hbCByYXRlcyBmb3Igc2VuZGluZyBJQ01QIHBhY2tldHMgd2hvc2UgdHlwZSBtYXRjaGVzCisJaWNtcF9yYXRlbWFzayAoc2VlIGJlbG93KSB0byBzcGVjaWZpYyB0YXJnZXRzLgorCTAgdG8gZGlzYWJsZSBhbnkgbGltaXRpbmcsIG90aGVyd2lzZSB0aGUgbWF4aW1hbCByYXRlIGluIGppZmZpZXMoMSkKKwlEZWZhdWx0OiAxMDAKKworaWNtcF9yYXRlbWFzayAtIElOVEVHRVIKKwlNYXNrIG1hZGUgb2YgSUNNUCB0eXBlcyBmb3Igd2hpY2ggcmF0ZXMgYXJlIGJlaW5nIGxpbWl0ZWQuCisJU2lnbmlmaWNhbnQgYml0czogSUhHRkVEQ0JBOTg3NjU0MzIxMAorCURlZmF1bHQgbWFzazogICAgIDAwMDAwMDExMDAwMDAwMTEwMDAgKDYxNjgpCisKKwlCaXQgZGVmaW5pdGlvbnMgKHNlZSBpbmNsdWRlL2xpbnV4L2ljbXAuaCk6CisJCTAgRWNobyBSZXBseQorCQkzIERlc3RpbmF0aW9uIFVucmVhY2hhYmxlICoKKwkJNCBTb3VyY2UgUXVlbmNoICoKKwkJNSBSZWRpcmVjdAorCQk4IEVjaG8gUmVxdWVzdAorCQlCIFRpbWUgRXhjZWVkZWQgKgorCQlDIFBhcmFtZXRlciBQcm9ibGVtICoKKwkJRCBUaW1lc3RhbXAgUmVxdWVzdAorCQlFIFRpbWVzdGFtcCBSZXBseQorCQlGIEluZm8gUmVxdWVzdAorCQlHIEluZm8gUmVwbHkKKwkJSCBBZGRyZXNzIE1hc2sgUmVxdWVzdAorCQlJIEFkZHJlc3MgTWFzayBSZXBseQorCisJKiBUaGVzZSBhcmUgcmF0ZSBsaW1pdGVkIGJ5IGRlZmF1bHQgKHNlZSBkZWZhdWx0IG1hc2sgYWJvdmUpCisKK2ljbXBfaWdub3JlX2JvZ3VzX2Vycm9yX3Jlc3BvbnNlcyAtIEJPT0xFQU4KKwlTb21lIHJvdXRlcnMgdmlvbGF0ZSBSRkMxMTIyIGJ5IHNlbmRpbmcgYm9ndXMgcmVzcG9uc2VzIHRvIGJyb2FkY2FzdAorCWZyYW1lcy4gIFN1Y2ggdmlvbGF0aW9ucyBhcmUgbm9ybWFsbHkgbG9nZ2VkIHZpYSBhIGtlcm5lbCB3YXJuaW5nLgorCUlmIHRoaXMgaXMgc2V0IHRvIFRSVUUsIHRoZSBrZXJuZWwgd2lsbCBub3QgZ2l2ZSBzdWNoIHdhcm5pbmdzLCB3aGljaAorCXdpbGwgYXZvaWQgbG9nIGZpbGUgY2x1dHRlci4KKwlEZWZhdWx0OiBGQUxTRQorCitpZ21wX21heF9tZW1iZXJzaGlwcyAtIElOVEVHRVIKKwlDaGFuZ2UgdGhlIG1heGltdW0gbnVtYmVyIG9mIG11bHRpY2FzdCBncm91cHMgd2UgY2FuIHN1YnNjcmliZSB0by4KKwlEZWZhdWx0OiAyMAorCitjb25mL2ludGVyZmFjZS8qICBjaGFuZ2VzIHNwZWNpYWwgc2V0dGluZ3MgcGVyIGludGVyZmFjZSAod2hlcmUgImludGVyZmFjZSIgaXMgCisJCSAgdGhlIG5hbWUgb2YgeW91ciBuZXR3b3JrIGludGVyZmFjZSkKK2NvbmYvYWxsLyoJICBpcyBzcGVjaWFsLCBjaGFuZ2VzIHRoZSBzZXR0aW5ncyBmb3IgYWxsIGludGVyZmFjZXMKKworCitsb2dfbWFydGlhbnMgLSBCT09MRUFOCisJTG9nIHBhY2tldHMgd2l0aCBpbXBvc3NpYmxlIGFkZHJlc3NlcyB0byBrZXJuZWwgbG9nLgorCWxvZ19tYXJ0aWFucyBmb3IgdGhlIGludGVyZmFjZSB3aWxsIGJlIGVuYWJsZWQgaWYgYXQgbGVhc3Qgb25lIG9mCisJY29uZi97YWxsLGludGVyZmFjZX0vbG9nX21hcnRpYW5zIGlzIHNldCB0byBUUlVFLAorCWl0IHdpbGwgYmUgZGlzYWJsZWQgb3RoZXJ3aXNlCisKK2FjY2VwdF9yZWRpcmVjdHMgLSBCT09MRUFOCisJQWNjZXB0IElDTVAgcmVkaXJlY3QgbWVzc2FnZXMuCisJYWNjZXB0X3JlZGlyZWN0cyBmb3IgdGhlIGludGVyZmFjZSB3aWxsIGJlIGVuYWJsZWQgaWY6CisJLSBib3RoIGNvbmYve2FsbCxpbnRlcmZhY2V9L2FjY2VwdF9yZWRpcmVjdHMgYXJlIFRSVUUgaW4gdGhlIGNhc2UgZm9yd2FyZGluZworCSAgZm9yIHRoZSBpbnRlcmZhY2UgaXMgZW5hYmxlZAorCW9yCisJLSBhdCBsZWFzdCBvbmUgb2YgY29uZi97YWxsLGludGVyZmFjZX0vYWNjZXB0X3JlZGlyZWN0cyBpcyBUUlVFIGluIHRoZSBjYXNlCisJICBmb3J3YXJkaW5nIGZvciB0aGUgaW50ZXJmYWNlIGlzIGRpc2FibGVkCisJYWNjZXB0X3JlZGlyZWN0cyBmb3IgdGhlIGludGVyZmFjZSB3aWxsIGJlIGRpc2FibGVkIG90aGVyd2lzZQorCWRlZmF1bHQgVFJVRSAoaG9zdCkKKwkJRkFMU0UgKHJvdXRlcikKKworZm9yd2FyZGluZyAtIEJPT0xFQU4KKwlFbmFibGUgSVAgZm9yd2FyZGluZyBvbiB0aGlzIGludGVyZmFjZS4KKworbWNfZm9yd2FyZGluZyAtIEJPT0xFQU4KKwlEbyBtdWx0aWNhc3Qgcm91dGluZy4gVGhlIGtlcm5lbCBuZWVkcyB0byBiZSBjb21waWxlZCB3aXRoIENPTkZJR19NUk9VVEUKKwlhbmQgYSBtdWx0aWNhc3Qgcm91dGluZyBkYWVtb24gaXMgcmVxdWlyZWQuCisJY29uZi9hbGwvbWNfZm9yd2FyZGluZyBtdXN0IGFsc28gYmUgc2V0IHRvIFRSVUUgdG8gZW5hYmxlIG11bHRpY2FzdCByb3V0aW5nCisJZm9yIHRoZSBpbnRlcmZhY2UKKworbWVkaXVtX2lkIC0gSU5URUdFUgorCUludGVnZXIgdmFsdWUgdXNlZCB0byBkaWZmZXJlbnRpYXRlIHRoZSBkZXZpY2VzIGJ5IHRoZSBtZWRpdW0gdGhleQorCWFyZSBhdHRhY2hlZCB0by4gVHdvIGRldmljZXMgY2FuIGhhdmUgZGlmZmVyZW50IGlkIHZhbHVlcyB3aGVuCisJdGhlIGJyb2FkY2FzdCBwYWNrZXRzIGFyZSByZWNlaXZlZCBvbmx5IG9uIG9uZSBvZiB0aGVtLgorCVRoZSBkZWZhdWx0IHZhbHVlIDAgbWVhbnMgdGhhdCB0aGUgZGV2aWNlIGlzIHRoZSBvbmx5IGludGVyZmFjZQorCXRvIGl0cyBtZWRpdW0sIHZhbHVlIG9mIC0xIG1lYW5zIHRoYXQgbWVkaXVtIGlzIG5vdCBrbm93bi4KKwkKKwlDdXJyZW50bHksIGl0IGlzIHVzZWQgdG8gY2hhbmdlIHRoZSBwcm94eV9hcnAgYmVoYXZpb3I6CisJdGhlIHByb3h5X2FycCBmZWF0dXJlIGlzIGVuYWJsZWQgZm9yIHBhY2tldHMgZm9yd2FyZGVkIGJldHdlZW4KKwl0d28gZGV2aWNlcyBhdHRhY2hlZCB0byBkaWZmZXJlbnQgbWVkaWEuCisKK3Byb3h5X2FycCAtIEJPT0xFQU4KKwlEbyBwcm94eSBhcnAuCisJcHJveHlfYXJwIGZvciB0aGUgaW50ZXJmYWNlIHdpbGwgYmUgZW5hYmxlZCBpZiBhdCBsZWFzdCBvbmUgb2YKKwljb25mL3thbGwsaW50ZXJmYWNlfS9wcm94eV9hcnAgaXMgc2V0IHRvIFRSVUUsCisJaXQgd2lsbCBiZSBkaXNhYmxlZCBvdGhlcndpc2UKKworc2hhcmVkX21lZGlhIC0gQk9PTEVBTgorCVNlbmQocm91dGVyKSBvciBhY2NlcHQoaG9zdCkgUkZDMTYyMCBzaGFyZWQgbWVkaWEgcmVkaXJlY3RzLgorCU92ZXJyaWRlcyBpcF9zZWN1cmVfcmVkaXJlY3RzLgorCXNoYXJlZF9tZWRpYSBmb3IgdGhlIGludGVyZmFjZSB3aWxsIGJlIGVuYWJsZWQgaWYgYXQgbGVhc3Qgb25lIG9mCisJY29uZi97YWxsLGludGVyZmFjZX0vc2hhcmVkX21lZGlhIGlzIHNldCB0byBUUlVFLAorCWl0IHdpbGwgYmUgZGlzYWJsZWQgb3RoZXJ3aXNlCisJZGVmYXVsdCBUUlVFCisKK3NlY3VyZV9yZWRpcmVjdHMgLSBCT09MRUFOCisJQWNjZXB0IElDTVAgcmVkaXJlY3QgbWVzc2FnZXMgb25seSBmb3IgZ2F0ZXdheXMsCisJbGlzdGVkIGluIGRlZmF1bHQgZ2F0ZXdheSBsaXN0LgorCXNlY3VyZV9yZWRpcmVjdHMgZm9yIHRoZSBpbnRlcmZhY2Ugd2lsbCBiZSBlbmFibGVkIGlmIGF0IGxlYXN0IG9uZSBvZgorCWNvbmYve2FsbCxpbnRlcmZhY2V9L3NlY3VyZV9yZWRpcmVjdHMgaXMgc2V0IHRvIFRSVUUsCisJaXQgd2lsbCBiZSBkaXNhYmxlZCBvdGhlcndpc2UKKwlkZWZhdWx0IFRSVUUKKworc2VuZF9yZWRpcmVjdHMgLSBCT09MRUFOCisJU2VuZCByZWRpcmVjdHMsIGlmIHJvdXRlci4KKwlzZW5kX3JlZGlyZWN0cyBmb3IgdGhlIGludGVyZmFjZSB3aWxsIGJlIGVuYWJsZWQgaWYgYXQgbGVhc3Qgb25lIG9mCisJY29uZi97YWxsLGludGVyZmFjZX0vc2VuZF9yZWRpcmVjdHMgaXMgc2V0IHRvIFRSVUUsCisJaXQgd2lsbCBiZSBkaXNhYmxlZCBvdGhlcndpc2UKKwlEZWZhdWx0OiBUUlVFCisKK2Jvb3RwX3JlbGF5IC0gQk9PTEVBTgorCUFjY2VwdCBwYWNrZXRzIHdpdGggc291cmNlIGFkZHJlc3MgMC5iLmMuZCBkZXN0aW5lZAorCW5vdCB0byB0aGlzIGhvc3QgYXMgbG9jYWwgb25lcy4gSXQgaXMgc3VwcG9zZWQsIHRoYXQKKwlCT09UUCByZWxheSBkYWVtb24gd2lsbCBjYXRjaCBhbmQgZm9yd2FyZCBzdWNoIHBhY2tldHMuCisJY29uZi9hbGwvYm9vdHBfcmVsYXkgbXVzdCBhbHNvIGJlIHNldCB0byBUUlVFIHRvIGVuYWJsZSBCT09UUCByZWxheQorCWZvciB0aGUgaW50ZXJmYWNlCisJZGVmYXVsdCBGQUxTRQorCU5vdCBJbXBsZW1lbnRlZCBZZXQuCisKK2FjY2VwdF9zb3VyY2Vfcm91dGUgLSBCT09MRUFOCisJQWNjZXB0IHBhY2tldHMgd2l0aCBTUlIgb3B0aW9uLgorCWNvbmYvYWxsL2FjY2VwdF9zb3VyY2Vfcm91dGUgbXVzdCBhbHNvIGJlIHNldCB0byBUUlVFIHRvIGFjY2VwdCBwYWNrZXRzCisJd2l0aCBTUlIgb3B0aW9uIG9uIHRoZSBpbnRlcmZhY2UKKwlkZWZhdWx0IFRSVUUgKHJvdXRlcikKKwkJRkFMU0UgKGhvc3QpCisKK3JwX2ZpbHRlciAtIEJPT0xFQU4KKwkxIC0gZG8gc291cmNlIHZhbGlkYXRpb24gYnkgcmV2ZXJzZWQgcGF0aCwgYXMgc3BlY2lmaWVkIGluIFJGQzE4MTIKKwkgICAgUmVjb21tZW5kZWQgb3B0aW9uIGZvciBzaW5nbGUgaG9tZWQgaG9zdHMgYW5kIHN0dWIgbmV0d29yaworCSAgICByb3V0ZXJzLiBDb3VsZCBjYXVzZSB0cm91YmxlcyBmb3IgY29tcGxpY2F0ZWQgKG5vdCBsb29wIGZyZWUpCisJICAgIG5ldHdvcmtzIHJ1bm5pbmcgYSBzbG93IHVucmVsaWFibGUgcHJvdG9jb2wgKHNvcnQgb2YgUklQKSwKKwkgICAgb3IgdXNpbmcgc3RhdGljIHJvdXRlcy4KKworCTAgLSBObyBzb3VyY2UgdmFsaWRhdGlvbi4KKworCWNvbmYvYWxsL3JwX2ZpbHRlciBtdXN0IGFsc28gYmUgc2V0IHRvIFRSVUUgdG8gZG8gc291cmNlIHZhbGlkYXRpb24KKwlvbiB0aGUgaW50ZXJmYWNlCisKKwlEZWZhdWx0IHZhbHVlIGlzIDAuIE5vdGUgdGhhdCBzb21lIGRpc3RyaWJ1dGlvbnMgZW5hYmxlIGl0CisJaW4gc3RhcnR1cCBzY3JpcHRzLgorCithcnBfZmlsdGVyIC0gQk9PTEVBTgorCTEgLSBBbGxvd3MgeW91IHRvIGhhdmUgbXVsdGlwbGUgbmV0d29yayBpbnRlcmZhY2VzIG9uIHRoZSBzYW1lCisJc3VibmV0LCBhbmQgaGF2ZSB0aGUgQVJQcyBmb3IgZWFjaCBpbnRlcmZhY2UgYmUgYW5zd2VyZWQKKwliYXNlZCBvbiB3aGV0aGVyIG9yIG5vdCB0aGUga2VybmVsIHdvdWxkIHJvdXRlIGEgcGFja2V0IGZyb20KKwl0aGUgQVJQJ2QgSVAgb3V0IHRoYXQgaW50ZXJmYWNlICh0aGVyZWZvcmUgeW91IG11c3QgdXNlIHNvdXJjZQorCWJhc2VkIHJvdXRpbmcgZm9yIHRoaXMgdG8gd29yaykuIEluIG90aGVyIHdvcmRzIGl0IGFsbG93cyBjb250cm9sCisJb2Ygd2hpY2ggY2FyZHMgKHVzdWFsbHkgMSkgd2lsbCByZXNwb25kIHRvIGFuIGFycCByZXF1ZXN0LgorCisJMCAtIChkZWZhdWx0KSBUaGUga2VybmVsIGNhbiByZXNwb25kIHRvIGFycCByZXF1ZXN0cyB3aXRoIGFkZHJlc3NlcworCWZyb20gb3RoZXIgaW50ZXJmYWNlcy4gVGhpcyBtYXkgc2VlbSB3cm9uZyBidXQgaXQgdXN1YWxseSBtYWtlcworCXNlbnNlLCBiZWNhdXNlIGl0IGluY3JlYXNlcyB0aGUgY2hhbmNlIG9mIHN1Y2Nlc3NmdWwgY29tbXVuaWNhdGlvbi4KKwlJUCBhZGRyZXNzZXMgYXJlIG93bmVkIGJ5IHRoZSBjb21wbGV0ZSBob3N0IG9uIExpbnV4LCBub3QgYnkKKwlwYXJ0aWN1bGFyIGludGVyZmFjZXMuIE9ubHkgZm9yIG1vcmUgY29tcGxleCBzZXR1cHMgbGlrZSBsb2FkLQorCWJhbGFuY2luZywgZG9lcyB0aGlzIGJlaGF2aW91ciBjYXVzZSBwcm9ibGVtcy4KKworCWFycF9maWx0ZXIgZm9yIHRoZSBpbnRlcmZhY2Ugd2lsbCBiZSBlbmFibGVkIGlmIGF0IGxlYXN0IG9uZSBvZgorCWNvbmYve2FsbCxpbnRlcmZhY2V9L2FycF9maWx0ZXIgaXMgc2V0IHRvIFRSVUUsCisJaXQgd2lsbCBiZSBkaXNhYmxlZCBvdGhlcndpc2UKKworYXJwX2Fubm91bmNlIC0gSU5URUdFUgorCURlZmluZSBkaWZmZXJlbnQgcmVzdHJpY3Rpb24gbGV2ZWxzIGZvciBhbm5vdW5jaW5nIHRoZSBsb2NhbAorCXNvdXJjZSBJUCBhZGRyZXNzIGZyb20gSVAgcGFja2V0cyBpbiBBUlAgcmVxdWVzdHMgc2VudCBvbgorCWludGVyZmFjZToKKwkwIC0gKGRlZmF1bHQpIFVzZSBhbnkgbG9jYWwgYWRkcmVzcywgY29uZmlndXJlZCBvbiBhbnkgaW50ZXJmYWNlCisJMSAtIFRyeSB0byBhdm9pZCBsb2NhbCBhZGRyZXNzZXMgdGhhdCBhcmUgbm90IGluIHRoZSB0YXJnZXQncworCXN1Ym5ldCBmb3IgdGhpcyBpbnRlcmZhY2UuIFRoaXMgbW9kZSBpcyB1c2VmdWwgd2hlbiB0YXJnZXQKKwlob3N0cyByZWFjaGFibGUgdmlhIHRoaXMgaW50ZXJmYWNlIHJlcXVpcmUgdGhlIHNvdXJjZSBJUAorCWFkZHJlc3MgaW4gQVJQIHJlcXVlc3RzIHRvIGJlIHBhcnQgb2YgdGhlaXIgbG9naWNhbCBuZXR3b3JrCisJY29uZmlndXJlZCBvbiB0aGUgcmVjZWl2aW5nIGludGVyZmFjZS4gV2hlbiB3ZSBnZW5lcmF0ZSB0aGUKKwlyZXF1ZXN0IHdlIHdpbGwgY2hlY2sgYWxsIG91ciBzdWJuZXRzIHRoYXQgaW5jbHVkZSB0aGUKKwl0YXJnZXQgSVAgYW5kIHdpbGwgcHJlc2VydmUgdGhlIHNvdXJjZSBhZGRyZXNzIGlmIGl0IGlzIGZyb20KKwlzdWNoIHN1Ym5ldC4gSWYgdGhlcmUgaXMgbm8gc3VjaCBzdWJuZXQgd2Ugc2VsZWN0IHNvdXJjZQorCWFkZHJlc3MgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBmb3IgbGV2ZWwgMi4KKwkyIC0gQWx3YXlzIHVzZSB0aGUgYmVzdCBsb2NhbCBhZGRyZXNzIGZvciB0aGlzIHRhcmdldC4KKwlJbiB0aGlzIG1vZGUgd2UgaWdub3JlIHRoZSBzb3VyY2UgYWRkcmVzcyBpbiB0aGUgSVAgcGFja2V0CisJYW5kIHRyeSB0byBzZWxlY3QgbG9jYWwgYWRkcmVzcyB0aGF0IHdlIHByZWZlciBmb3IgdGFsa3Mgd2l0aAorCXRoZSB0YXJnZXQgaG9zdC4gU3VjaCBsb2NhbCBhZGRyZXNzIGlzIHNlbGVjdGVkIGJ5IGxvb2tpbmcKKwlmb3IgcHJpbWFyeSBJUCBhZGRyZXNzZXMgb24gYWxsIG91ciBzdWJuZXRzIG9uIHRoZSBvdXRnb2luZworCWludGVyZmFjZSB0aGF0IGluY2x1ZGUgdGhlIHRhcmdldCBJUCBhZGRyZXNzLiBJZiBubyBzdWl0YWJsZQorCWxvY2FsIGFkZHJlc3MgaXMgZm91bmQgd2Ugc2VsZWN0IHRoZSBmaXJzdCBsb2NhbCBhZGRyZXNzCisJd2UgaGF2ZSBvbiB0aGUgb3V0Z29pbmcgaW50ZXJmYWNlIG9yIG9uIGFsbCBvdGhlciBpbnRlcmZhY2VzLAorCXdpdGggdGhlIGhvcGUgd2Ugd2lsbCByZWNlaXZlIHJlcGx5IGZvciBvdXIgcmVxdWVzdCBhbmQKKwlldmVuIHNvbWV0aW1lcyBubyBtYXR0ZXIgdGhlIHNvdXJjZSBJUCBhZGRyZXNzIHdlIGFubm91bmNlLgorCisJVGhlIG1heCB2YWx1ZSBmcm9tIGNvbmYve2FsbCxpbnRlcmZhY2V9L2FycF9hbm5vdW5jZSBpcyB1c2VkLgorCisJSW5jcmVhc2luZyB0aGUgcmVzdHJpY3Rpb24gbGV2ZWwgZ2l2ZXMgbW9yZSBjaGFuY2UgZm9yCisJcmVjZWl2aW5nIGFuc3dlciBmcm9tIHRoZSByZXNvbHZlZCB0YXJnZXQgd2hpbGUgZGVjcmVhc2luZworCXRoZSBsZXZlbCBhbm5vdW5jZXMgbW9yZSB2YWxpZCBzZW5kZXIncyBpbmZvcm1hdGlvbi4KKworYXJwX2lnbm9yZSAtIElOVEVHRVIKKwlEZWZpbmUgZGlmZmVyZW50IG1vZGVzIGZvciBzZW5kaW5nIHJlcGxpZXMgaW4gcmVzcG9uc2UgdG8KKwlyZWNlaXZlZCBBUlAgcmVxdWVzdHMgdGhhdCByZXNvbHZlIGxvY2FsIHRhcmdldCBJUCBhZGRyZXNzZXM6CisJMCAtIChkZWZhdWx0KTogcmVwbHkgZm9yIGFueSBsb2NhbCB0YXJnZXQgSVAgYWRkcmVzcywgY29uZmlndXJlZAorCW9uIGFueSBpbnRlcmZhY2UKKwkxIC0gcmVwbHkgb25seSBpZiB0aGUgdGFyZ2V0IElQIGFkZHJlc3MgaXMgbG9jYWwgYWRkcmVzcworCWNvbmZpZ3VyZWQgb24gdGhlIGluY29taW5nIGludGVyZmFjZQorCTIgLSByZXBseSBvbmx5IGlmIHRoZSB0YXJnZXQgSVAgYWRkcmVzcyBpcyBsb2NhbCBhZGRyZXNzCisJY29uZmlndXJlZCBvbiB0aGUgaW5jb21pbmcgaW50ZXJmYWNlIGFuZCBib3RoIHdpdGggdGhlCisJc2VuZGVyJ3MgSVAgYWRkcmVzcyBhcmUgcGFydCBmcm9tIHNhbWUgc3VibmV0IG9uIHRoaXMgaW50ZXJmYWNlCisJMyAtIGRvIG5vdCByZXBseSBmb3IgbG9jYWwgYWRkcmVzc2VzIGNvbmZpZ3VyZWQgd2l0aCBzY29wZSBob3N0LAorCW9ubHkgcmVzb2x1dGlvbnMgZm9yIGdsb2JhbCBhbmQgbGluayBhZGRyZXNzZXMgYXJlIHJlcGxpZWQKKwk0LTcgLSByZXNlcnZlZAorCTggLSBkbyBub3QgcmVwbHkgZm9yIGFsbCBsb2NhbCBhZGRyZXNzZXMKKworCVRoZSBtYXggdmFsdWUgZnJvbSBjb25mL3thbGwsaW50ZXJmYWNlfS9hcnBfaWdub3JlIGlzIHVzZWQKKwl3aGVuIEFSUCByZXF1ZXN0IGlzIHJlY2VpdmVkIG9uIHRoZSB7aW50ZXJmYWNlfQorCithcHBfc29saWNpdCAtIElOVEVHRVIKKwlUaGUgbWF4aW11bSBudW1iZXIgb2YgcHJvYmVzIHRvIHNlbmQgdG8gdGhlIHVzZXIgc3BhY2UgQVJQIGRhZW1vbgorCXZpYSBuZXRsaW5rIGJlZm9yZSBkcm9wcGluZyBiYWNrIHRvIG11bHRpY2FzdCBwcm9iZXMgKHNlZQorCW1jYXN0X3NvbGljaXQpLiAgRGVmYXVsdHMgdG8gMC4KKworZGlzYWJsZV9wb2xpY3kgLSBCT09MRUFOCisJRGlzYWJsZSBJUFNFQyBwb2xpY3kgKFNQRCkgZm9yIHRoaXMgaW50ZXJmYWNlCisKK2Rpc2FibGVfeGZybSAtIEJPT0xFQU4KKwlEaXNhYmxlIElQU0VDIGVuY3J5cHRpb24gb24gdGhpcyBpbnRlcmZhY2UsIHdoYXRldmVyIHRoZSBwb2xpY3kKKworCisKK3RhZyAtIElOVEVHRVIKKwlBbGxvd3MgeW91IHRvIHdyaXRlIGEgbnVtYmVyLCB3aGljaCBjYW4gYmUgdXNlZCBhcyByZXF1aXJlZC4KKwlEZWZhdWx0IHZhbHVlIGlzIDAuCisKKygxKSBKaWZmaWU6IGludGVybmFsIHRpbWV1bml0IGZvciB0aGUga2VybmVsLiBPbiB0aGUgaTM4NiAxLzEwMHMsIG9uIHRoZQorQWxwaGEgMS8xMDI0cy4gU2VlIHRoZSBIWiBkZWZpbmUgaW4gL3Vzci9pbmNsdWRlL2FzbS9wYXJhbS5oIGZvciB0aGUgZXhhY3QKK3ZhbHVlIG9uIHlvdXIgc3lzdGVtLiAKKworQWxleGV5IEt1em5ldHNvdi4KK2t1em5ldEBtczIuaW5yLmFjLnJ1CisKK1VwZGF0ZWQgYnk6CitBbmRpIEtsZWVuCitha0BtdWMuZGUKK05pY29sYXMgRGVsb24KK2RlbG9uLm5pY29sYXNAd2FuYWRvby5mcgorCisKKworCisvcHJvYy9zeXMvbmV0L2lwdjYvKiBWYXJpYWJsZXM6CisKK0lQdjYgaGFzIG5vIGdsb2JhbCB2YXJpYWJsZXMgc3VjaCBhcyB0Y3BfKi4gIHRjcF8qIHNldHRpbmdzIHVuZGVyIGlwdjQvIGFsc28KK2FwcGx5IHRvIElQdjYgW1hYWD9dLgorCitiaW5kdjZvbmx5IC0gQk9PTEVBTgorCURlZmF1bHQgdmFsdWUgZm9yIElQVjZfVjZPTkxZIHNvY2tldCBvcHRpb24sCisJd2hpY2ggcmVzdHJpY3RzIHVzZSBvZiB0aGUgSVB2NiBzb2NrZXQgdG8gSVB2NiBjb21tdW5pY2F0aW9uIAorCW9ubHkuCisJCVRSVUU6IGRpc2FibGUgSVB2NC1tYXBwZWQgYWRkcmVzcyBmZWF0dXJlCisJCUZBTFNFOiBlbmFibGUgSVB2NC1tYXBwZWQgYWRkcmVzcyBmZWF0dXJlCisKKwlEZWZhdWx0OiBGQUxTRSAoYXMgc3BlY2lmaWVkIGluIFJGQzI1NTNiaXMpCisKK0lQdjYgRnJhZ21lbnRhdGlvbjoKKworaXA2ZnJhZ19oaWdoX3RocmVzaCAtIElOVEVHRVIKKwlNYXhpbXVtIG1lbW9yeSB1c2VkIHRvIHJlYXNzZW1ibGUgSVB2NiBmcmFnbWVudHMuIFdoZW4gCisJaXA2ZnJhZ19oaWdoX3RocmVzaCBieXRlcyBvZiBtZW1vcnkgaXMgYWxsb2NhdGVkIGZvciB0aGlzIHB1cnBvc2UsCisJdGhlIGZyYWdtZW50IGhhbmRsZXIgd2lsbCB0b3NzIHBhY2tldHMgdW50aWwgaXA2ZnJhZ19sb3dfdGhyZXNoCisJaXMgcmVhY2hlZC4KKwkKK2lwNmZyYWdfbG93X3RocmVzaCAtIElOVEVHRVIKKwlTZWUgaXA2ZnJhZ19oaWdoX3RocmVzaAkKKworaXA2ZnJhZ190aW1lIC0gSU5URUdFUgorCVRpbWUgaW4gc2Vjb25kcyB0byBrZWVwIGFuIElQdjYgZnJhZ21lbnQgaW4gbWVtb3J5LgorCitpcDZmcmFnX3NlY3JldF9pbnRlcnZhbCAtIElOVEVHRVIKKwlSZWdlbmVyYXRpb24gaW50ZXJ2YWwgKGluIHNlY29uZHMpIG9mIHRoZSBoYXNoIHNlY3JldCAob3IgbGlmZXRpbWUgCisJZm9yIHRoZSBoYXNoIHNlY3JldCkgZm9yIElQdjYgZnJhZ21lbnRzLgorCURlZmF1bHQ6IDYwMAorCitjb25mL2RlZmF1bHQvKjoKKwlDaGFuZ2UgdGhlIGludGVyZmFjZS1zcGVjaWZpYyBkZWZhdWx0IHNldHRpbmdzLgorCisKK2NvbmYvYWxsLyo6CisJQ2hhbmdlIGFsbCB0aGUgaW50ZXJmYWNlLXNwZWNpZmljIHNldHRpbmdzLiAgCisKKwlbWFhYOiAgT3RoZXIgc3BlY2lhbCBmZWF0dXJlcyB0aGFuIGZvcndhcmRpbmc/XQorCitjb25mL2FsbC9mb3J3YXJkaW5nIC0gQk9PTEVBTgorCUVuYWJsZSBnbG9iYWwgSVB2NiBmb3J3YXJkaW5nIGJldHdlZW4gYWxsIGludGVyZmFjZXMuICAKKworCUlQdjQgYW5kIElQdjYgd29yayBkaWZmZXJlbnRseSBoZXJlOyBlLmcuIG5ldGZpbHRlciBtdXN0IGJlIHVzZWQgCisJdG8gY29udHJvbCB3aGljaCBpbnRlcmZhY2VzIG1heSBmb3J3YXJkIHBhY2tldHMgYW5kIHdoaWNoIG5vdC4KKworCVRoaXMgYWxzbyBzZXRzIGFsbCBpbnRlcmZhY2VzJyBIb3N0L1JvdXRlciBzZXR0aW5nIAorCSdmb3J3YXJkaW5nJyB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLiAgU2VlIGJlbG93IGZvciBkZXRhaWxzLgorCisJVGhpcyByZWZlcnJlZCB0byBhcyBnbG9iYWwgZm9yd2FyZGluZy4KKworY29uZi9pbnRlcmZhY2UvKjoKKwlDaGFuZ2Ugc3BlY2lhbCBzZXR0aW5ncyBwZXIgaW50ZXJmYWNlLgorCisJVGhlIGZ1bmN0aW9uYWwgYmVoYXZpb3VyIGZvciBjZXJ0YWluIHNldHRpbmdzIGlzIGRpZmZlcmVudCAKKwlkZXBlbmRpbmcgb24gd2hldGhlciBsb2NhbCBmb3J3YXJkaW5nIGlzIGVuYWJsZWQgb3Igbm90LgorCithY2NlcHRfcmEgLSBCT09MRUFOCisJQWNjZXB0IFJvdXRlciBBZHZlcnRpc2VtZW50czsgYXV0b2NvbmZpZ3VyZSB1c2luZyB0aGVtLgorCQorCUZ1bmN0aW9uYWwgZGVmYXVsdDogZW5hYmxlZCBpZiBsb2NhbCBmb3J3YXJkaW5nIGlzIGRpc2FibGVkLgorCQkJICAgIGRpc2FibGVkIGlmIGxvY2FsIGZvcndhcmRpbmcgaXMgZW5hYmxlZC4KKworYWNjZXB0X3JlZGlyZWN0cyAtIEJPT0xFQU4KKwlBY2NlcHQgUmVkaXJlY3RzLgorCisJRnVuY3Rpb25hbCBkZWZhdWx0OiBlbmFibGVkIGlmIGxvY2FsIGZvcndhcmRpbmcgaXMgZGlzYWJsZWQuCisJCQkgICAgZGlzYWJsZWQgaWYgbG9jYWwgZm9yd2FyZGluZyBpcyBlbmFibGVkLgorCithdXRvY29uZiAtIEJPT0xFQU4KKwlBdXRvY29uZmlndXJlIGFkZHJlc3NlcyB1c2luZyBQcmVmaXggSW5mb3JtYXRpb24gaW4gUm91dGVyIAorCUFkdmVydGlzZW1lbnRzLgorCisJRnVuY3Rpb25hbCBkZWZhdWx0OiBlbmFibGVkIGlmIGFjY2VwdF9yYSBpcyBlbmFibGVkLgorCQkJICAgIGRpc2FibGVkIGlmIGFjY2VwdF9yYSBpcyBkaXNhYmxlZC4KKworZGFkX3RyYW5zbWl0cyAtIElOVEVHRVIKKwlUaGUgYW1vdW50IG9mIER1cGxpY2F0ZSBBZGRyZXNzIERldGVjdGlvbiBwcm9iZXMgdG8gc2VuZC4KKwlEZWZhdWx0OiAxCisJCitmb3J3YXJkaW5nIC0gQk9PTEVBTgorCUNvbmZpZ3VyZSBpbnRlcmZhY2Utc3BlY2lmaWMgSG9zdC9Sb3V0ZXIgYmVoYXZpb3VyLiAgCisKKwlOb3RlOiBJdCBpcyByZWNvbW1lbmRlZCB0byBoYXZlIHRoZSBzYW1lIHNldHRpbmcgb24gYWxsIAorCWludGVyZmFjZXM7IG1peGVkIHJvdXRlci9ob3N0IHNjZW5hcmlvcyBhcmUgcmF0aGVyIHVuY29tbW9uLgorCisJRkFMU0U6CisKKwlCeSBkZWZhdWx0LCBIb3N0IGJlaGF2aW91ciBpcyBhc3N1bWVkLiAgVGhpcyBtZWFuczoKKworCTEuIElzUm91dGVyIGZsYWcgaXMgbm90IHNldCBpbiBOZWlnaGJvdXIgQWR2ZXJ0aXNlbWVudHMuCisJMi4gUm91dGVyIFNvbGljaXRhdGlvbnMgYXJlIGJlaW5nIHNlbnQgd2hlbiBuZWNlc3NhcnkuCisJMy4gSWYgYWNjZXB0X3JhIGlzIFRSVUUgKGRlZmF1bHQpLCBhY2NlcHQgUm91dGVyIAorCSAgIEFkdmVydGlzZW1lbnRzIChhbmQgZG8gYXV0b2NvbmZpZ3VyYXRpb24pLgorCTQuIElmIGFjY2VwdF9yZWRpcmVjdHMgaXMgVFJVRSAoZGVmYXVsdCksIGFjY2VwdCBSZWRpcmVjdHMuCisKKwlUUlVFOgorCisJSWYgbG9jYWwgZm9yd2FyZGluZyBpcyBlbmFibGVkLCBSb3V0ZXIgYmVoYXZpb3VyIGlzIGFzc3VtZWQuIAorCVRoaXMgbWVhbnMgZXhhY3RseSB0aGUgcmV2ZXJzZSBmcm9tIHRoZSBhYm92ZToKKworCTEuIElzUm91dGVyIGZsYWcgaXMgc2V0IGluIE5laWdoYm91ciBBZHZlcnRpc2VtZW50cy4KKwkyLiBSb3V0ZXIgU29saWNpdGF0aW9ucyBhcmUgbm90IHNlbnQuCisJMy4gUm91dGVyIEFkdmVydGlzZW1lbnRzIGFyZSBpZ25vcmVkLgorCTQuIFJlZGlyZWN0cyBhcmUgaWdub3JlZC4KKworCURlZmF1bHQ6IEZBTFNFIGlmIGdsb2JhbCBmb3J3YXJkaW5nIGlzIGRpc2FibGVkIChkZWZhdWx0KSwKKwkJIG90aGVyd2lzZSBUUlVFLgorCitob3BfbGltaXQgLSBJTlRFR0VSCisJRGVmYXVsdCBIb3AgTGltaXQgdG8gc2V0LgorCURlZmF1bHQ6IDY0CisKK210dSAtIElOVEVHRVIKKwlEZWZhdWx0IE1heGltdW0gVHJhbnNmZXIgVW5pdAorCURlZmF1bHQ6IDEyODAgKElQdjYgcmVxdWlyZWQgbWluaW11bSkKKworcm91dGVyX3NvbGljaXRhdGlvbl9kZWxheSAtIElOVEVHRVIKKwlOdW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGFmdGVyIGludGVyZmFjZSBpcyBicm91Z2h0IHVwCisJYmVmb3JlIHNlbmRpbmcgUm91dGVyIFNvbGljaXRhdGlvbnMuCisJRGVmYXVsdDogMQorCityb3V0ZXJfc29saWNpdGF0aW9uX2ludGVydmFsIC0gSU5URUdFUgorCU51bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgYmV0d2VlbiBSb3V0ZXIgU29saWNpdGF0aW9ucy4KKwlEZWZhdWx0OiA0CisKK3JvdXRlcl9zb2xpY2l0YXRpb25zIC0gSU5URUdFUgorCU51bWJlciBvZiBSb3V0ZXIgU29saWNpdGF0aW9ucyB0byBzZW5kIHVudGlsIGFzc3VtaW5nIG5vIAorCXJvdXRlcnMgYXJlIHByZXNlbnQuCisJRGVmYXVsdDogMworCit1c2VfdGVtcGFkZHIgLSBJTlRFR0VSCisJUHJlZmVyZW5jZSBmb3IgUHJpdmFjeSBFeHRlbnNpb25zIChSRkMzMDQxKS4KKwkgIDw9IDAgOiBkaXNhYmxlIFByaXZhY3kgRXh0ZW5zaW9ucworCSAgPT0gMSA6IGVuYWJsZSBQcml2YWN5IEV4dGVuc2lvbnMsIGJ1dCBwcmVmZXIgcHVibGljCisJICAgICAgICAgYWRkcmVzc2VzIG92ZXIgdGVtcG9yYXJ5IGFkZHJlc3Nlcy4KKwkgID4gIDEgOiBlbmFibGUgUHJpdmFjeSBFeHRlbnNpb25zIGFuZCBwcmVmZXIgdGVtcG9yYXJ5CisJICAgICAgICAgYWRkcmVzc2VzIG92ZXIgcHVibGljIGFkZHJlc3Nlcy4KKwlEZWZhdWx0OiAgMCAoZm9yIG1vc3QgZGV2aWNlcykKKwkJIC0xIChmb3IgcG9pbnQtdG8tcG9pbnQgZGV2aWNlcyBhbmQgbG9vcGJhY2sgZGV2aWNlcykKKwordGVtcF92YWxpZF9sZnQgLSBJTlRFR0VSCisJdmFsaWQgbGlmZXRpbWUgKGluIHNlY29uZHMpIGZvciB0ZW1wb3JhcnkgYWRkcmVzc2VzLgorCURlZmF1bHQ6IDYwNDgwMCAoNyBkYXlzKQorCit0ZW1wX3ByZWZlcmVkX2xmdCAtIElOVEVHRVIKKwlQcmVmZXJyZWQgbGlmZXRpbWUgKGluIHNlY29uZHMpIGZvciB0ZW1wb3JhcnkgYWRkcmVzc2VzLgorCURlZmF1bHQ6IDg2NDAwICgxIGRheSkKKworbWF4X2Rlc3luY19mYWN0b3IgLSBJTlRFR0VSCisJTWF4aW11bSB2YWx1ZSBmb3IgREVTWU5DX0ZBQ1RPUiwgd2hpY2ggaXMgYSByYW5kb20gdmFsdWUKKwl0aGF0IGVuc3VyZXMgdGhhdCBjbGllbnRzIGRvbid0IHN5bmNocm9uaXplIHdpdGggZWFjaCAKKwlvdGhlciBhbmQgZ2VuZXJhdGUgbmV3IGFkZHJlc3NlcyBhdCBleGFjdGx5IHRoZSBzYW1lIHRpbWUuCisJdmFsdWUgaXMgaW4gc2Vjb25kcy4KKwlEZWZhdWx0OiA2MDAKKwkKK3JlZ2VuX21heF9yZXRyeSAtIElOVEVHRVIKKwlOdW1iZXIgb2YgYXR0ZW1wdHMgYmVmb3JlIGdpdmUgdXAgYXR0ZW1wdGluZyB0byBnZW5lcmF0ZQorCXZhbGlkIHRlbXBvcmFyeSBhZGRyZXNzZXMuCisJRGVmYXVsdDogNQorCittYXhfYWRkcmVzc2VzIC0gSU5URUdFUgorCU51bWJlciBvZiBtYXhpbXVtIGFkZHJlc3NlcyBwZXIgaW50ZXJmYWNlLiAgMCBkaXNhYmxlcyBsaW1pdGF0aW9uLgorCUl0IGlzIHJlY29tbWVuZGVkIG5vdCBzZXQgdG9vIGxhcmdlIHZhbHVlIChvciAwKSBiZWNhdXNlIGl0IHdvdWxkIAorCWJlIHRvbyBlYXN5IHdheSB0byBjcmFzaCBrZXJuZWwgdG8gYWxsb3cgdG8gY3JlYXRlIHRvbyBtdWNoIG9mIAorCWF1dG9jb25maWd1cmVkIGFkZHJlc3Nlcy4KKwlEZWZhdWx0OiAxNgorCitpY21wLyo6CityYXRlbGltaXQgLSBJTlRFR0VSCisJTGltaXQgdGhlIG1heGltYWwgcmF0ZXMgZm9yIHNlbmRpbmcgSUNNUHY2IHBhY2tldHMuCisJMCB0byBkaXNhYmxlIGFueSBsaW1pdGluZywgb3RoZXJ3aXNlIHRoZSBtYXhpbWFsIHJhdGUgaW4gamlmZmllcygxKQorCURlZmF1bHQ6IDEwMAorCisKK0lQdjYgVXBkYXRlIGJ5OgorUGVra2EgU2F2b2xhIDxwZWtrYXNAbmV0Y29yZS5maT4KK1lPU0hJRlVKSSBIaWRlYWtpIC8gVVNBR0kgUHJvamVjdCA8eW9zaGZ1amlAbGludXgtaXB2Ni5vcmc+CisKKworL3Byb2Mvc3lzL25ldC9icmlkZ2UvKiBWYXJpYWJsZXM6CisKK2JyaWRnZS1uZi1jYWxsLWFycHRhYmxlcyAtIEJPT0xFQU4KKwkxIDogcGFzcyBicmlkZ2VkIEFSUCB0cmFmZmljIHRvIGFycHRhYmxlcycgRk9SV0FSRCBjaGFpbi4KKwkwIDogZGlzYWJsZSB0aGlzLgorCURlZmF1bHQ6IDEKKworYnJpZGdlLW5mLWNhbGwtaXB0YWJsZXMgLSBCT09MRUFOCisJMSA6IHBhc3MgYnJpZGdlZCBJUHY0IHRyYWZmaWMgdG8gaXB0YWJsZXMnIGNoYWlucy4KKwkwIDogZGlzYWJsZSB0aGlzLgorCURlZmF1bHQ6IDEKKworYnJpZGdlLW5mLWNhbGwtaXA2dGFibGVzIC0gQk9PTEVBTgorCTEgOiBwYXNzIGJyaWRnZWQgSVB2NiB0cmFmZmljIHRvIGlwNnRhYmxlcycgY2hhaW5zLgorCTAgOiBkaXNhYmxlIHRoaXMuCisJRGVmYXVsdDogMQorCiticmlkZ2UtbmYtZmlsdGVyLXZsYW4tdGFnZ2VkIC0gQk9PTEVBTgorCTEgOiBwYXNzIGJyaWRnZWQgdmxhbi10YWdnZWQgQVJQL0lQIHRyYWZmaWMgdG8gYXJwdGFibGVzL2lwdGFibGVzLgorCTAgOiBkaXNhYmxlIHRoaXMuCisJRGVmYXVsdDogMQorCisKK1VORE9DVU1FTlRFRDoKKworZGV2X3dlaWdodCBGSVhNRQorZGlzY292ZXJ5X3Nsb3RzIEZJWE1FCitkaXNjb3ZlcnlfdGltZW91dCBGSVhNRQorZmFzdF9wb2xsX2luY3JlYXNlIEZJWE1FCitpcDZfcXVldWVfbWF4bGVuIEZJWE1FCitsYXBfa2VlcGFsaXZlX3RpbWUgRklYTUUKK2xvX2NvbmcgRklYTUUKK21heF9iYXVkX3JhdGUgRklYTUUKK21heF9kZ3JhbV9xbGVuIEZJWE1FCittYXhfbm9yZXBseV90aW1lIEZJWE1FCittYXhfdHhfZGF0YV9zaXplIEZJWE1FCittYXhfdHhfd2luZG93IEZJWE1FCittaW5fdHhfdHVybl90aW1lIEZJWE1FCittb2RfY29uZyBGSVhNRQorbm9fY29uZyBGSVhNRQorbm9fY29uZ190aHJlc2ggRklYTUUKK3Nsb3RfdGltZW91dCBGSVhNRQord2Fybl9ub3JlcGx5X3RpbWUgRklYTUUKKworJElkOiBpcC1zeXNjdGwudHh0LHYgMS4yMCAyMDAxLzEyLzEzIDA5OjAwOjE4IGRhdmVtIEV4cCAkCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXBfZHluYWRkci50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXBfZHluYWRkci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVmM2MxMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcF9keW5hZGRyLnR4dApAQCAtMCwwICsxLDI5IEBACitJUCBkeW5hbWljIGFkZHJlc3MgaGFjay1wb3J0IHYwLjAzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitUaGlzIHN0dWZmIGFsbG93cyBkaWFsZCBPTkVTSE9UIGNvbm5lY3Rpb25zIHRvIGdldCBlc3RhYmxpc2hlZCBieQorZHluYW1pY2FsbHkgY2hhbmdpbmcgcGFja2V0IHNvdXJjZSBhZGRyZXNzIChhbmQgc29ja2V0J3MgaWYgbG9jYWwgcHJvY3MpLgorSXQgaXMgaW1wbGVtZW50ZWQgZm9yIFRDUCBkaWFsZC1ib3ggY29ubmVjdGlvbnMoMSkgYW5kIElQX01BU1F1ZXJhZGluZygyKS4KKworSWYgZW5hYmxlZFsqXSBhbmQgZm9yd2FyZGluZyBpbnRlcmZhY2UgaGFzIGNoYW5nZWQ6CisgIDEpICBTb2NrZXQgKGFuZCBwYWNrZXQpIHNvdXJjZSBhZGRyZXNzIGlzIHJld3JpdHRlbiBPTiBSRVRSQU5TTUlTU0lPTlMKKyAgICAgIHdoaWxlIGluIFNZTl9TRU5UIHN0YXRlIChkaWFsZC1ib3ggcHJvY2Vzc2VzKS4KKyAgMikgIE91dC1ib3VuZGVkIE1BU1F1ZXJhZGVkIHNvdXJjZSBhZGRyZXNzIGNoYW5nZXMgT04gT1VUUFVUICh3aGVuCisgICAgICBpbnRlcm5hbCBob3N0IGRvZXMgcmV0cmFuc21pc3Npb24pIHVudGlsIGEgcGFja2V0IGZyb20gb3V0c2lkZSBpcworICAgICAgcmVjZWl2ZWQgYnkgdGhlIHR1bm5lbC4KKworVGhpcyBpcyBzcGVjaWFsbHkgaGVscGZ1bCBmb3IgYXV0byBkaWFsdXAgbGlua3MgKGRpYWxkKSwgd2hlcmUgdGhlCitgYGFjdHVhbCcnIG91dGdvaW5nIGFkZHJlc3MgaXMgdW5rbm93biBhdCB0aGUgbW9tZW50IHRoZSBsaW5rIGlzCitnb2luZyB1cC4gU28sIHRoZSAqc2FtZSogKGxvY2FsIEFORCBtYXNxdWVyYWRlZCkgY29ubmVjdGlvbnMgcmVxdWVzdHMgdGhhdAorYnJpbmcgdGhlIGxpbmsgdXAgd2lsbCBiZSBhYmxlIHRvIGdldCBlc3RhYmxpc2hlZC4KKworWypdIEF0IGJvb3QsIGJ5IGRlZmF1bHQgbm8gYWRkcmVzcyByZXdyaXRpbmcgaXMgYXR0ZW1wdGVkLiAKKyAgVG8gZW5hYmxlOgorICAgICAjIGVjaG8gMSA+IC9wcm9jL3N5cy9uZXQvaXB2NC9pcF9keW5hZGRyCisgIFRvIGVuYWJsZSB2ZXJib3NlIG1vZGU6CisgICAgICMgZWNobyAyID4gL3Byb2Mvc3lzL25ldC9pcHY0L2lwX2R5bmFkZHIKKyAgVG8gZGlzYWJsZSAoZGVmYXVsdCkKKyAgICAgIyBlY2hvIDAgPiAvcHJvYy9zeXMvbmV0L2lwdjQvaXBfZHluYWRkcgorCitFbmpveSEKKworLS0gSnVhbmpvICA8ampjaWFybGFAcmFpei51bmN1LmVkdS5hcj4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcGRkcC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXBkZHAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MWE1NTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXBkZHAudHh0CkBAIC0wLDAgKzEsNzggQEAKK1RleHQgZmlsZSBmb3IgaXBkZHAuYzoKKwlBcHBsZVRhbGstSVAgRGVjYXBzdWxhdGlvbiBhbmQgQXBwbGVUYWxrLUlQIEVuY2Fwc3VsYXRpb24KKworVGhpcyB0ZXh0IGZpbGUgaXMgd3JpdHRlbiBieSBKYXkgU2NodWxpc3QgPGpzY2hsc3RAc2FtYmEub3JnPgorCitJbnRyb2R1Y3Rpb24KKy0tLS0tLS0tLS0tLQorCitBcHBsZVRhbGstSVAgKElQRERQKSBpcyB0aGUgbWV0aG9kIGNvbXB1dGVycyBjb25uZWN0ZWQgdG8gQXBwbGVUYWxrCituZXR3b3JrcyBjYW4gdXNlIHRvIGNvbW11bmljYXRlIHZpYSBJUC4gQXBwbGVUYWxrLUlQIGlzIHNpbXBseSBJUCBkYXRhZ3JhbXMKK2luc2lkZSBBcHBsZVRhbGsgcGFja2V0cy4KKworVGhyb3VnaCB0aGlzIGRyaXZlciB5b3UgY2FuIGVpdGhlciBhbGxvdyB5b3VyIExpbnV4IGJveCB0byBjb21tdW5pY2F0ZQorSVAgb3ZlciBhbiBBcHBsZVRhbGsgbmV0d29yayBvciB5b3UgY2FuIHByb3ZpZGUgSVAgZ2F0ZXdheWluZyBmdW5jdGlvbnMKK2ZvciB5b3VyIEFwcGxlVGFsayB1c2Vycy4KKworWW91IGNhbiBjdXJyZW50bHkgZW5jYXBzdWxhdGUgb3IgZGVjYXBzdWxhdGUgQXBwbGVUYWxrLUlQIG9uIExvY2FsVGFsaywKK0V0aGVyVGFsayBhbmQgUFBQVGFsay4gVGhlIG9ubHkgbGltaXQgb24gdGhlIHByb3RvY29sIGlzIHRoYXQgb2Ygd2hhdAora2VybmVsIEFwcGxlVGFsayBsYXllciBhbmQgZHJpdmVycyBhcmUgYXZhaWxhYmxlLgorCitFYWNoIG1vZGUgcmVxdWlyZXMgaXRzIG93biB1c2VyIHNwYWNlIHNvZnR3YXJlLgorCitDb21waWxpbmcgQXBwbGVUYWxrLUlQIERlY2Fwc3VsYXRpb24vRW5jYXBzdWxhdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBcHBsZVRhbGstSVAgZGVjYXBzdWxhdGlvbiBuZWVkcyB0byBiZSBjb21waWxlZCBpbnRvIHlvdXIga2VybmVsLiBZb3UKK3dpbGwgbmVlZCB0byB0dXJuIG9uIEFwcGxlVGFsay1JUCBkcml2ZXIgc3VwcG9ydC4gVGhlbiB5b3Ugd2lsbCBuZWVkIHRvCitzZWxlY3QgT05FIG9mIHRoZSB0d28gb3B0aW9uczsgSVAgdG8gQXBwbGVUYWxrLUlQIGVuY2Fwc3VsYXRpb24gc3VwcG9ydCBvcgorQXBwbGVUYWxrLUlQIHRvIElQIGRlY2Fwc3VsYXRpb24gc3VwcG9ydC4gSWYgeW91IGNvbXBpbGUgdGhlIGRyaXZlcgorc3RhdGljYWxseSB5b3Ugd2lsbCBvbmx5IGJlIGFibGUgdG8gdXNlIHRoZSBkcml2ZXIgZm9yIHRoZSBmdW5jdGlvbiB5b3UgaGF2ZQorZW5hYmxlZCBpbiB0aGUga2VybmVsLiBJZiB5b3UgY29tcGlsZSB0aGUgZHJpdmVyIGFzIGEgbW9kdWxlIHlvdSBjYW4KK3NlbGVjdCB3aGF0IG1vZGUgeW91IHdhbnQgaXQgdG8gcnVuIGluIHZpYSBhIG1vZHVsZSBsb2FkaW5nIHBhcmFtLgoraXBkZHBfbW9kZT0xIGZvciBBcHBsZVRhbGstSVAgZW5jYXBzdWxhdGlvbiBhbmQgaXBkZHBfbW9kZT0yIGZvcgorQXBwbGVUYWxrLUlQIHRvIElQIGRlY2Fwc3VsYXRpb24uCisKK0Jhc2ljIGluc3RydWN0aW9ucyBmb3IgdXNlciBzcGFjZSB0b29scworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RvIGVuYWJsZSBBcHBsZVRhbGstSVAgZGVjYXBzdWxhdGlvbi9lbmNhcHN1bGF0aW9uIHlvdSB3aWxsIG5lZWQgdGhlIAorcHJvcGVyIHRvb2xzLiBZb3UgY2FuIGdldCB0aGUgdG9vbHMgZm9yIGRlY2Fwc3VsYXRpb24gZnJvbQoraHR0cDovL3NwYWNzMS5zcGFjcy5rMTIud2kudXMvfmpzY2hsc3QvaW5kZXguaHRtbCBhbmQgZm9yIGVuY2Fwc3VsYXRpb24KK2Zyb20gaHR0cDovL3d3dy5tYXRocy51bm0uZWR1L35icmFkZm9yZC9sdHBjLmh0bWwKKworSSB3aWxsIGJyaWVmbHkgZGVzY3JpYmUgdGhlIG9wZXJhdGlvbiBvZiB0aGUgdG9vbHMsIGJ1dCB5b3Ugd2lsbAorbmVlZCB0byBjb25zdWx0IHRoZSBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24gZm9yIGVhY2ggc2V0IG9mIHRvb2xzLgorCitEZWNhcHN1bGF0aW9uIC0gWW91IHdpbGwgbmVlZCB0byBkb3dubG9hZCBhIHNvZnR3YXJlIHBhY2thZ2UgY2FsbGVkCitNYWNHYXRlLiBJbiB0aGlzIGRpc3RyaWJ1dGlvbiB0aGVyZSB3aWxsIGJlIGEgdG9vbCBjYWxsZWQgTWFjUm91dGUKK3doaWNoIGVuYWJsZXMgeW91IHRvIGFkZCByb3V0ZXMgdG8gdGhlIGtlcm5lbCBmb3IgeW91ciBNYWNzIGJ5IGhhbmQuCitBbHNvIHRoZSB0b29sIE1hY1JlZ0dhdGVXYXkgaXMgaW5jbHVkZWQgdG8gcmVnaXN0ZXIgdGhlCitwcm9wZXIgSVAgR2F0ZXdheSBhbmQgSVAgYWRkcmVzc2VzIGZvciB5b3VyIG1hY2hpbmUuIEluY2x1ZGVkIGluIHRoaXMKK2Rpc3RyaWJ1dGlvbiBpcyBhIHBhdGNoIHRvIG5ldGF0YWxrLTEuNGIyK2FzdW4yLjBhMTcuMiAoYXZhaWxhYmxlIGZyb20KK2Z0cC51Lndhc2hpbmd0b24uZWR1L3B1Yi91c2VyLXN1cHBvcnRlZC9hc3VuLykgdGhpcyBwYXRjaCBpcyBvcHRpb25hbAorYnV0IGl0IGFsbG93cyBhdXRvbWF0aWMgYWRkaW5nIGFuZCBkZWxldGluZyBvZiByb3V0ZXMgZm9yIE1hY3MuIChIYW5keQorZm9yIGxvY2F0aW9ucyB3aXRoIGxhcmdlIE1hYyBpbnN0YWxsYXRpb25zKQorCitFbmNhcHN1bGF0aW9uIC0gWW91IHdpbGwgbmVlZCB0byBkb3dubG9hZCBhIHNvZnR3YXJlIGRhZW1vbiBjYWxsZWQgaXBkZHBkLgorVGhpcyBzb2Z0d2FyZSBleHBlY3RzIHRoZXJlIHRvIGJlIGFuIEFwcGxlVGFsay1JUCBnYXRld2F5IG9uIHRoZSBuZXR3b3JrLgorWW91IHdpbGwgYWxzbyBuZWVkIHRvIGFkZCB0aGUgcHJvcGVyIHJvdXRlcyB0byByb3V0ZSB5b3VyIExpbnV4IGJveCdzIElQCit0cmFmZmljIG91dCB0aGUgaXBkZHAgaW50ZXJmYWNlLgorCitDb21tb24gVXNlcyBvZiBpcGRkcC5jCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitPZiBjb3Vyc2UgQXBwbGVUYWxrLUlQIGRlY2Fwc3VsYXRpb24gYW5kIGVuY2Fwc3VsYXRpb24sIGJ1dCBzcGVjaWZpY2FsbHkKK2RlY2Fwc3VsYXRpb24gaXMgYmVpbmcgdXNlZCBtb3N0IGZvciBjb25uZWN0aW5nIExvY2FsVGFsayBuZXR3b3JrcyB0bworSVAgbmV0d29ya3MuIEFsdGhvdWdoIGl0IGhhcyBiZWVuIHVzZWQgb24gRXRoZXJUYWxrIG5ldHdvcmtzIHRvIGFsbG93CitNYWNzIHRoYXQgYXJlIG9ubHkgYWJsZSB0byB0dW5uZWwgSVAgb3ZlciBFdGhlclRhbGsuCisKK0VuY2Fwc3VsYXRpb24gaGFzIGJlZW4gdXNlZCB0byBhbGxvdyBhIExpbnV4IGJveCBzdHVjayBvbiBhIExvY2FsVGFsaworbmV0d29yayB0byB1c2UgSVAuIEl0IHNob3VsZCB3b3JrIGVxdWFsbHkgd2VsbCBpZiB5b3UgYXJlIHN0dWNrIG9uIGFuCitFdGhlclRhbGsgb25seSBuZXR3b3JrLgorCitGdXJ0aGVyIEFzc2lzdGFuY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0KK1lvdSBjYW4gY29udGFjdCBtZSAoSmF5IFNjaHVsaXN0IDxqc2NobHN0QHNhbWJhLm9yZz4pIHdpdGggYW55CitxdWVzdGlvbnMgcmVnYXJkaW5nIGRlY2Fwc3VsYXRpb24gb3IgZW5jYXBzdWxhdGlvbi4gQnJhZGZvcmQgVy4gSm9obnNvbgorPGpvaG5zMzkzQG1hcm9vbi50Yy51bW4uZWR1PiBvcmlnaW5hbGx5IHdyb3RlIHRoZSBpcGRkcC5jIGRyaXZlciBmb3IgSVAKK2VuY2Fwc3VsYXRpb24gaW4gQXBwbGVUYWxrLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwaGFzZS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXBoYXNlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWNjYjg1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwaGFzZS50eHQKQEAgLTAsMCArMSwxNTggQEAKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVBRCBNRSBGSVNSVAorCQkgIEFUTSAoaSlDaGlwIElBIExpbnV4IERyaXZlciBTb3VyY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICBSZWFkIFRoaXMgQmVmb3JlIFlvdSBCZWdpbiEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitUaGlzIGlzIHRoZSBSRUFETUUgZmlsZSBmb3IgdGhlIEludGVycGhhc2UgUENJIEFUTSAoaSlDaGlwIElBIExpbnV4IGRyaXZlciAKK3NvdXJjZSByZWxlYXNlLgorCitUaGUgZmVhdHVyZXMgYW5kIGxpbWl0YXRpb25zIG9mIHRoaXMgZHJpdmVyIGFyZSBhcyBmb2xsb3dzOgorICAgIC0gQSBzaW5nbGUgVlBJIChWUEkgdmFsdWUgb2YgMCkgaXMgc3VwcG9ydGVkLgorICAgIC0gU3VwcG9ydHMgNEsgVkNzIGZvciB0aGUgc2VydmVyIGJvYXJkICh3aXRoIDUxMksgY29udHJvbCBtZW1vcnkpIGFuZCAxSyAKKyAgICAgIFZDcyBmb3IgdGhlIGNsaWVudCBib2FyZCAod2l0aCAxMjhLIGNvbnRyb2wgbWVtb3J5KS4KKyAgICAtIFVCUiwgQUJSIGFuZCBDQlIgc2VydmljZSBjYXRlZ29yaWVzIGFyZSBzdXBwb3J0ZWQuCisgICAgLSBPbmx5IEFBTDUgaXMgc3VwcG9ydGVkLiAKKyAgICAtIFN1cHBvcnRzIHNldHRpbmcgb2YgUENSIG9uIHRoZSBWQ3MuIAorICAgIC0gTXVsdGlwbGUgYWRhcHRlcnMgaW4gYSBzeXN0ZW0gYXJlIHN1cHBvcnRlZC4KKyAgICAtIEFsbCB2YXJpYW50cyBvZiBJbnRlcnBoYXNlIEFUTSBQQ0kgKGkpQ2hpcCBhZGFwdGVyIGNhcmRzIGFyZSBzdXBwb3J0ZWQsIAorICAgICAgaW5jbHVkaW5nIHg1NzUgKE9DMywgY29udHJvbCBtZW1vcnkgMTI4SyAsIDUxMksgYW5kIHBhY2tldCBtZW1vcnkgMTI4SywgCisgICAgICA1MTJLIGFuZCAxTSksIHg1MjUgKFVUUDI1KSBhbmQgeDUzMSAoRFMzIGFuZCBFMykuIFNlZSAKKyAgICAgICAgICAgaHR0cDovL3d3dy5pcGhhc2UuY29tL3Byb2R1Y3RzL0NsYXNzU2hlZXQuY2ZtP0NsYXNzSUQ9QVRNIAorICAgICAgZm9yIGRldGFpbHMuCisgICAgLSBPbmx5IHg4NiBwbGF0Zm9ybXMgYXJlIHN1cHBvcnRlZC4KKyAgICAtIFNNUCBpcyBzdXBwb3J0ZWQuCisKKworQmVmb3JlIFlvdSBTdGFydAorLS0tLS0tLS0tLS0tLS0tLSAKKworCitJbnN0YWxsYXRpb24KKy0tLS0tLS0tLS0tLQorCisxLiBJbnN0YWxsaW5nIHRoZSBhZGFwdGVycyBpbiB0aGUgc3lzdGVtCisgICBUbyBpbnN0YWxsIHRoZSBBVE0gYWRhcHRlcnMgaW4gdGhlIHN5c3RlbSwgZm9sbG93IHRoZSBzdGVwcyBiZWxvdy4KKyAgICAgICBhLiBMb2dpbiBhcyByb290LgorICAgICAgIGIuIFNodXQgZG93biB0aGUgc3lzdGVtIGFuZCBwb3dlciBvZmYgdGhlIHN5c3RlbS4KKyAgICAgICBjLiBJbnN0YWxsIG9uZSBvciBtb3JlIEFUTSBhZGFwdGVycyBpbiB0aGUgc3lzdGVtLgorICAgICAgIGQuIENvbm5lY3QgZWFjaCBhZGFwdGVyIHRvIGEgcG9ydCBvbiBhbiBBVE0gc3dpdGNoLiBUaGUgZ3JlZW4gJ0xpbmsnIAorICAgICAgICAgIExFRCBvbiB0aGUgZnJvbnQgcGFuZWwgb2YgdGhlIGFkYXB0ZXIgd2lsbCBiZSBvbiBpZiB0aGUgYWRhcHRlciBpcyAKKyAgICAgICAgICBjb25uZWN0ZWQgdG8gdGhlIHN3aXRjaCBwcm9wZXJseSB3aGVuIHRoZSBzeXN0ZW0gaXMgcG93ZXJlZCB1cC4KKyAgICAgICBlLiBQb3dlciBvbiBhbmQgYm9vdCB0aGUgc3lzdGVtLgorCisyLiBbIFJlbW92ZWQgXQorCiszLiBSZWJ1aWxkIGtlcm5lbCB3aXRoIEFCUiBzdXBwb3J0CisgICBbIGEuIGFuZCBiLiByZW1vdmVkIF0KKyAgICBjLiBSZWNvbmZpZ3VyZSB0aGUga2VybmVsLCBjaG9vc2UgdGhlIEludGVycGhhc2UgaWEgZHJpdmVyIHRocm91Z2ggIm1ha2UgCisgICAgICAgbWVudWNvbmZpZyIgb3IgIm1ha2UgeGNvbmZpZyIuCisgICAgZC4gUmVidWlsZCB0aGUga2VybmVsLCBsb2FkYWJsZSBtb2R1bGVzIGFuZCB0aGUgYXRtIHRvb2xzLiAKKyAgICBlLiBJbnN0YWxsIHRoZSBuZXcgYnVpbHQga2VybmVsIGFuZCBtb2R1bGVzIGFuZCByZWJvb3QuCisKKzQuIExvYWQgdGhlIGFkYXB0ZXIgaGFyZHdhcmUgZHJpdmVyIChpYSBkcml2ZXIpIGlmIGl0IGlzIGJ1aWx0IGFzIGEgbW9kdWxlCisgICAgICAgYS4gTG9naW4gYXMgcm9vdC4KKyAgICAgICBiLiBDaGFuZ2UgZGlyZWN0b3J5IHRvIC9saWIvbW9kdWxlcy88a2VybmVsLXZlcnNpb24+L2F0bS4KKyAgICAgICBjLiBSdW4gImluc21vZCBzdW5pLm87aW5zbW9kIGlwaGFzZS5vIgorCSAgVGhlIHllbGxvdyAnc3RhdHVzJyBMRUQgb24gdGhlIGZyb250IHBhbmVsIG9mIHRoZSBhZGFwdGVyIHdpbGwgYmxpbmsgCisgICAgICAgICAgd2hpbGUgdGhlIGRyaXZlciBpcyBsb2FkZWQgaW4gdGhlIHN5c3RlbS4KKyAgICAgICBkLiBUbyB2ZXJpZnkgdGhhdCB0aGUgJ2lhJyBkcml2ZXIgaXMgbG9hZGVkIHN1Y2Nlc3NmdWxseSwgcnVuIHRoZSAKKyAgICAgICAgICBmb2xsb3dpbmcgY29tbWFuZDoKKworICAgICAgICAgICAgICBjYXQgL3Byb2MvYXRtL2RldmljZXMKKworICAgICAgICAgIElmIHRoZSBkcml2ZXIgaXMgbG9hZGVkIHN1Y2Nlc3NmdWxseSwgdGhlIG91dHB1dCBvZiB0aGUgY29tbWFuZCB3aWxsIAorICAgICAgICAgIGJlIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZyBsaW5lczoKKworICAgICAgICAgICAgICBJdGYgVHlwZSAgICBFU0kvIk1BQyJhZGRyIEFBTChUWCxlcnIsUlgsZXJyLGRyb3ApIC4uLgorICAgICAgICAgICAgICAwICAgaWEgICAgICB4eHh4eHh4eHggIDAgKCAwIDAgMCAwIDAgKSAgNSAoIDAgMCAwIDAgMCApCisKKyAgICAgICAgICBZb3UgY2FuIGFsc28gY2hlY2sgdGhlIHN5c3RlbSBsb2cgZmlsZSAvdmFyL2xvZy9tZXNzYWdlcyBmb3IgbWVzc2FnZXMKKyAgICAgICAgICByZWxhdGVkIHRvIHRoZSBBVE0gZHJpdmVyLgorCis1LiBJYSBEcml2ZXIgQ29uZmlndXJhdGlvbiAKKworNS4xIENvbmZpZ3VyYXRpb24gb2YgYWRhcHRlciBidWZmZXJzCisgICAgVGhlIChpKUNoaXAgYm9hcmRzIGhhdmUgMyBkaWZmZXJlbnQgcGFja2V0IFJBTSBzaXplIHZhcmlhbnRzOiAxMjhLLCA1MTJLIGFuZAorICAgIDFNLiBUaGUgUkFNIHNpemUgZGVjaWRlcyB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgYW5kIGJ1ZmZlciBzaXplLiBUaGUgZGVmYXVsdCAKKyAgICBzaXplIGFuZCBudW1iZXIgb2YgYnVmZmVycyBhcmUgc2V0IGFzIGZvbGxvd2luZzogCisKKyAgICAgICAgICBUb3RvbCAgICBSeCBSQU0gICBUeCBSQU0gICBSeCBCdWYgICBUeCBCdWYgICBSeCBidWYgICBUeCBidWYKKyAgICAgICAgIFJBTSBzaXplICAgc2l6ZSAgICAgc2l6ZSAgICAgc2l6ZSAgICAgc2l6ZSAgICAgIGNudCAgICAgIGNudAorICAgICAgICAgLS0tLS0tLS0gIC0tLS0tLSAgIC0tLS0tLSAgIC0tLS0tLSAgIC0tLS0tLSAgIC0tLS0tLSAgIC0tLS0tLQorICAgICAgICAgICAxMjhLICAgICAgNjRLICAgICAgNjRLICAgICAgMTBLICAgICAgMTBLICAgICAgIDYgICAgICAgIDYKKyAgICAgICAgICAgNTEySyAgICAgMjU2SyAgICAgMjU2SyAgICAgIDEwSyAgICAgIDEwSyAgICAgIDI1ICAgICAgIDI1CisgICAgICAgICAgICAgMU0gICAgIDUxMksgICAgIDUxMksgICAgICAxMEsgICAgICAxMEsgICAgICA1MSAgICAgICA1MQorCisgICAgICAgVGhlc2Ugc2V0dGluZyBzaG91bGQgd29yayB3ZWxsIGluIG1vc3QgZW52aXJvbm1lbnRzLCBidXQgY2FuIGJlCisgICAgICAgY2hhbmdlZCBieSB0eXBpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kOiAKKyAKKyAgICAgICAgICAgaW5zbW9kIDxJQV9ESVI+L2lhLm8gSUFfUlhfQlVGPTxSWF9DTlQ+IElBX1JYX0JVRl9TWj08UlhfU0laRT4gXAorICAgICAgICAgICAgICAgICAgIElBX1RYX0JVRj08VFhfQ05UPiBJQV9UWF9CVUZfU1o9PFRYX1NJWkU+IAorICAgICAgIFdoZXJlOgorICAgICAgICAgICAgUlhfQ05UID0gbnVtYmVyIG9mIHJlY2VpdmUgYnVmZmVycyBpbiB0aGUgcmFuZ2UgKDEtMTI4KQorICAgICAgICAgICAgUlhfU0laRSA9IHNpemUgb2YgcmVjZWl2ZSBidWZmZXJzIGluIHRoZSByYW5nZSAoNDgtNjRLKQorICAgICAgICAgICAgVFhfQ05UID0gbnVtYmVyIG9mIHRyYW5zbWl0IGJ1ZmZlcnMgaW4gdGhlIHJhbmdlICgxLTEyOCkKKyAgICAgICAgICAgIFRYX1NJWkUgPSBzaXplIG9mIHRyYW5zbWl0IGJ1ZmZlcnMgaW4gdGhlIHJhbmdlICg0OC02NEspCisKKyAgICAgICAgICAgIDEuIFRyYW5zbWl0IGFuZCByZWNlaXZlIGJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0LgorICAgICAgICAgICAgMi4gQ2FyZSBzaG91bGQgYmUgdGFrZW4gc28gdGhhdCB0aGUgbWVtb3J5IHJlcXVpcmVkIGZvciB0aGUKKyAgICAgICAgICAgICAgIHRyYW5zbWl0IGFuZCByZWNlaXZlIGJ1ZmZlcnMgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZQorICAgICAgICAgICAgICAgdG90YWwgYWRhcHRlciBwYWNrZXQgbWVtb3J5LiAgIAorCis1LjIgVHVybiBvbiBpYSBkZWJ1ZyB0cmFjZQorCisgICAgV2hlbiB0aGUgaWEgZHJpdmVyIGlzIGJ1aWx0IHdpdGggdGhlIENPTkZJR19BVE1fSUFfREVCVUcgZmxhZywgdGhlIGRyaXZlciAKKyAgICBjYW4gcHJvdmlkZSBtb3JlIGRlYnVnIHRyYWNlIGlmIG5lZWRlZC4gVGhlcmUgaXMgYSBiaXQgbWFzayB2YXJpYWJsZSwgCisgICAgSUFEZWJ1Z0ZsYWcsIHdoaWNoIGNvbnRyb2xzIHRoZSBvdXRwdXQgb2YgdGhlIHRyYWNlcy4gWW91IGNhbiBmaW5kIHRoZSBiaXQgCisgICAgbWFwIG9mIHRoZSBJQURlYnVnRmxhZyBpbiBpcGhhc2UuaC4gCisgICAgVGhlIGRlYnVnIHRyYWNlIGNhbiBiZSB0dXJuIG9uIHRocm91Z2ggdGhlIGluc21vZCBjb21tYW5kIGxpbmUgb3B0aW9uLCBmb3IgCisgICAgZXhhbXBsZSwgImluc21vZCBpcGhhc2UubyBJQURlYnVnRmxhZz0weGZmZmZmZmZmIiBjYW4gdHVybiBvbiBhbGwgdGhlIGRlYnVnIAorICAgIHRyYWNlcyB0b2dldGhlciB3aXRoIGxvYWRpbmcgdGhlIGRyaXZlci4KKworNi4gSWEgRHJpdmVyIFRlc3QgVXNpbmcgdHRjcF9hdG0gYW5kIFBWQworCisgICBGb3IgdGhlIFBWQyBzZXR1cCwgdGhlIHRlc3QgbWFjaGluZXMgY2FuIGVpdGhlciBiZSBjb25uZWN0ZWQgYmFjay10by1iYWNrIG9yIAorICAgdGhyb3VnaCBhIHN3aXRjaC4gSWYgY29ubmVjdGVkIHRocm91Z2ggdGhlIHN3aXRjaCwgdGhlIHN3aXRjaCBtdXN0IGJlIAorICAgY29uZmlndXJlZCBmb3IgdGhlIFBWQyhzKS4KKworICAgYS4gRm9yIFVCUiB0ZXN0OgorICAgICAgQXQgdGhlIHRlc3QgbWFjaGluZSBpbnRlbmRlZCB0byByZWNlaXZlIGRhdGEsIHR5cGU6CisgICAgICAgICB0dGNwX2F0bSAtciAtYSAtcyAwLjEwMCAKKyAgICAgIEF0IHRoZSBvdGhlciB0ZXN0IG1hY2hpbmUsIHR5cGU6CisgICAgICAgICB0dGNwX2F0bSAtdCAtYSAtcyAwLjEwMCAtbiAxMDAwMAorICAgICAgUnVuICJ0dGNwX2F0bSAtaCIgdG8gZGlzcGxheSBtb3JlIG9wdGlvbnMgb2YgdGhlIHR0Y3BfYXRtIHRvb2wuCisgICBiLiBGb3IgQUJSIHRlc3Q6CisgICAgICBJdCBpcyB0aGUgc2FtZSBhcyB0aGUgVUJSIHRlc3RpbmcsIGJ1dCB3aXRoIGFuIGV4dHJhIGNvbW1hbmQgb3B0aW9uOgorICAgICAgICAgLVBhYnI6bWF4X3Bjcj08eHh4PgorICAgICAgICAgd2hlcmU6CisgICAgICAgICAgICAgeHh4ID0gdGhlIG1heGltdW0gcGVhayBjZWxsIHJhdGUsIGZyb20gMTcwIC0gMzUzMjA3LgorICAgICAgICAgVGhpcyBvcHRpb24gbXVzdCBiZSBzZXQgb24gYm90aCB0aGUgbWFjaGluZXMuCisgICBjLiBGb3IgQ0JSIHRlc3Q6CisgICAgICBJdCBpcyB0aGUgc2FtZSBhcyB0aGUgVUJSIHRlc3RpbmcsIGJ1dCB3aXRoIGFuIGV4dHJhIGNvbW1hbmQgb3B0aW9uOgorICAgICAgICAgLVBjYnI6bWF4X3Bjcj08eHh4PgorICAgICAgICAgd2hlcmU6CisgICAgICAgICAgICAgeHh4ID0gdGhlIG1heGltdW0gcGVhayBjZWxsIHJhdGUsIGZyb20gMTcwIC0gMzUzMjA3LgorICAgICAgICAgVGhpcyBvcHRpb24gbWF5IG9ubHkgYmUgc2V0IG9uIHRoZSB0cmFuc21pdCBtYWNoaW5lLgorCisKK09VVFNUQU5ESU5HIElTU1VFUworLS0tLS0tLS0tLS0tLS0tLS0tCisKKworCitDb250YWN0IEluZm9ybWF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgQ3VzdG9tZXIgU3VwcG9ydDoKKyAgICAgICAgIFVuaXRlZCBTdGF0ZXM6CVRlbGVwaG9uZToJKDIxNCkgNjU0LTU1NTUKKyAgICAgCQkJRmF4OgkJKDIxNCkgNjU0LTU1MDAKKwkJCUUtTWFpbDoJCWludG91Y2hAaXBoYXNlLmNvbQorCSBFdXJvcGU6CVRlbGVwaG9uZToJMzMgKDApMSA0MSAxNSA0NCAwMAorCQkJRmF4OgkJMzMgKDApMSA0MSAxNSAxMiAxMworICAgICBXb3JsZCBXaWRlIFdlYjoJaHR0cDovL3d3dy5pcGhhc2UuY29tCisgICAgIEFub255bW91cyBGVFA6CWZ0cC5pcGhhc2UuY29tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXJkYS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXJkYS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU1YjhlNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcmRhLnR4dApAQCAtMCwwICsxLDE0IEBACitUbyB1c2UgdGhlIElyREEgcHJvdG9jb2xzIHdpdGhpbiBMaW51eCB5b3Ugd2lsbCBuZWVkIHRvIGdldCBhIHN1aXRhYmxlIGNvcHkKK29mIHRoZSBJckRBIFV0aWxpdGllcy4gTW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBhbmQgYXNzb2NpYXRlZAorcHJvZ3JhbXMgY2FuIGJlIGZvdW5kIG9uIGh0dHA6Ly9pcmRhLnNvdXJjZWZvcmdlLm5ldC8KKworRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIHVzZSB0aGUgSXJEQSBwcm90b2NvbCBzdGFjaywgc2VlIHRoZQorTGludXggSW5mYXJlZCBIT1dUTyAoaHR0cDovL3d3dy50dXhtb2JpbC5vcmcvSW5mcmFyZWQtSE9XVE8vSW5mcmFyZWQtSE9XVE8uaHRtbCkKK2J5IFdlcm5lciBIZXVzZXIgPHdlaGVAdHV4bW9iaWwub3JnPgorCitUaGVyZSBpcyBhbiBhY3RpdmUgbWFpbGluZyBsaXN0IGZvciBkaXNjdXNzaW5nIExpbnV4LUlyREEgbWF0dGVycyBjYWxsZWQKKyAgICBpcmRhLXVzZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorCisKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXhnYi50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXhnYi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M5ODI3NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9peGdiLnR4dApAQCAtMCwwICsxLDIxMiBAQAorTGludXgqIEJhc2UgRHJpdmVyIGZvciB0aGUgSW50ZWwoUikgUFJPLzEwR2JFIEZhbWlseSBvZiBBZGFwdGVycworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOb3ZlbWJlciAxNywgMjAwNAorCisKK0NvbnRlbnRzCis9PT09PT09PQorCistIEluIFRoaXMgUmVsZWFzZQorLSBJZGVudGlmeWluZyBZb3VyIEFkYXB0ZXIKKy0gQ29tbWFuZCBMaW5lIFBhcmFtZXRlcnMKKy0gSW1wcm92aW5nIFBlcmZvcm1hbmNlCistIFN1cHBvcnQKKworCitJbiBUaGlzIFJlbGVhc2UKKz09PT09PT09PT09PT09PQorCitUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBMaW51eCogQmFzZSBEcml2ZXIgZm9yIHRoZSBJbnRlbChSKSBQUk8vMTBHYkUgRmFtaWx5IAorb2YgQWRhcHRlcnMsIHZlcnNpb24gMS4wLnguICAKKworRm9yIHF1ZXN0aW9ucyByZWxhdGVkIHRvIGhhcmR3YXJlIHJlcXVpcmVtZW50cywgcmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gCitzdXBwbGllZCB3aXRoIHlvdXIgSW50ZWwgUFJPLzEwR2JFIGFkYXB0ZXIuIEFsbCBoYXJkd2FyZSByZXF1aXJlbWVudHMgbGlzdGVkIAorYXBwbHkgdG8gdXNlIHdpdGggTGludXguCisKK0lkZW50aWZ5aW5nIFlvdXIgQWRhcHRlcgorPT09PT09PT09PT09PT09PT09PT09PT09CisKK1RvIHZlcmlmeSB5b3VyIEludGVsIGFkYXB0ZXIgaXMgc3VwcG9ydGVkLCBmaW5kIHRoZSBib2FyZCBJRCBudW1iZXIgb24gdGhlIAorYWRhcHRlci4gTG9vayBmb3IgYSBsYWJlbCB0aGF0IGhhcyBhIGJhcmNvZGUgYW5kIGEgbnVtYmVyIGluIHRoZSBmb3JtYXQgIAorQTEyMzQ1LTAwMS4gCisKK1VzZSB0aGUgYWJvdmUgaW5mb3JtYXRpb24gYW5kIHRoZSBBZGFwdGVyICYgRHJpdmVyIElEIEd1aWRlIGF0OgorCisgIGh0dHA6Ly9zdXBwb3J0LmludGVsLmNvbS9zdXBwb3J0L25ldHdvcmsvYWRhcHRlci9wcm8xMDAvMjEzOTcuaHRtCisKK0ZvciB0aGUgbGF0ZXN0IEludGVsIG5ldHdvcmsgZHJpdmVycyBmb3IgTGludXgsIGdvIHRvOgorCisgICAgaHR0cDovL2Rvd25sb2FkZmluZGVyLmludGVsLmNvbS9zY3JpcHRzLWRmL3N1cHBvcnRfaW50ZWwuYXNwCisKK0NvbW1hbmQgTGluZSBQYXJhbWV0ZXJzCis9PT09PT09PT09PT09PT09PT09PT09PQorCitJZiB0aGUgZHJpdmVyIGlzIGJ1aWx0IGFzIGEgbW9kdWxlLCB0aGUgIGZvbGxvd2luZyBvcHRpb25hbCBwYXJhbWV0ZXJzIGFyZSAKK3VzZWQgYnkgZW50ZXJpbmcgdGhlbSBvbiB0aGUgY29tbWFuZCBsaW5lIHdpdGggdGhlIG1vZHByb2JlIG9yIGluc21vZCBjb21tYW5kCit1c2luZyB0aGlzIHN5bnRheDoKKworICAgICBtb2Rwcm9iZSBpeGdiIFs8b3B0aW9uPj08VkFMMT4sPFZBTDI+LC4uLl0KKworICAgICBpbnNtb2QgaXhnYiBbPG9wdGlvbj49PFZBTDE+LDxWQUwyPiwuLi5dCisKK0ZvciBleGFtcGxlLCB3aXRoIHR3byBQUk8vMTBHYkUgUENJIGFkYXB0ZXJzLCBlbnRlcmluZzoKKworICAgIGluc21vZCBpeGdiIFR4RGVzY3JpcHRvcnM9ODAsMTI4CisKK2xvYWRzIHRoZSBpeGdiIGRyaXZlciB3aXRoIDgwIFRYIHJlc291cmNlcyBmb3IgdGhlIGZpcnN0IGFkYXB0ZXIgYW5kIDEyOCBUWCAKK3Jlc291cmNlcyBmb3IgdGhlIHNlY29uZCBhZGFwdGVyLgorCitUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgZWFjaCBwYXJhbWV0ZXIgaXMgZ2VuZXJhbGx5IHRoZSByZWNvbW1lbmRlZCBzZXR0aW5nLAordW5sZXNzIG90aGVyd2lzZSBub3RlZC4gQWxzbywgaWYgdGhlIGRyaXZlciBpcyBzdGF0aWNhbGx5IGJ1aWx0IGludG8gdGhlCitrZXJuZWwsIHRoZSBkcml2ZXIgaXMgbG9hZGVkIHdpdGggdGhlIGRlZmF1bHQgdmFsdWVzIGZvciBhbGwgdGhlIHBhcmFtZXRlcnMuCitFdGh0b29sIGNhbiBiZSB1c2VkIHRvIGNoYW5nZSBzb21lIG9mIHRoZSBwYXJhbWV0ZXJzIGF0IHJ1bnRpbWUuCisKK0Zsb3dDb250cm9sCitWYWxpZCBSYW5nZTogMC0zICgwPW5vbmUsIDE9Unggb25seSwgMj1UeCBvbmx5LCAzPVJ4JlR4KQorRGVmYXVsdDogUmVhZCBmcm9tIHRoZSBFRVBST00KKyAgICAgICAgIElmIEVFUFJPTSBpcyBub3QgZGV0ZWN0ZWQsIGRlZmF1bHQgaXMgMworICAgIFRoaXMgcGFyYW1ldGVyIGNvbnRyb2xzIHRoZSBhdXRvbWF0aWMgZ2VuZXJhdGlvbihUeCkgYW5kIHJlc3BvbnNlKFJ4KSB0byAKKyAgICBFdGhlcm5ldCBQQVVTRSBmcmFtZXMuCisKK1J4RGVzY3JpcHRvcnMKK1ZhbGlkIFJhbmdlOiA2NC01MTIKK0RlZmF1bHQgVmFsdWU6IDUxMgorICAgIFRoaXMgdmFsdWUgaXMgdGhlIG51bWJlciBvZiByZWNlaXZlIGRlc2NyaXB0b3JzIGFsbG9jYXRlZCBieSB0aGUgZHJpdmVyLiAKKyAgICBJbmNyZWFzaW5nIHRoaXMgdmFsdWUgYWxsb3dzIHRoZSBkcml2ZXIgdG8gYnVmZmVyIG1vcmUgaW5jb21pbmcgcGFja2V0cy4gCisgICAgRWFjaCBkZXNjcmlwdG9yIGlzIDE2IGJ5dGVzLiAgQSByZWNlaXZlIGJ1ZmZlciBpcyBhbHNvIGFsbG9jYXRlZCBmb3IgCisgICAgZWFjaCBkZXNjcmlwdG9yIGFuZCBjYW4gYmUgZWl0aGVyIDIwNDgsIDQwNTYsIDgxOTIsIG9yIDE2Mzg0IGJ5dGVzLCAKKyAgICBkZXBlbmRpbmcgb24gdGhlIE1UVSBzZXR0aW5nLiBXaGVuIHRoZSBNVFUgc2l6ZSBpcyAxNTAwIG9yIGxlc3MsIHRoZSAKKyAgICByZWNlaXZlIGJ1ZmZlciBzaXplIGlzIDIwNDggYnl0ZXMuIFdoZW4gdGhlIE1UVSBpcyBncmVhdGVyIHRoYW4gMTUwMCB0aGUKKyAgICByZWNlaXZlIGJ1ZmZlciBzaXplIHdpbGwgYmUgZWl0aGVyIDQwNTYsIDgxOTIsIG9yIDE2Mzg0IGJ5dGVzLiBUaGUgCisgICAgbWF4aW11bSBNVFUgc2l6ZSBpcyAxNjExNC4KKworUnhJbnREZWxheQorVmFsaWQgUmFuZ2U6IDAtNjU1MzUgKDA9b2ZmKQorRGVmYXVsdCBWYWx1ZTogNgorICAgIFRoaXMgdmFsdWUgZGVsYXlzIHRoZSBnZW5lcmF0aW9uIG9mIHJlY2VpdmUgaW50ZXJydXB0cyBpbiB1bml0cyBvZiAKKyAgICAwLjgxOTIgbWljcm9zZWNvbmRzLiAgUmVjZWl2ZSBpbnRlcnJ1cHQgcmVkdWN0aW9uIGNhbiBpbXByb3ZlIENQVSAKKyAgICBlZmZpY2llbmN5IGlmIHByb3Blcmx5IHR1bmVkIGZvciBzcGVjaWZpYyBuZXR3b3JrIHRyYWZmaWMuIEluY3JlYXNpbmcgCisgICAgdGhpcyB2YWx1ZSBhZGRzIGV4dHJhIGxhdGVuY3kgdG8gZnJhbWUgcmVjZXB0aW9uIGFuZCBjYW4gZW5kIHVwIAorICAgIGRlY3JlYXNpbmcgdGhlIHRocm91Z2hwdXQgb2YgVENQIHRyYWZmaWMuIElmIHRoZSBzeXN0ZW0gaXMgcmVwb3J0aW5nIAorICAgIGRyb3BwZWQgcmVjZWl2ZXMsIHRoaXMgdmFsdWUgbWF5IGJlIHNldCB0b28gaGlnaCwgY2F1c2luZyB0aGUgZHJpdmVyIHRvIAorICAgIHJ1biBvdXQgb2YgYXZhaWxhYmxlIHJlY2VpdmUgZGVzY3JpcHRvcnMuCisKK1R4RGVzY3JpcHRvcnMKK1ZhbGlkIFJhbmdlOiA2NC00MDk2CitEZWZhdWx0IFZhbHVlOiAyNTYKKyAgICBUaGlzIHZhbHVlIGlzIHRoZSBudW1iZXIgb2YgdHJhbnNtaXQgZGVzY3JpcHRvcnMgYWxsb2NhdGVkIGJ5IHRoZSBkcml2ZXIuCisgICAgSW5jcmVhc2luZyB0aGlzIHZhbHVlIGFsbG93cyB0aGUgZHJpdmVyIHRvIHF1ZXVlIG1vcmUgdHJhbnNtaXRzLiBFYWNoIAorICAgIGRlc2NyaXB0b3IgaXMgMTYgYnl0ZXMuCisKK1hzdW1SWAorVmFsaWQgUmFuZ2U6IDAtMQorRGVmYXVsdCBWYWx1ZTogMQorICAgIEEgdmFsdWUgb2YgJzEnIGluZGljYXRlcyB0aGF0IHRoZSBkcml2ZXIgc2hvdWxkIGVuYWJsZSBJUCBjaGVja3N1bQorICAgIG9mZmxvYWQgZm9yIHJlY2VpdmVkIHBhY2tldHMgKGJvdGggVURQIGFuZCBUQ1ApIHRvIHRoZSBhZGFwdGVyIGhhcmR3YXJlLgorCitYc3VtVFgKK1ZhbGlkIFJhbmdlOiAwLTEKK0RlZmF1bHQgVmFsdWU6IDEKKyAgICBBIHZhbHVlIG9mICcxJyBpbmRpY2F0ZXMgdGhhdCB0aGUgZHJpdmVyIHNob3VsZCBlbmFibGUgSVAgY2hlY2tzdW0KKyAgICBvZmZsb2FkIGZvciB0cmFuc21pdHRlZCBwYWNrZXRzIChib3RoIFVEUCBhbmQgVENQKSB0byB0aGUgYWRhcHRlciAKKyAgICBoYXJkd2FyZS4KKworSW1wcm92aW5nIFBlcmZvcm1hbmNlCis9PT09PT09PT09PT09PT09PT09PT0KKworV2l0aCB0aGUgSW50ZWwgUFJPLzEwIEdiRSBhZGFwdGVyLCB0aGUgZGVmYXVsdCBMaW51eCBjb25maWd1cmF0aW9uIHdpbGwgdmVyeSAKK2xpa2VseSBsaW1pdCB0aGUgdG90YWwgYXZhaWxhYmxlIHRocm91Z2hwdXQgYXJ0aWZpY2lhbGx5LiAgVGhlcmUgaXMgYSBzZXQgb2YgCit0aGluZ3MgdGhhdCB3aGVuIGFwcGxpZWQgdG9nZXRoZXIgaW5jcmVhc2UgdGhlIGFiaWxpdHkgb2YgTGludXggdG8gdHJhbnNtaXQgCithbmQgcmVjZWl2ZSBkYXRhLiAgVGhlIGZvbGxvd2luZyBlbmhhbmNlbWVudHMgd2VyZSBvcmlnaW5hbGx5IGFjcXVpcmVkIGZyb20KK3NldHRpbmdzIHB1Ymxpc2hlZCBhdCBodHRwOi8vd3d3LnNwZWMub3JnL3dlYjk5IGZvciB2YXJpb3VzIHN1Ym1pdHRlZCByZXN1bHRzIAordXNpbmcgTGludXguCisKK05PVEU6IFRoZXNlIGNoYW5nZXMgYXJlIG9ubHkgc3VnZ2VzdGlvbnMsIGFuZCBzZXJ2ZSBhcyBhIHN0YXJ0aW5nIHBvaW50IGZvciAKK3R1bmluZyB5b3VyIG5ldHdvcmsgcGVyZm9ybWFuY2UuCisKK1RoZSBjaGFuZ2VzIGFyZSBtYWRlIGluIHRocmVlIG1ham9yIHdheXMsIGxpc3RlZCBpbiBvcmRlciBvZiBncmVhdGVzdCBlZmZlY3Q6CistIFVzZSBpZmNvbmZpZyB0byBtb2RpZnkgdGhlIG10dSAobWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCkgYW5kIHRoZSB0eHF1ZXVlbGVuIAorICBwYXJhbWV0ZXIuCistIFVzZSBzeXNjdGwgdG8gbW9kaWZ5IC9wcm9jIHBhcmFtZXRlcnMgKGVzc2VudGlhbGx5IGtlcm5lbCB0dW5pbmcpCistIFVzZSBzZXRwY2kgdG8gbW9kaWZ5IHRoZSBNTVJCQyBmaWVsZCBpbiBQQ0ktWCBjb25maWd1cmF0aW9uIHNwYWNlIHRvIGluY3JlYXNlIAorICB0cmFuc21pdCBidXJzdCBsZW5ndGhzIG9uIHRoZSBidXMuCisKK05PVEU6IHNldHBjaSBtb2RpZmllcyB0aGUgYWRhcHRlcidzIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIHRvIGFsbG93IGl0IHRvIHJlYWQgCit1cCB0byA0ayBieXRlcyBhdCBhIHRpbWUgKGZvciB0cmFuc21pdHMpLiAgSG93ZXZlciwgZm9yIHNvbWUgc3lzdGVtcyB0aGUgCitiZWhhdmlvciBhZnRlciBtb2RpZnlpbmcgdGhpcyByZWdpc3RlciBtYXkgYmUgdW5kZWZpbmVkIChwb3NzaWJseSBlcnJvcnMgb2Ygc29tZSAKK2tpbmQpLiBBIHBvd2VyLWN5Y2xlLCBoYXJkIHJlc2V0IG9yIGV4cGxpY2l0bHkgc2V0dGluZyB0aGUgZTYgcmVnaXN0ZXIgYmFjayB0byAKKzIyIChzZXRwY2kgLWQgODA4NjoxMDQ4IGU2LmI9MjIpIG1heSBiZSByZXF1aXJlZCB0byBnZXQgYmFjayB0byBhIHN0YWJsZSAKK2NvbmZpZ3VyYXRpb24uCisKKy0gQ09QWSB0aGVzZSBsaW5lcyBhbmQgcGFzdGUgdGhlbSBpbnRvIGl4Z2JfcGVyZi5zaDoKKyMhL2Jpbi9iYXNoCitlY2hvICJjb25maWd1cmluZyBuZXR3b3JrIHBlcmZvcm1hbmNlICwgZWRpdCB0aGlzIGZpbGUgdG8gY2hhbmdlIHRoZSBpbnRlcmZhY2UiCisjIHNldCBtbXJiYyB0byA0ayByZWFkcywgbW9kaWZ5IG9ubHkgSW50ZWwgMTBHYkUgZGV2aWNlIElEcworc2V0cGNpIC1kIDgwODY6MTA0OCBlNi5iPTJlCisjIHNldCB0aGUgTVRVIChtYXggdHJhbnNtaXNzaW9uIHVuaXQpIC0gaXQgcmVxdWlyZXMgeW91ciBzd2l0Y2ggYW5kIGNsaWVudHMgdG8gY2hhbmdlIHRvbyEKKyMgc2V0IHRoZSB0eHF1ZXVlbGVuCisjIHlvdXIgaXhnYiBhZGFwdGVyIHNob3VsZCBiZSBsb2FkZWQgYXMgZXRoMSBmb3IgdGhpcyB0byB3b3JrLCBjaGFuZ2UgaWYgbmVlZGVkCitpZmNvbmZpZyBldGgxIG10dSA5MDAwIHR4cXVldWVsZW4gMTAwMCB1cAorIyBjYWxsIHRoZSBzeXNjdGwgdXRpbGl0eSB0byBtb2RpZnkgL3Byb2Mvc3lzIGVudHJpZXMgCitzeXNjdGwgLXAgLi9zeXNjdGxfaXhnYi5jb25mIAorLSBFTkQgaXhnYl9wZXJmLnNoCisKKy0gQ09QWSB0aGVzZSBsaW5lcyBhbmQgcGFzdGUgdGhlbSBpbnRvIHN5c2N0bF9peGdiLmNvbmY6CisjIHNvbWUgb2YgdGhlIGRlZmF1bHRzIG1heSBiZSBkaWZmZXJlbnQgZm9yIHlvdXIga2VybmVsCisjIGNhbGwgdGhpcyBmaWxlIHdpdGggc3lzY3RsIC1wIDx0aGlzIGZpbGU+CisjIHRoZXNlIGFyZSBqdXN0IHN1Z2dlc3RlZCB2YWx1ZXMgdGhhdCB3b3JrZWQgd2VsbCB0byBpbmNyZWFzZSB0aHJvdWdocHV0IGluCisjIHNldmVyYWwgbmV0d29yayBiZW5jaG1hcmsgdGVzdHMsIHlvdXIgbWlsZWFnZSBtYXkgdmFyeQorCisjIyMgSVBWNCBzcGVjaWZpYyBzZXR0aW5ncworbmV0LmlwdjQudGNwX3RpbWVzdGFtcHMgPSAwICMgdHVybnMgVENQIHRpbWVzdGFtcCBzdXBwb3J0IG9mZiwgZGVmYXVsdCAxLCByZWR1Y2VzIENQVSB1c2UKK25ldC5pcHY0LnRjcF9zYWNrID0gMCAjIHR1cm4gU0FDSyBzdXBwb3J0IG9mZiwgZGVmYXVsdCBvbgorIyBvbiBzeXN0ZW1zIHdpdGggYSBWRVJZIGZhc3QgYnVzIC0+IG1lbW9yeSBpbnRlcmZhY2UgdGhpcyBpcyB0aGUgYmlnIGdhaW5lciAKK25ldC5pcHY0LnRjcF9ybWVtID0gMTAwMDAwMDAgMTAwMDAwMDAgMTAwMDAwMDAgIyBzZXRzIG1pbi9kZWZhdWx0L21heCBUQ1AgcmVhZCBidWZmZXIsIGRlZmF1bHQgNDA5NiA4NzM4MCAxNzQ3NjAKK25ldC5pcHY0LnRjcF93bWVtID0gMTAwMDAwMDAgMTAwMDAwMDAgMTAwMDAwMDAgIyBzZXRzIG1pbi9wcmVzc3VyZS9tYXggVENQIHdyaXRlIGJ1ZmZlciwgZGVmYXVsdCA0MDk2IDE2Mzg0IDEzMTA3MgorbmV0LmlwdjQudGNwX21lbSA9IDEwMDAwMDAwIDEwMDAwMDAwIDEwMDAwMDAwICMgc2V0cyBtaW4vcHJlc3N1cmUvbWF4IFRDUCBidWZmZXIgc3BhY2UsIGRlZmF1bHQgMzE3NDQgMzIyNTYgMzI3NjgKKworIyMjIENPUkUgc2V0dGluZ3MgKG1vc3RseSBmb3Igc29ja2V0IGFuZCBVRFAgZWZmZWN0KQorbmV0LmNvcmUucm1lbV9tYXggPSA1MjQyODcgIyBtYXhpbXVtIHJlY2VpdmUgc29ja2V0IGJ1ZmZlciBzaXplLCBkZWZhdWx0IDEzMTA3MQorbmV0LmNvcmUud21lbV9tYXggPSA1MjQyODcgIyBtYXhpbXVtIHNlbmQgc29ja2V0IGJ1ZmZlciBzaXplLCBkZWZhdWx0IDEzMTA3MQorbmV0LmNvcmUucm1lbV9kZWZhdWx0ID0gNTI0Mjg3ICMgZGVmYXVsdCByZWNlaXZlIHNvY2tldCBidWZmZXIgc2l6ZSwgZGVmYXVsdCA2NTUzNQorbmV0LmNvcmUud21lbV9kZWZhdWx0ID0gNTI0Mjg3ICMgZGVmYXVsdCBzZW5kIHNvY2tldCBidWZmZXIgc2l6ZSwgZGVmYXVsdCA2NTUzNQorbmV0LmNvcmUub3B0bWVtX21heCA9IDUyNDI4NyAjIG1heGltdW0gYW1vdW50IG9mIG9wdGlvbiBtZW1vcnkgYnVmZmVycywgZGVmYXVsdCAxMDI0MAorbmV0LmNvcmUubmV0ZGV2X21heF9iYWNrbG9nID0gMzAwMDAwICMgbnVtYmVyIG9mIHVucHJvY2Vzc2VkIGlucHV0IHBhY2tldHMgYmVmb3JlIGtlcm5lbCBzdGFydHMgZHJvcHBpbmcgdGhlbSwgZGVmYXVsdCAzMDAKKy0gRU5EIHN5c2N0bF9peGdiLmNvbmYKKworRWRpdCB0aGUgaXhnYl9wZXJmLnNoIHNjcmlwdCBpZiBuZWNlc3NhcnkgdG8gY2hhbmdlIGV0aDEgdG8gd2hhdGV2ZXIgaW50ZXJmYWNlIAoreW91ciBpeGdiIGRyaXZlciBpcyB1c2luZy4KKworTk9URTogVW5sZXNzIHRoZXNlIHNjcmlwdHMgYXJlIGFkZGVkIHRvIHRoZSBib290IHByb2Nlc3MsIHRoZXNlIGNoYW5nZXMgd2lsbCAKK29ubHkgbGFzdCBvbmx5IHVudGlsIHRoZSBuZXh0IHN5c3RlbSByZWJvb3QuCisKKworUmVzb2x2aW5nIFNsb3cgVURQIFRyYWZmaWMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdXIgc2VydmVyIGRvZXMgbm90IHNlZW0gdG8gYmUgYWJsZSB0byByZWNlaXZlIFVEUCB0cmFmZmljIGFzIGZhc3QgYXMgaXQgCitjYW4gcmVjZWl2ZSBUQ1AgdHJhZmZpYywgaXQgY291bGQgYmUgYmVjYXVzZSBMaW51eCwgYnkgZGVmYXVsdCwgZG9lcyBub3Qgc2V0IAordGhlIG5ldHdvcmsgc3RhY2sgYnVmZmVycyBhcyBsYXJnZSBhcyB0aGV5IG5lZWQgdG8gYmUgdG8gc3VwcG9ydCBoaWdoIFVEUCAKK3RyYW5zZmVyIHJhdGVzLiBPbmUgd2F5IHRvIGFsbGV2aWF0ZSB0aGlzIHByb2JsZW0gaXMgdG8gYWxsb3cgbW9yZSBtZW1vcnkgdG8gCitiZSB1c2VkIGJ5IHRoZSBJUCBzdGFjayB0byBzdG9yZSBpbmNvbWluZyBkYXRhLiAKKworRm9yIGluc3RhbmNlLCB1c2UgdGhlIGNvbW1hbmRzOiAKKyAgICBzeXNjdGwgLXcgbmV0LmNvcmUucm1lbV9tYXg9MjYyMTQzCithbmQKKyAgICBzeXNjdGwgLXcgbmV0LmNvcmUucm1lbV9kZWZhdWx0PTI2MjE0MwordG8gaW5jcmVhc2UgdGhlIHJlYWQgYnVmZmVyIG1lbW9yeSBtYXggYW5kIGRlZmF1bHQgdG8gMjYyMTQzICgyNTZrIC0gMSkgZnJvbSAKK2RlZmF1bHRzIG9mIG1heD0xMzEwNzEgKDEyOGsgLSAxKSBhbmQgZGVmYXVsdD02NTUzNSAoNjRrIC0gMSkuIFRoZXNlIHZhcmlhYmxlcyAKK3dpbGwgaW5jcmVhc2UgdGhlIGFtb3VudCBvZiBtZW1vcnkgdXNlZCBieSB0aGUgbmV0d29yayBzdGFjayBmb3IgcmVjZWl2ZXMsIGFuZCAKK2NhbiBiZSBpbmNyZWFzZWQgc2lnbmlmaWNhbnRseSBtb3JlIGlmIG5lY2Vzc2FyeSBmb3IgeW91ciBhcHBsaWNhdGlvbi4KKworU3VwcG9ydAorPT09PT09PQorCitGb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiBhbmQgc3VwcG9ydCwgZ28gdG8gdGhlIEludGVsIHN1cHBvcnQgd2Vic2l0ZSBhdDoKKworICAgIGh0dHA6Ly9zdXBwb3J0LmludGVsLmNvbQorCitJZiBhbiBpc3N1ZSBpcyBpZGVudGlmaWVkIHdpdGggdGhlIHJlbGVhc2VkIHNvdXJjZSBjb2RlIG9uIHRoZSBzdXBwb3J0ZWQKK2tlcm5lbCB3aXRoIGEgc3VwcG9ydGVkIGFkYXB0ZXIsIGVtYWlsIHRoZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIAordGhlIGlzc3VlIHRvIGxpbnV4Lm5pY3NAaW50ZWwuY29tLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2xhcGItbW9kdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9sYXBiLW1vZHVsZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRmYzhmMjIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbGFwYi1tb2R1bGUudHh0CkBAIC0wLDAgKzEsMjYzIEBACisJCVRoZSBMaW51eCBMQVBCIE1vZHVsZSBJbnRlcmZhY2UgMS4zCisKKwkJICAgICAgSm9uYXRoYW4gTmF5bG9yIDI5LjEyLjk2CisKK0NoYW5nZWQgKEhlbm5lciBFaXNlbiwgMjAwMC0xMC0yOSk6IGludCByZXR1cm4gdmFsdWUgZm9yIGRhdGFfaW5kaWNhdGlvbigpIAorCitUaGUgTEFQQiBtb2R1bGUgd2lsbCBiZSBhIHNlcGFyYXRlbHkgY29tcGlsZWQgbW9kdWxlIGZvciB1c2UgYnkgYW55IHBhcnRzIG9mCit0aGUgTGludXggb3BlcmF0aW5nIHN5c3RlbSB0aGF0IHJlcXVpcmUgYSBMQVBCIHNlcnZpY2UuIFRoaXMgZG9jdW1lbnQKK2RlZmluZXMgdGhlIGludGVyZmFjZXMgdG8sIGFuZCB0aGUgc2VydmljZXMgcHJvdmlkZWQgYnkgdGhpcyBtb2R1bGUuIFRoZQordGVybSBtb2R1bGUgaW4gdGhpcyBjb250ZXh0IGRvZXMgbm90IGltcGx5IHRoYXQgdGhlIExBUEIgbW9kdWxlIGlzIGEKK3NlcGFyYXRlbHkgbG9hZGFibGUgbW9kdWxlLCBhbHRob3VnaCBpdCBtYXkgYmUuIFRoZSB0ZXJtIG1vZHVsZSBpcyB1c2VkIGluCitpdHMgbW9yZSBzdGFuZGFyZCBtZWFuaW5nLgorCitUaGUgaW50ZXJmYWNlIHRvIHRoZSBMQVBCIG1vZHVsZSBjb25zaXN0cyBvZiBmdW5jdGlvbnMgdG8gdGhlIG1vZHVsZSwKK2NhbGxiYWNrcyBmcm9tIHRoZSBtb2R1bGUgdG8gaW5kaWNhdGUgaW1wb3J0YW50IHN0YXRlIGNoYW5nZXMsIGFuZAorc3RydWN0dXJlcyBmb3IgZ2V0dGluZyBhbmQgc2V0dGluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbW9kdWxlLgorCitTdHJ1Y3R1cmVzCistLS0tLS0tLS0tCisKK1Byb2JhYmx5IHRoZSBtb3N0IGltcG9ydGFudCBzdHJ1Y3R1cmUgaXMgdGhlIHNrYnVmZiBzdHJ1Y3R1cmUgZm9yIGhvbGRpbmcKK3JlY2VpdmVkIGFuZCB0cmFuc21pdHRlZCBkYXRhLCBob3dldmVyIGl0IGlzIGJleW9uZCB0aGUgc2NvcGUgb2YgdGhpcworZG9jdW1lbnQuCisKK1RoZSB0d28gTEFQQiBzcGVjaWZpYyBzdHJ1Y3R1cmVzIGFyZSB0aGUgTEFQQiBpbml0aWFsaXNhdGlvbiBzdHJ1Y3R1cmUgYW5kCit0aGUgTEFQQiBwYXJhbWV0ZXIgc3RydWN0dXJlLiBUaGVzZSB3aWxsIGJlIGRlZmluZWQgaW4gYSBzdGFuZGFyZCBoZWFkZXIKK2ZpbGUsIDxsaW51eC9sYXBiLmg+LiBUaGUgaGVhZGVyIGZpbGUgPG5ldC9sYXBiLmg+IGlzIGludGVybmFsIHRvIHRoZSBMQVBCCittb2R1bGUgYW5kIGlzIG5vdCBmb3IgdXNlLgorCitMQVBCIEluaXRpYWxpc2F0aW9uIFN0cnVjdHVyZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBvbmx5IG9uY2UsIGluIHRoZSBjYWxsIHRvIGxhcGJfcmVnaXN0ZXIgKHNlZSBiZWxvdykuCitJdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGV2aWNlIGRyaXZlciB0aGF0IHJlcXVpcmVzIHRoZSBzZXJ2aWNlcworb2YgdGhlIExBUEIgbW9kdWxlLgorCitzdHJ1Y3QgbGFwYl9yZWdpc3Rlcl9zdHJ1Y3QgeworCXZvaWQgKCpjb25uZWN0X2NvbmZpcm1hdGlvbikoaW50IHRva2VuLCBpbnQgcmVhc29uKTsKKwl2b2lkICgqY29ubmVjdF9pbmRpY2F0aW9uKShpbnQgdG9rZW4sIGludCByZWFzb24pOworCXZvaWQgKCpkaXNjb25uZWN0X2NvbmZpcm1hdGlvbikoaW50IHRva2VuLCBpbnQgcmVhc29uKTsKKwl2b2lkICgqZGlzY29ubmVjdF9pbmRpY2F0aW9uKShpbnQgdG9rZW4sIGludCByZWFzb24pOworCWludCAgKCpkYXRhX2luZGljYXRpb24pKGludCB0b2tlbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJdm9pZCAoKmRhdGFfdHJhbnNtaXQpKGludCB0b2tlbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit9OworCitFYWNoIG1lbWJlciBvZiB0aGlzIHN0cnVjdHVyZSBjb3JyZXNwb25kcyB0byBhIGZ1bmN0aW9uIGluIHRoZSBkZXZpY2UgZHJpdmVyCit0aGF0IGlzIGNhbGxlZCB3aGVuIGEgcGFydGljdWxhciBldmVudCBpbiB0aGUgTEFQQiBtb2R1bGUgb2NjdXJzLiBUaGVzZSB3aWxsCitiZSBkZXNjcmliZWQgaW4gZGV0YWlsIGJlbG93LiBJZiBhIGNhbGxiYWNrIGlzIG5vdCByZXF1aXJlZCAoISEpIHRoZW4gYSBOVUxMCittYXkgYmUgc3Vic3RpdHV0ZWQuCisKKworTEFQQiBQYXJhbWV0ZXIgU3RydWN0dXJlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB3aXRoIHRoZSBsYXBiX2dldHBhcm1zIGFuZCBsYXBiX3NldHBhcm1zIGZ1bmN0aW9ucworKHNlZSBiZWxvdykuIFRoZXkgYXJlIHVzZWQgdG8gYWxsb3cgdGhlIGRldmljZSBkcml2ZXIgdG8gZ2V0IGFuZCBzZXQgdGhlCitvcGVyYXRpb25hbCBwYXJhbWV0ZXJzIG9mIHRoZSBMQVBCIGltcGxlbWVudGF0aW9uIGZvciBhIGdpdmVuIGNvbm5lY3Rpb24uCisKK3N0cnVjdCBsYXBiX3Bhcm1zX3N0cnVjdCB7CisJdW5zaWduZWQgaW50IHQxOworCXVuc2lnbmVkIGludCB0MXRpbWVyOworCXVuc2lnbmVkIGludCB0MjsKKwl1bnNpZ25lZCBpbnQgdDJ0aW1lcjsKKwl1bnNpZ25lZCBpbnQgbjI7CisJdW5zaWduZWQgaW50IG4yY291bnQ7CisJdW5zaWduZWQgaW50IHdpbmRvdzsKKwl1bnNpZ25lZCBpbnQgc3RhdGU7CisJdW5zaWduZWQgaW50IG1vZGU7Cit9OworCitUMSBhbmQgVDIgYXJlIHByb3RvY29sIHRpbWluZyBwYXJhbWV0ZXJzIGFuZCBhcmUgZ2l2ZW4gaW4gdW5pdHMgb2YgMTAwbXMuIE4yCitpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdHJpZXMgb24gdGhlIGxpbmsgYmVmb3JlIGl0IGlzIGRlY2xhcmVkIGEgZmFpbHVyZS4KK1RoZSB3aW5kb3cgc2l6ZSBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2Ygb3V0c3RhbmRpbmcgZGF0YSBwYWNrZXRzIGFsbG93ZWQgdG8KK2JlIHVuYWNrbm93bGVkZ2VkIGJ5IHRoZSByZW1vdGUgZW5kLCB0aGUgdmFsdWUgb2YgdGhlIHdpbmRvdyBpcyBiZXR3ZWVuIDEKK2FuZCA3IGZvciBhIHN0YW5kYXJkIExBUEIgbGluaywgYW5kIGJldHdlZW4gMSBhbmQgMTI3IGZvciBhbiBleHRlbmRlZCBMQVBCCitsaW5rLgorCitUaGUgbW9kZSB2YXJpYWJsZSBpcyBhIGJpdCBmaWVsZCB1c2VkIGZvciBzZXR0aW5nIChhdCBwcmVzZW50KSB0aHJlZSB2YWx1ZXMuCitUaGUgYml0IGZpZWxkcyBoYXZlIHRoZSBmb2xsb3dpbmcgbWVhbmluZ3M6CisKK0JpdAlNZWFuaW5nCiswCUxBUEIgb3BlcmF0aW9uICgwPUxBUEJfU1RBTkRBUkQgMT1MQVBCX0VYVEVOREVEKS4KKzEJW1NNXUxQIG9wZXJhdGlvbiAoMD1MQVBCX1NMUCAxPUxBUEI9TUxQKS4KKzIJRFRFL0RDRSBvcGVyYXRpb24gKDA9TEFQQl9EVEUgMT1MQVBCX0RDRSkKKzMtMzEJUmVzZXJ2ZWQsIG11c3QgYmUgMC4KKworRXh0ZW5kZWQgTEFQQiBvcGVyYXRpb24gaW5kaWNhdGVzIHRoZSB1c2Ugb2YgZXh0ZW5kZWQgc2VxdWVuY2UgbnVtYmVycyBhbmQKK2NvbnNlcXVlbnRseSBsYXJnZXIgd2luZG93IHNpemVzLCB0aGUgZGVmYXVsdCBpcyBzdGFuZGFyZCBMQVBCIG9wZXJhdGlvbi4KK01MUCBvcGVyYXRpb24gaXMgdGhlIHNhbWUgYXMgU0xQIG9wZXJhdGlvbiBleGNlcHQgdGhhdCB0aGUgYWRkcmVzc2VzIHVzZWQgYnkKK0xBUEIgYXJlIGRpZmZlcmVudCB0byBpbmRpY2F0ZSB0aGUgbW9kZSBvZiBvcGVyYXRpb24sIHRoZSBkZWZhdWx0IGlzIFNpbmdsZQorTGluayBQcm9jZWR1cmUuIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gRENFIGFuZCBEVEUgb3BlcmF0aW9uIGlzIChpKSB0aGUKK2FkZHJlc3NlcyB1c2VkIGZvciBjb21tYW5kcyBhbmQgcmVzcG9uc2VzLCBhbmQgKGlpKSB3aGVuIHRoZSBEQ0UgaXMgbm90Citjb25uZWN0ZWQsIGl0IHNlbmRzIERNIHdpdGhvdXQgcG9sbHMgc2V0LCBldmVyeSBUMS4gVGhlIHVwcGVyIGNhc2UgY29uc3RhbnQKK25hbWVzIHdpbGwgYmUgZGVmaW5lZCBpbiB0aGUgcHVibGljIExBUEIgaGVhZGVyIGZpbGUuCisKKworRnVuY3Rpb25zCistLS0tLS0tLS0KKworVGhlIExBUEIgbW9kdWxlIHByb3ZpZGVzIGEgbnVtYmVyIG9mIGZ1bmN0aW9uIGVudHJ5IHBvaW50cy4KKworCitpbnQgbGFwYl9yZWdpc3Rlcih2b2lkICp0b2tlbiwgc3RydWN0IGxhcGJfcmVnaXN0ZXJfc3RydWN0KTsKKworVGhpcyBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgdGhlIExBUEIgbW9kdWxlIG1heSBiZSB1c2VkLiBJZiB0aGUgY2FsbCBpcworc3VjY2Vzc2Z1bCB0aGVuIExBUEJfT0sgaXMgcmV0dXJuZWQuIFRoZSB0b2tlbiBtdXN0IGJlIGEgdW5pcXVlIGlkZW50aWZpZXIKK2dlbmVyYXRlZCBieSB0aGUgZGV2aWNlIGRyaXZlciB0byBhbGxvdyBmb3IgdGhlIHVuaXF1ZSBpZGVudGlmaWNhdGlvbiBvZiB0aGUKK2luc3RhbmNlIG9mIHRoZSBMQVBCIGxpbmsuIEl0IGlzIHJldHVybmVkIGJ5IHRoZSBMQVBCIG1vZHVsZSBpbiBhbGwgb2YgdGhlCitjYWxsYmFja3MsIGFuZCBpcyB1c2VkIGJ5IHRoZSBkZXZpY2UgZHJpdmVyIGluIGFsbCBjYWxscyB0byB0aGUgTEFQQiBtb2R1bGUuCitGb3IgbXVsdGlwbGUgTEFQQiBsaW5rcyBpbiBhIHNpbmdsZSBkZXZpY2UgZHJpdmVyLCBtdWx0aXBsZSBjYWxscyB0bworbGFwYl9yZWdpc3RlciBtdXN0IGJlIG1hZGUuIFRoZSBmb3JtYXQgb2YgdGhlIGxhcGJfcmVnaXN0ZXJfc3RydWN0IGlzIGdpdmVuCithYm92ZS4gVGhlIHJldHVybiB2YWx1ZXMgYXJlOgorCitMQVBCX09LCQkJTEFQQiByZWdpc3RlcmVkIHN1Y2Nlc3NmdWxseS4KK0xBUEJfQkFEVE9LRU4JCVRva2VuIGlzIGFscmVhZHkgcmVnaXN0ZXJlZC4KK0xBUEJfTk9NRU0JCU91dCBvZiBtZW1vcnkKKworCitpbnQgbGFwYl91bnJlZ2lzdGVyKHZvaWQgKnRva2VuKTsKKworVGhpcyByZWxlYXNlcyBhbGwgdGhlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBMQVBCIGxpbmsuIEFueSBjdXJyZW50CitMQVBCIGxpbmsgd2lsbCBiZSBhYmFuZG9uZWQgd2l0aG91dCBmdXJ0aGVyIG1lc3NhZ2VzIGJlaW5nIHBhc3NlZC4gQWZ0ZXIKK3RoaXMgY2FsbCwgdGhlIHZhbHVlIG9mIHRva2VuIGlzIG5vIGxvbmdlciB2YWxpZCBmb3IgYW55IGNhbGxzIHRvIHRoZSBMQVBCCitmdW5jdGlvbi4gVGhlIHZhbGlkIHJldHVybiB2YWx1ZXMgYXJlOgorCitMQVBCX09LCQkJTEFQQiB1bnJlZ2lzdGVyZWQgc3VjY2Vzc2Z1bGx5LgorTEFQQl9CQURUT0tFTgkJSW52YWxpZC91bmtub3duIExBUEIgdG9rZW4uCisKKworaW50IGxhcGJfZ2V0cGFybXModm9pZCAqdG9rZW4sIHN0cnVjdCBsYXBiX3Bhcm1zX3N0cnVjdCAqcGFybXMpOworCitUaGlzIGFsbG93cyB0aGUgZGV2aWNlIGRyaXZlciB0byBnZXQgdGhlIHZhbHVlcyBvZiB0aGUgY3VycmVudCBMQVBCCit2YXJpYWJsZXMsIHRoZSBsYXBiX3Bhcm1zX3N0cnVjdCBpcyBkZXNjcmliZWQgYWJvdmUuIFRoZSB2YWxpZCByZXR1cm4gdmFsdWVzCithcmU6CisKK0xBUEJfT0sJCQlMQVBCIGdldHBhcm1zIHdhcyBzdWNjZXNzZnVsLgorTEFQQl9CQURUT0tFTgkJSW52YWxpZC91bmtub3duIExBUEIgdG9rZW4uCisKKworaW50IGxhcGJfc2V0cGFybXModm9pZCAqdG9rZW4sIHN0cnVjdCBsYXBiX3Bhcm1zX3N0cnVjdCAqcGFybXMpOworCitUaGlzIGFsbG93cyB0aGUgZGV2aWNlIGRyaXZlciB0byBzZXQgdGhlIHZhbHVlcyBvZiB0aGUgY3VycmVudCBMQVBCCit2YXJpYWJsZXMsIHRoZSBsYXBiX3Bhcm1zX3N0cnVjdCBpcyBkZXNjcmliZWQgYWJvdmUuIFRoZSB2YWx1ZXMgb2YgdDF0aW1lciwKK3QydGltZXIgYW5kIG4yY291bnQgYXJlIGlnbm9yZWQsIGxpa2V3aXNlIGNoYW5naW5nIHRoZSBtb2RlIGJpdHMgd2hlbgorY29ubmVjdGVkIHdpbGwgYmUgaWdub3JlZC4gQW4gZXJyb3IgaW1wbGllcyB0aGF0IG5vbmUgb2YgdGhlIHZhbHVlcyBoYXZlCitiZWVuIGNoYW5nZWQuIFRoZSB2YWxpZCByZXR1cm4gdmFsdWVzIGFyZToKKworTEFQQl9PSwkJCUxBUEIgZ2V0cGFybXMgd2FzIHN1Y2Nlc3NmdWwuCitMQVBCX0JBRFRPS0VOCQlJbnZhbGlkL3Vua25vd24gTEFQQiB0b2tlbi4KK0xBUEJfSU5WQUxVRQkJT25lIG9mIHRoZSB2YWx1ZXMgd2FzIG91dCBvZiBpdHMgYWxsb3dhYmxlIHJhbmdlLgorCisKK2ludCBsYXBiX2Nvbm5lY3RfcmVxdWVzdCh2b2lkICp0b2tlbik7CisKK0luaXRpYXRlIGEgY29ubmVjdCB1c2luZyB0aGUgY3VycmVudCBwYXJhbWV0ZXIgc2V0dGluZ3MuIFRoZSB2YWxpZCByZXR1cm4KK3ZhbHVlcyBhcmU6CisKK0xBUEJfT0sJCQlMQVBCIGlzIHN0YXJ0aW5nIHRvIGNvbm5lY3QuCitMQVBCX0JBRFRPS0VOCQlJbnZhbGlkL3Vua25vd24gTEFQQiB0b2tlbi4KK0xBUEJfQ09OTkVDVEVECQlMQVBCIG1vZHVsZSBpcyBhbHJlYWR5IGNvbm5lY3RlZC4KKworCitpbnQgbGFwYl9kaXNjb25uZWN0X3JlcXVlc3Qodm9pZCAqdG9rZW4pOworCitJbml0aWF0ZSBhIGRpc2Nvbm5lY3QuIFRoZSB2YWxpZCByZXR1cm4gdmFsdWVzIGFyZToKKworTEFQQl9PSwkJCUxBUEIgaXMgc3RhcnRpbmcgdG8gZGlzY29ubmVjdC4KK0xBUEJfQkFEVE9LRU4JCUludmFsaWQvdW5rbm93biBMQVBCIHRva2VuLgorTEFQQl9OT1RDT05ORUNURUQJTEFQQiBtb2R1bGUgaXMgbm90IGNvbm5lY3RlZC4KKworCitpbnQgbGFwYl9kYXRhX3JlcXVlc3Qodm9pZCAqdG9rZW4sIHN0cnVjdCBza19idWZmICpza2IpOworCitRdWV1ZSBkYXRhIHdpdGggdGhlIExBUEIgbW9kdWxlIGZvciB0cmFuc21pdHRpbmcgb3ZlciB0aGUgbGluay4gSWYgdGhlIGNhbGwKK2lzIHN1Y2Nlc3NmdWwgdGhlbiB0aGUgc2tidWZmIGlzIG93bmVkIGJ5IHRoZSBMQVBCIG1vZHVsZSBhbmQgbWF5IG5vdCBiZQordXNlZCBieSB0aGUgZGV2aWNlIGRyaXZlciBhZ2Fpbi4gVGhlIHZhbGlkIHJldHVybiB2YWx1ZXMgYXJlOgorCitMQVBCX09LCQkJTEFQQiBoYXMgYWNjZXB0ZWQgdGhlIGRhdGEuCitMQVBCX0JBRFRPS0VOCQlJbnZhbGlkL3Vua25vd24gTEFQQiB0b2tlbi4KK0xBUEJfTk9UQ09OTkVDVEVECUxBUEIgbW9kdWxlIGlzIG5vdCBjb25uZWN0ZWQuCisKKworaW50IGxhcGJfZGF0YV9yZWNlaXZlZCh2b2lkICp0b2tlbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKK1F1ZXVlIGRhdGEgd2l0aCB0aGUgTEFQQiBtb2R1bGUgd2hpY2ggaGFzIGJlZW4gcmVjZWl2ZWQgZnJvbSB0aGUgZGV2aWNlLiBJdAoraXMgZXhwZWN0ZWQgdGhhdCB0aGUgZGF0YSBwYXNzZWQgdG8gdGhlIExBUEIgbW9kdWxlIGhhcyBza2ItPmRhdGEgcG9pbnRpbmcKK3RvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIExBUEIgZGF0YS4gSWYgdGhlIGNhbGwgaXMgc3VjY2Vzc2Z1bCB0aGVuIHRoZSBza2J1ZmYKK2lzIG93bmVkIGJ5IHRoZSBMQVBCIG1vZHVsZSBhbmQgbWF5IG5vdCBiZSB1c2VkIGJ5IHRoZSBkZXZpY2UgZHJpdmVyIGFnYWluLgorVGhlIHZhbGlkIHJldHVybiB2YWx1ZXMgYXJlOgorCitMQVBCX09LCQkJTEFQQiBoYXMgYWNjZXB0ZWQgdGhlIGRhdGEuCitMQVBCX0JBRFRPS0VOCQlJbnZhbGlkL3Vua25vd24gTEFQQiB0b2tlbi4KKworCitDYWxsYmFja3MKKy0tLS0tLS0tLQorCitUaGVzZSBjYWxsYmFja3MgYXJlIGZ1bmN0aW9ucyBwcm92aWRlZCBieSB0aGUgZGV2aWNlIGRyaXZlciBmb3IgdGhlIExBUEIKK21vZHVsZSB0byBjYWxsIHdoZW4gYW4gZXZlbnQgb2NjdXJzLiBUaGV5IGFyZSByZWdpc3RlcmVkIHdpdGggdGhlIExBUEIKK21vZHVsZSB3aXRoIGxhcGJfcmVnaXN0ZXIgKHNlZSBhYm92ZSkgaW4gdGhlIHN0cnVjdHVyZSBsYXBiX3JlZ2lzdGVyX3N0cnVjdAorKHNlZSBhYm92ZSkuCisKKwordm9pZCAoKmNvbm5lY3RfY29uZmlybWF0aW9uKSh2b2lkICp0b2tlbiwgaW50IHJlYXNvbik7CisKK1RoaXMgaXMgY2FsbGVkIGJ5IHRoZSBMQVBCIG1vZHVsZSB3aGVuIGEgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCBhZnRlcgorYmVpbmcgcmVxdWVzdGVkIGJ5IGEgY2FsbCB0byBsYXBiX2Nvbm5lY3RfcmVxdWVzdCAoc2VlIGFib3ZlKS4gVGhlIHJlYXNvbiBpcworYWx3YXlzIExBUEJfT0suCisKKwordm9pZCAoKmNvbm5lY3RfaW5kaWNhdGlvbikodm9pZCAqdG9rZW4sIGludCByZWFzb24pOworCitUaGlzIGlzIGNhbGxlZCBieSB0aGUgTEFQQiBtb2R1bGUgd2hlbiB0aGUgbGluayBpcyBlc3RhYmxpc2hlZCBieSB0aGUgcmVtb3RlCitzeXN0ZW0uIFRoZSB2YWx1ZSBvZiByZWFzb24gaXMgYWx3YXlzIExBUEJfT0suCisKKwordm9pZCAoKmRpc2Nvbm5lY3RfY29uZmlybWF0aW9uKSh2b2lkICp0b2tlbiwgaW50IHJlYXNvbik7CisKK1RoaXMgaXMgY2FsbGVkIGJ5IHRoZSBMQVBCIG1vZHVsZSB3aGVuIGFuIGV2ZW50IG9jY3VycyBhZnRlciB0aGUgZGV2aWNlCitkcml2ZXIgaGFzIGNhbGxlZCBsYXBiX2Rpc2Nvbm5lY3RfcmVxdWVzdCAoc2VlIGFib3ZlKS4gVGhlIHJlYXNvbiBpbmRpY2F0ZXMKK3doYXQgaGFzIGhhcHBlbmVkLiBJbiBhbGwgY2FzZXMgdGhlIExBUEIgbGluayBjYW4gYmUgcmVnYXJkZWQgYXMgYmVpbmcKK3Rlcm1pbmF0ZWQuIFRoZSB2YWx1ZXMgZm9yIHJlYXNvbiBhcmU6CisKK0xBUEJfT0sJCQlUaGUgTEFQQiBsaW5rIHdhcyB0ZXJtaW5hdGVkIG5vcm1hbGx5LgorTEFQQl9OT1RDT05ORUNURUQJVGhlIHJlbW90ZSBzeXN0ZW0gd2FzIG5vdCBjb25uZWN0ZWQuCitMQVBCX1RJTUVET1VUCQlObyByZXNwb25zZSB3YXMgcmVjZWl2ZWQgaW4gTjIgdHJpZXMgZnJvbSB0aGUgcmVtb3RlCisJCQlzeXN0ZW0uCisKKwordm9pZCAoKmRpc2Nvbm5lY3RfaW5kaWNhdGlvbikodm9pZCAqdG9rZW4sIGludCByZWFzb24pOworCitUaGlzIGlzIGNhbGxlZCBieSB0aGUgTEFQQiBtb2R1bGUgd2hlbiB0aGUgbGluayBpcyB0ZXJtaW5hdGVkIGJ5IHRoZSByZW1vdGUKK3N5c3RlbSBvciBhbm90aGVyIGV2ZW50IGhhcyBvY2N1cnJlZCB0byB0ZXJtaW5hdGUgdGhlIGxpbmsuIFRoaXMgbWF5IGJlCityZXR1cm5lZCBpbiByZXNwb25zZSB0byBhIGxhcGJfY29ubmVjdF9yZXF1ZXN0IChzZWUgYWJvdmUpIGlmIHRoZSByZW1vdGUKK3N5c3RlbSByZWZ1c2VkIHRoZSByZXF1ZXN0LiBUaGUgdmFsdWVzIGZvciByZWFzb24gYXJlOgorCitMQVBCX09LCQkJVGhlIExBUEIgbGluayB3YXMgdGVybWluYXRlZCBub3JtYWxseSBieSB0aGUgcmVtb3RlCisJCQlzeXN0ZW0uCitMQVBCX1JFRlVTRUQJCVRoZSByZW1vdGUgc3lzdGVtIHJlZnVzZWQgdGhlIGNvbm5lY3QgcmVxdWVzdC4KK0xBUEJfTk9UQ09OTkVDVEVECVRoZSByZW1vdGUgc3lzdGVtIHdhcyBub3QgY29ubmVjdGVkLgorTEFQQl9USU1FRE9VVAkJTm8gcmVzcG9uc2Ugd2FzIHJlY2VpdmVkIGluIE4yIHRyaWVzIGZyb20gdGhlIHJlbW90ZQorCQkJc3lzdGVtLgorCisKK2ludCAoKmRhdGFfaW5kaWNhdGlvbikodm9pZCAqdG9rZW4sIHN0cnVjdCBza19idWZmICpza2IpOworCitUaGlzIGlzIGNhbGxlZCBieSB0aGUgTEFQQiBtb2R1bGUgd2hlbiBkYXRhIGhhcyBiZWVuIHJlY2VpdmVkIGZyb20gdGhlCityZW1vdGUgc3lzdGVtIHRoYXQgc2hvdWxkIGJlIHBhc3NlZCBvbnRvIHRoZSBuZXh0IGxheWVyIGluIHRoZSBwcm90b2NvbAorc3RhY2suIFRoZSBza2J1ZmYgYmVjb21lcyB0aGUgcHJvcGVydHkgb2YgdGhlIGRldmljZSBkcml2ZXIgYW5kIHRoZSBMQVBCCittb2R1bGUgd2lsbCBub3QgcGVyZm9ybSBhbnkgbW9yZSBhY3Rpb25zIG9uIGl0LiBUaGUgc2tiLT5kYXRhIHBvaW50ZXIgd2lsbAorYmUgcG9pbnRpbmcgdG8gdGhlIGZpcnN0IGJ5dGUgb2YgZGF0YSBhZnRlciB0aGUgTEFQQiBoZWFkZXIuCisKK1RoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gTkVUX1JYX0RST1AgKGFzIGRlZmluZWQgaW4gdGhlIGhlYWRlcgorZmlsZSBpbmNsdWRlL2xpbnV4L25ldGRldmljZS5oKSBpZiBhbmQgb25seSBpZiB0aGUgZnJhbWUgd2FzIGRyb3BwZWQKK2JlZm9yZSBpdCBjb3VsZCBiZSBkZWxpdmVyZWQgdG8gdGhlIHVwcGVyIGxheWVyLgorCisKK3ZvaWQgKCpkYXRhX3RyYW5zbWl0KSh2b2lkICp0b2tlbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKK1RoaXMgaXMgY2FsbGVkIGJ5IHRoZSBMQVBCIG1vZHVsZSB3aGVuIGRhdGEgaXMgdG8gYmUgdHJhbnNtaXR0ZWQgdG8gdGhlCityZW1vdGUgc3lzdGVtIGJ5IHRoZSBkZXZpY2UgZHJpdmVyLiBUaGUgc2tidWZmIGJlY29tZXMgdGhlIHByb3BlcnR5IG9mIHRoZQorZGV2aWNlIGRyaXZlciBhbmQgdGhlIExBUEIgbW9kdWxlIHdpbGwgbm90IHBlcmZvcm0gYW55IG1vcmUgYWN0aW9ucyBvbiBpdC4KK1RoZSBza2ItPmRhdGEgcG9pbnRlciB3aWxsIGJlIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBMQVBCIGhlYWRlci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9sdHBjLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9sdHBjLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTJhOTEyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2x0cGMudHh0CkBAIC0wLDAgKzEsMTMxIEBACitUaGlzIGlzIHRoZSBBTFBIQSB2ZXJzaW9uIG9mIHRoZSBsdHBjIGRyaXZlci4KKworSW4gb3JkZXIgdG8gdXNlIGl0LCB5b3Ugd2lsbCBuZWVkIGF0IGxlYXN0IHZlcnNpb24gMS4zLjMgb2YgdGhlCituZXRhdGFsayBwYWNrYWdlLCBhbmQgdGhlIEFwcGxlIG9yIEZhcmFsbG9uIExvY2FsVGFsayBQQyBjYXJkLgorVGhlcmUgYXJlIGEgbnVtYmVyIG9mIGRpZmZlcmVudCBMb2NhbFRhbGsgY2FyZHMgZm9yIHRoZSBQQzsgdGhpcworZHJpdmVyIGFwcGxpZXMgb25seSB0byB0aGUgb25lIHdpdGggdGhlIDY1YzAyIHByb2Nlc3NvciBjaGlwIG9uIGl0LgorCitUbyBpbmNsdWRlIGl0IGluIHRoZSBrZXJuZWwsIHNlbGVjdCB0aGUgQ09ORklHX0xUUEMgc3dpdGNoIGluIHRoZQorY29uZmlndXJhdGlvbiBkaWFsb2cuICBZb3UgY2FuIGFsc28gY29tcGlsZSBpdCBhcyBhIG1vZHVsZS4KKworV2hpbGUgdGhlIGRyaXZlciB3aWxsIGF0dGVtcHQgdG8gYXV0b3Byb2JlIHRoZSBJL08gcG9ydCBhZGRyZXNzLCBJUlEKK2xpbmUsIGFuZCBETUEgY2hhbm5lbCBvZiB0aGUgY2FyZCwgdGhpcyBkb2VzIG5vdCBhbHdheXMgd29yay4gIEZvcgordGhpcyByZWFzb24sIHlvdSBzaG91bGQgYmUgcHJlcGFyZWQgdG8gc3VwcGx5IHRoZXNlIHBhcmFtZXRlcnMKK3lvdXJzZWxmLiAgKHNlZSAiQ2FyZCBDb25maWd1cmF0aW9uIiBiZWxvdyBmb3IgaG93IHRvIGRldGVybWluZSBvcgorY2hhbmdlIHRoZSBzZXR0aW5ncyBvbiB5b3VyIGNhcmQpCisKK1doZW4gdGhlIGRyaXZlciBpcyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwsIHlvdSBjYW4gYWRkIGEgbGluZSBzdWNoCithcyB0aGUgZm9sbG93aW5nIHRvIHlvdXIgL2V0Yy9saWxvLmNvbmY6CisKKyBhcHBlbmQ9Imx0cGM9MHgyNDAsOSwxIgorCit3aGVyZSB0aGUgcGFyYW1ldGVycyAoaW4gb3JkZXIpIGFyZSB0aGUgcG9ydCBhZGRyZXNzLCBJUlEsIGFuZCBETUEKK2NoYW5uZWwuICBUaGUgc2Vjb25kIGFuZCB0aGlyZCB2YWx1ZXMgY2FuIGJlIG9taXR0ZWQsIGluIHdoaWNoIGNhc2UKK3RoZSBkcml2ZXIgd2lsbCB0cnkgdG8gZGV0ZXJtaW5lIHRoZW0gaXRzZWxmLgorCitJZiB5b3UgbG9hZCB0aGUgZHJpdmVyIGFzIGEgbW9kdWxlLCB5b3UgY2FuIHBhc3MgdGhlIHBhcmFtZXRlcnMgImlvPSIsCisiaXJxPSIsIGFuZCAiZG1hPSIgb24gdGhlIGNvbW1hbmQgbGluZSB3aXRoIGluc21vZCBvciBtb2Rwcm9iZSwgb3IgYWRkCit0aGVtIGFzIG9wdGlvbnMgaW4gL2V0Yy9tb2Rwcm9iZS5jb25mOgorCisgYWxpYXMgbHQwIGx0cGMgIyBhdXRvbG9hZCB0aGUgbW9kdWxlIHdoZW4gdGhlIGludGVyZmFjZSBpcyBjb25maWd1cmVkCisgb3B0aW9ucyBsdHBjIGlvPTB4MjQwIGlycT05IGRtYT0xCisKK0JlZm9yZSBzdGFydGluZyB1cCB0aGUgbmV0YXRhbGsgZGVtb25zIChwZXJoYXBzIGluIHJjLmxvY2FsKSwgeW91CituZWVkIHRvIGFkZCBhIGxpbmUgc3VjaCBhczoKKworIC9zYmluL2lmY29uZmlnIGx0MCAxMjcuMC4wLjQyCisKK1RoZSBhZGRyZXNzIGlzIHVuaW1wb3J0YW50IC0gaG93ZXZlciwgdGhlIGNhcmQgbmVlZHMgdG8gYmUgY29uZmlndXJlZAord2l0aCBpZmNvbmZpZyBzbyB0aGF0IE5ldGF0YWxrIGNhbiBmaW5kIGl0LgorCitUaGUgYXBwcm9wcmlhdGUgbmV0YXRhbGsgY29uZmlndXJhdGlvbiBkZXBlbmRzIG9uIHdoZXRoZXIgeW91IGFyZQorYXR0YWNoZWQgdG8gYSBuZXR3b3JrIHRoYXQgaW5jbHVkZXMgQXBwbGVUYWxrIHJvdXRlcnMgb3Igbm90LiAgSWYsCitsaWtlIG1lLCB5b3UgYXJlIHNpbXBseSBjb25uZWN0aW5nIHRvIHlvdXIgaG9tZSBNYWNpbnRvc2hlcyBhbmQKK3ByaW50ZXJzLCB5b3UgbmVlZCB0byBzZXQgdXAgbmV0YXRhbGsgdG8gInNlZWQiLiAgVGhlIHdheSBJIGRvIHRoaXMKK2lzIHRvIGhhdmUgdGhlIGxpbmVzCisKKyBkdW1teSAtc2VlZCAtcGhhc2UgMiAtbmV0IDIwMDAgLWFkZHIgMjAwMC4yNiAtem9uZSAiMTAzMyIKKyBsdDAgLXNlZWQgLXBoYXNlIDEgLW5ldCAxMDMzIC1hZGRyIDEwMzMuMjcgLXpvbmUgIjEwMzMiCisKK2luIG15IGF0YWxrZC5jb25mLiAgV2hhdCBpcyBnb2luZyBvbiBoZXJlIGlzIHRoYXQgSSBuZWVkIHRvIGZvb2wKK25ldGF0YWxrIGludG8gdGhpbmtpbmcgdGhhdCB0aGVyZSBhcmUgdHdvIEFwcGxlVGFsayBpbnRlcmZhY2VzCitwcmVzZW50OyBvdGhlcndpc2UsIGl0IHJlZnVzZXMgdG8gc2VlZC4gIFRoaXMgaXMgYSBoYWNrLCBhbmQgYSBtb3JlCitwZXJtYW5lbnQgc29sdXRpb24gd291bGQgYmUgdG8gYWx0ZXIgdGhlIG5ldGF0YWxrIGNvZGUuICBBbHNvLCBtYWtlCitzdXJlIHlvdSBoYXZlIHRoZSBjb3JyZWN0IG5hbWUgZm9yIHRoZSBkdW1teSBpbnRlcmZhY2UgLSBJZiBpdCdzCitjb21waWxlZCBhcyBhIG1vZHVsZSwgeW91IHdpbGwgbmVlZCB0byByZWZlciB0byBpdCBhcyAiZHVtbXkwIiBvciBzb21lCitzdWNoLgorCitJZiB5b3UgYXJlIGF0dGFjaGVkIHRvIGFuIGV4dGVuZGVkIEFwcGxlVGFsayBuZXR3b3JrLCB3aXRoIHJvdXRlcnMgb24KK2l0LCB0aGVuIHlvdSBkb24ndCBuZWVkIHRvIGZvb2wgYXJvdW5kIHdpdGggdGhpcyAtLSB0aGUgYXBwcm9wcmlhdGUKK2xpbmUgaW4gYXRhbGtkLmNvbmYgaXMKKworIGx0MCAtcGhhc2UgMQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDYXJkIENvbmZpZ3VyYXRpb246CisKK1RoZSBpbnRlcnJ1cHRzIGFuZCBzbyBmb3J0aCBhcmUgY29uZmlndXJlZCB2aWEgdGhlIGRpcHN3aXRjaCBvbiB0aGUKK2JvYXJkLiAgU2V0IHRoZSBzd2l0Y2hlcyBzbyBhcyBub3QgdG8gY29uZmxpY3Qgd2l0aCBvdGhlciBoYXJkd2FyZS4KKworICAgICAgIEludGVycnVwdHMgLS0gc2V0IGF0IG1vc3Qgb25lLiAgSWYgbm9uZSBhcmUgc2V0LCB0aGUgZHJpdmVyIHVzZXMKKyAgICAgICBwb2xsZWQgbW9kZS4gIEJlY2F1c2UgdGhlIGNhcmQgd2FzIGRldmVsb3BlZCBpbiB0aGUgWFQgZXJhLCB0aGUKKyAgICAgICBvcmlnaW5hbCBkb2N1bWVudGF0aW9uIHJlZmVycyB0byBJUlEyLiAgU2luY2UgeW91J2xsIGJlIHJ1bm5pbmcKKyAgICAgICB0aGlzIG9uIGFuIEFUIChvciBsYXRlcikgY2xhc3MgbWFjaGluZSwgdGhhdCByZWFsbHkgbWVhbnMgSVJROS4KKworICAgICAgIFNXMSAgICAgSVJRIDQKKyAgICAgICBTVzIgICAgIElSUSAzCisgICAgICAgU1czICAgICBJUlEgOSAoMiBpbiBvcmlnaW5hbCBjYXJkIGRvY3VtZW50YXRpb24gb25seSBhcHBsaWVzIHRvIFhUKQorCisKKyAgICAgICBETUEgLS0gY2hvb3NlIERNQSAxIG9yIDMsIGFuZCBzZXQgYm90aCBjb3JyZXNwb25kaW5nIHN3aXRjaGVzLgorCisgICAgICAgU1c0ICAgICBETUEgMworICAgICAgIFNXNSAgICAgRE1BIDEKKyAgICAgICBTVzYgICAgIERNQSAzCisgICAgICAgU1c3ICAgICBETUEgMQorCisKKyAgICAgICBJL08gYWRkcmVzcyAtLSBjaG9vc2Ugb25lLgorCisgICAgICAgU1c4ICAgICAyMjAgLyAyNDAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSVA6CisKK1llcywgaXQgaXMgcG9zc2libGUgdG8gZG8gSVAgb3ZlciBMb2NhbFRhbGsuICBIb3dldmVyLCB5b3UgY2FuJ3QganVzdAordHJlYXQgdGhlIExvY2FsVGFsayBkZXZpY2UgbGlrZSBhbiBvcmRpbmFyeSBFdGhlcm5ldCBkZXZpY2UsIGV2ZW4gaWYKK3RoYXQncyB3aGF0IGl0IGxvb2tzIGxpa2UgdG8gTmV0YXRhbGsuCisKK0luc3RlYWQsIHlvdSBmb2xsb3cgdGhlIHNhbWUgcHJvY2VkdXJlIGFzIGZvciBkb2luZyBJUCBpbiBFdGhlclRhbGsuCitTZWUgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwZGRwLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUKK2tlcm5lbCBkcml2ZXIgYW5kIHVzZXJzcGFjZSB0b29scyBuZWVkZWQuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0JVR1M6CisKK0lSUSBhdXRvcHJvYmluZyBvZnRlbiBkb2Vzbid0IHdvcmsgb24gYSBjb2xkIGJvb3QuICBUbyBnZXQgYXJvdW5kCit0aGlzLCBlaXRoZXIgY29tcGlsZSB0aGUgZHJpdmVyIGFzIGEgbW9kdWxlLCBvciBwYXNzIHRoZSBwYXJhbWV0ZXJzCitmb3IgdGhlIGNhcmQgdG8gdGhlIGtlcm5lbCBhcyBkZXNjcmliZWQgYWJvdmUuCisKK0Fsc28sIGFzIHVzdWFsLCBhdXRvcHJvYmluZyBpcyBub3QgcmVjb21tZW5kZWQgd2hlbiB5b3UgdXNlIHRoZSBkcml2ZXIKK2FzIGEgbW9kdWxlLiAodGhvdWdoIGl0IHVzdWFsbHkgd29ya3MgYXQgYm9vdCB0aW1lLCBhdCBsZWFzdCkKKworUG9sbGVkIG1vZGUgaXMgKnJlYWxseSogc2xvdyBzb21ldGltZXMsIGJ1dCB0aGlzIHNlZW1zIHRvIGRlcGVuZCBvbgordGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIG5ldHdvcmsuCisKK0l0IG1heSB0aGVvcmV0aWNhbGx5IGJlIHBvc3NpYmxlIHRvIHVzZSB0d28gTFRQQyBjYXJkcyBpbiB0aGUgc2FtZQorbWFjaGluZSwgYnV0IHRoaXMgaXMgdW5zdXBwb3J0ZWQsIHNvIGlmIHlvdSByZWFsbHkgd2FudCB0byBkbyB0aGlzLAoreW91J2xsIHByb2JhYmx5IGhhdmUgdG8gaGFjayB0aGUgaW5pdGlhbGl6YXRpb24gY29kZSBhIGJpdC4KKworX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworVEhBTktTOgorCVRoYW5rcyB0byBBbGFuIENveCBmb3IgaGVscGZ1bCBkaXNjdXNzaW9ucyBlYXJseSBvbiBpbiB0aGlzCit3b3JrLCBhbmQgdG8gRGVuaXMgSGFpbnN3b3J0aCBmb3IgZG9pbmcgdGhlIGJsZWVkaW5nLWVkZ2UgdGVzdGluZy4KKworLS0gQnJhZGZvcmQgSm9obnNvbiA8YnJhZGZvcmRAbWF0aC51bW4uZWR1PgorCistLSBVcGRhdGVkIDExLzA5LzE5OTggYnkgRGF2aWQgSHVnZ2lucy1EYWluZXMgPGRoZEBkZWJpYW4ub3JnPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL211bHRpY2FzdC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbXVsdGljYXN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDQ5YTY0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL211bHRpY2FzdC50eHQKQEAgLTAsMCArMSw2NCBAQAorQmVoYXZpb3VyIG9mIENhcmRzIFVuZGVyIE11bHRpY2FzdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGlzIGhvdyB0aGV5IGN1cnJlbnRseSBiZWhhdmUsIG5vdCB3aGF0IHRoZSBoYXJkd2FyZSBjYW4gZG8tLWZvciBleGFtcGxlLAordGhlIExhbmNlIGRyaXZlciBkb2Vzbid0IHVzZSBpdHMgZmlsdGVyLCBldmVuIHRob3VnaCB0aGUgY29kZSBmb3IgbG9hZGluZworaXQgaXMgaW4gdGhlIERFQyBMYW5jZS1iYXNlZCBkcml2ZXIuCisKK1RoZSBmb2xsb3dpbmcgYXJlIHJlcXVpcmVtZW50cyBmb3IgbXVsdGljYXN0aW5nIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FwcGxlVGFsawlNdWx0aWNhc3QJaGFyZHdhcmUgZmlsdGVyaW5nIG5vdCBpbXBvcnRhbnQgYnV0CisJCQkJIGF2b2lkIGNhcmRzIG9ubHkgZG9pbmcgcHJvbWlzYworSVAtTXVsdGljYXN0CU11bHRpY2FzdAloYXJkd2FyZSBmaWx0ZXJzIHJlYWxseSBoZWxwCitJUC1NUm91dGUJQWxsTXVsdGkJaGFyZHdhcmUgZmlsdGVycyBhcmUgb2Ygbm8gaGVscAorCisKK0JvYXJkCQlNdWx0aWNhc3QJQWxsTXVsdGkJUHJvbWlzYwkJRmlsdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzNjNTAxCQlZRVMJCVlFUwkJWUVTCQlTb2Z0d2FyZQorM2M1MDMJCVlFUwkJWUVTCQlZRVMJCUhhcmR3YXJlCiszYzUwNQkJWUVTCQlOTwkJWUVTCQlIYXJkd2FyZQorM2M1MDcJCU5PCQlOTwkJTk8JCU4vQQorM2M1MDkJCVlFUwkJWUVTCQlZRVMJCVNvZnR3YXJlCiszYzU5eAkJWUVTCQlZRVMJCVlFUwkJU29mdHdhcmUKK2FjMzIwMAkJWUVTCQlZRVMJCVlFUwkJSGFyZHdhcmUKK2Fwcmljb3QJCVlFUwkJUFJPTUlTQwkJWUVTCQlIYXJkd2FyZQorYXJjbmV0CQlOTwkJTk8JCU5PCQlOL0EKK2F0MTcwMAkJUFJPTUlTQwkJUFJPTUlTQwkJWUVTCQlTb2Z0d2FyZQorYXRwCQlQUk9NSVNDCQlQUk9NSVNDCQlZRVMJCVNvZnR3YXJlCitjczg5eDAJCVlFUwkJWUVTCQlZRVMJCVNvZnR3YXJlCitkZTR4NQkJWUVTCQlZRVMJCVlFUwkJSGFyZHdhcmUKK2RlNjAwCQlOTwkJTk8JCU5PCQlOL0EKK2RlNjIwCQlQUk9NSVNDCQlQUk9NSVNDCQlZRVMJCVNvZnR3YXJlCitkZXBjYQkJWUVTCQlQUk9NSVNDCQlZRVMJCUhhcmR3YXJlCitkbWZlCQlZRVMJCVlFUwkJWUVTCQlTb2Z0d2FyZSgqKQorZTIxMDAJCVlFUwkJWUVTCQlZRVMJCUhhcmR3YXJlCitlZXBybwkJWUVTCQlQUk9NSVNDCQlZRVMJCUhhcmR3YXJlCitlZXhwcmVzcwlOTwkJTk8JCU5PCQlOL0EKK2V3cmszCQlZRVMJCVBST01JU0MJCVlFUwkJSGFyZHdhcmUKK2hwLXBsdXMJCVlFUwkJWUVTCQlZRVMJCUhhcmR3YXJlCitocAkJWUVTCQlZRVMJCVlFUwkJSGFyZHdhcmUKK2hwMTAwCQlZRVMJCVlFUwkJWUVTCQlIYXJkd2FyZQoraWJtdHIJCU5PCQlOTwkJTk8JCU4vQQoraW9jMy1ldGgJWUVTCQlZRVMJCVlFUwkJSGFyZHdhcmUKK2xhbmNlCQlZRVMJCVlFUwkJWUVTCQlTb2Z0d2FyZSgjKQorbmUJCVlFUwkJWUVTCQlZRVMJCUhhcmR3YXJlCituaTUyCQk8LS0tLS0tLS0tLS0tLS0tLS0tIEJ1Z2d5IC0tLS0tLS0tLS0tLS0tLS0tLT4KK25pNjUJCVlFUwkJWUVTCQlZRVMJCVNvZnR3YXJlKCMpCitzZWVxCQlOTwkJTk8JCU5PCQlOL0EKK3NnaXNlZWsJCTwtLS0tLS0tLS0tLS0tLS0tLS0gQnVnZ3kgLS0tLS0tLS0tLS0tLS0tLS0tPgorc2tfZzE2CQlOTwkJTk8JCVlFUwkJTi9BCitzbWMtdWx0cmEJWUVTCQlZRVMJCVlFUwkJSGFyZHdhcmUKK3N1bmxhbmNlCVlFUwkJWUVTCQlZRVMJCUhhcmR3YXJlCit0dWxpcAkJWUVTCQlZRVMJCVlFUwkJSGFyZHdhcmUKK3dhdmVsYW4JCVlFUwkJUFJPTUlTQwkJWUVTCQlIYXJkd2FyZQord2QJCVlFUwkJWUVTCQlZRVMJCUhhcmR3YXJlCit4aXJjMnBzX2NzCVlFUwkJWUVTCQlZRVMJCUhhcmR3YXJlCit6bmV0CQlZRVMJCVlFUwkJWUVTCQlTb2Z0d2FyZQorCisKK1BST01JU0MgPSBUaGlzIG11bHRpY2FzdCBtb2RlIGlzIGluIGZhY3QgcHJvbWlzY3VvdXMgbW9kZS4gQXZvaWQgdXNpbmcKK2NhcmRzIHdobyBnbyBQUk9NSVNDIG9uIGFueSBtdWx0aWNhc3QgaW4gYSBtdWx0aWNhc3Qga2VybmVsLgorCisoIykgPSBIYXJkd2FyZSBtdWx0aWNhc3Qgc3VwcG9ydCBpcyBub3QgdXNlZCB5ZXQuCisoKikgPSBIYXJkd2FyZSBzdXBwb3J0IGZvciBEYXZpY29tIDkxMzIgY2hpcHNldCBvbmx5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25jc2EtdGVsbmV0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25jc2EtdGVsbmV0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3N2QyOGIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmNzYS10ZWxuZXQKQEAgLTAsMCArMSwxNiBAQAorTkNTQSB0ZWxuZXQgZG9lc24ndCB3b3JrIHdpdGggcGF0aCBNVFUgZGlzY292ZXJ5IGVuYWJsZWQuIFRoaXMgaXMgZHVlIHRvIGEKK2J1ZyBpbiBOQ1NBIHRoYXQgYWxzbyBzdG9wcyBpdCB3b3JraW5nIHdpdGggb3RoZXIgbW9kZXJuIG5ldHdvcmtpbmcgY29kZQorc3VjaCBhcyBTb2xhcmlzLgorCitUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGlzIGNvdXJ0ZXN5IG9mIAorTWFyZWsgPG1hcmVrbUBpMTdsaW51eGIuaXN0cy5wd3Iud3JvYy5wbD4KKworVGhlcmUgaXMgYSBmaXhlZCB2ZXJzaW9uIHNvbWV3aGVyZSBvbiBmdHAudXBlLmFjLnphIChzb3JyeSwgSSBkb24ndAorcmVtZW1iZXIgdGhlIGV4YWN0IHBhdGhuYW1lLCBhbmQgdGhpcyBzaXRlIGlzIHZlcnkgc2xvdyBmcm9tIGhlcmUpLgorSXQgbWF5IG9yIG1heSBub3QgYmUgZmFzdGVyIGZvciB5b3UgdG8gZ2V0IGl0IGZyb20KK2Z0cDovL2Z0cC5pc3RzLnB3ci53cm9jLnBsL3B1Yi9tc2Rvcy90ZWxuZXQvbmNzYV91cGUvdGVsMjMwNzQuemlwCisoc291cmNlIGlzIGluIHYyMzA3MDRzLnppcCkuICBJIGhhdmUgdGVzdGVkIGl0IHdpdGggMS4zLjc5ICh3aXRoCitwYXRoIG10dSBkaXNjb3ZlcnkgZW5hYmxlZCAtIG5jc2EgMi4zLjA4IGRpZG4ndCB3b3JrKSBhbmQgaXQgc2VlbXMKK3RvIHdvcmsuICBJIGRvbid0IGtub3cgaWYgYW55b25lIGlzIHdvcmtpbmcgb24gdGhpcyBjb2RlIC0gdGhpcwordmVyc2lvbiBpcyBvdmVyIGEgeWVhciBvbGQuICBUb28gYmFkIC0gaXQncyBmYXN0ZXIgYW5kIG9mdGVuIG1vcmUKK3N0YWJsZSB0aGFuIHRoZXNlIHdpbmRvemUgdGVsbmV0cywgYW5kIHJ1bnMgb24gYWxtb3N0IGFueXRoaW5nLi4uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0LW1vZHVsZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldC1tb2R1bGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODMwYTgzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldC1tb2R1bGVzLnR4dApAQCAtMCwwICsxLDMyNCBAQAorV2VkIDItQXVnLTk1ICA8bWF0dGkuYWFybmlvQHV0dS5maT4KKworCQlMaW51eCBuZXR3b3JrIGRyaXZlciBtb2R1bGVzCisKKwlEbyBub3QgbWlzdGFrZSB0aGlzIGZvciAiUkVBRE1FLm1vZHVsZXMiIGF0IHRoZSB0b3AtbGV2ZWwKKwlkaXJlY3RvcnkhICBUaGF0IGRvY3VtZW50IHRlbGxzIGFib3V0IG1vZHVsZXMgaW4gZ2VuZXJhbCwgd2hpbGUKKwl0aGlzIG9uZSB0ZWxscyBvbmx5IGFib3V0IG5ldHdvcmsgZGV2aWNlIGRyaXZlciBtb2R1bGVzLgorCisJVGhpcyBpcyBhIHBvdHBvdXJyaSBvZiBJTlNNT0QtdGltZSgqKSBjb25maWd1cmF0aW9uIG9wdGlvbnMKKwkoaWYgc3VjaCBleGlzdHMpIGFuZCB0aGVpciBkZWZhdWx0IHZhbHVlcyBvZiB2YXJpb3VzIG1vZHVsZXMKKwlpbiB0aGUgTGludXggbmV0d29yayBkcml2ZXJzIGNvbGxlY3Rpb24uCisKKwlTb21lIG1vZHVsZXMgaGF2ZSBhbHNvIGhpZGRlbiAoPSBub24tZG9jdW1lbnRlZCkgdHVuYWJsZSB2YWx1ZXMuCisJVGhlIGNob2ljZSBvZiBub3QgZG9jdW1lbnRpbmcgdGhlbSBpcyBiYXNlZCBvbiBnZW5lcmFsIGJlbGllZiwgdGhhdAorCXRoZSBsZXNzIHRoZSB1c2VyIG5lZWRzIHRvIGtub3csIHRoZSBiZXR0ZXIuICAoVGhlcmUgYXJlIHRoaW5ncyB0aGF0CisJZHJpdmVyIGRldmVsb3BlcnMgY2FuIHVzZSwgb3RoZXJzIHNob3VsZCBub3QgY29uZnVzZSB0aGVtc2VsdmVzLikKKworCUluIG1hbnkgY2FzZXMgaXQgaXMgaGlnaGx5IHByZWZlcnJlZCB0aGF0IGluc21vZDppbmcgaXMgZG9uZQorCU9OTFkgd2l0aCBkZWZpbmluZyBhbiBleHBsaWNpdCBhZGRyZXNzIGZvciB0aGUgY2FyZCwgQU5EIEJZCisJTk9UIFVTSU5HIEFVVE8tUFJPQklORyEKKworCU5vdyBtb3N0IGNhcmRzIGhhdmUgc29tZSBleHBsaWNpdGx5IGRlZmluZWQgYmFzZSBhZGRyZXNzIHRoYXQgdGhleQorCWFyZSBjb21waWxlZCB3aXRoICh0byBhdm9pZCBhdXRvLXByb2JpbmcsIGFtb25nIG90aGVyIHRoaW5ncykuCisJSWYgdGhhdCBjb21waWxlZCB2YWx1ZSBkb2VzIG5vdCBtYXRjaCB5b3VyIGFjdHVhbCBjb25maWd1cmF0aW9uLAorCWRvIHVzZSB0aGUgImlvPTB4WFhYIiAtcGFyYW1ldGVyIGZvciB0aGUgaW5zbW9kLCBhbmQgZ2l2ZSB0aGVyZQorCWEgdmFsdWUgbWF0Y2hpbmcgeW91ciBlbnZpcm9ubWVudC4KKworCUlmIHlvdSBhcmUgYWR2ZW50dXJvdXMsIHlvdSBjYW4gYXNrIHRoZSBkcml2ZXIgdG8gYXV0b3Byb2JlCisJYnkgdXNpbmcgdGhlICJpbz0wIiBwYXJhbWV0ZXIsIGhvd2V2ZXIgaXQgaXMgYSBwb3RlbnRpYWxseSBkYW5nZXJvdXMKKwl0aGluZyB0byBkbyBpbiBhIGxpdmUgc3lzdGVtLiAgKElmIHlvdSBkb24ndCBrbm93IHdoZXJlIHRoZQorCWNhcmQgaXMgbG9jYXRlZCwgeW91IGNhbiB0cnkgYXV0b3Byb2JpbmcsIGFuZCBhZnRlciBwb3NzaWJsZQorCWNyYXNoIHJlY292ZXJ5LCBpbnNtb2Qgd2l0aCBwcm9wZXIgSU8tYWRkcmVzcy4uKQorCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkoKikJIklOU01PRC10aW1lIiBtZWFucyB3aGVuIHlvdSBsb2FkIG1vZHVsZSB3aXRoCisJCS9zYmluL2luc21vZCAgeW91IGNhbiBmZWVkIGl0IG9wdGlvbmFsIHBhcmFtZXRlcnMuCisJCVNlZSAibWFuIGluc21vZCIuCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisJODM5MCBiYXNlZCBOZXR3b3JrIE1vZHVsZXMJCShQYXVsIEdvcnRtYWtlciwgTm92IDEyLCAxOTk1KQorCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyhJbmNsdWRlczogc21jLXVsdHJhLCBuZSwgd2QsIDNjNTAzLCBocCwgaHAtcGx1cywgZTIxMDAgYW5kIGFjMzIwMCkKKworVGhlIDgzOTAgc2VyaWVzIG9mIG5ldHdvcmsgZHJpdmVycyBub3cgc3VwcG9ydCBtdWx0aXBsZSBjYXJkIHN5c3RlbXMgd2l0aG91dCAKK3JlbG9hZGluZyB0aGUgc2FtZSBtb2R1bGUgbXVsdGlwbGUgdGltZXMgKG1lbW9yeSBlZmZpY2llbnQhKSBUaGlzIGlzIGRvbmUgYnkgCitzcGVjaWZ5aW5nIG11bHRpcGxlIGNvbW1hIHNlcGFyYXRlZCB2YWx1ZXMsIHN1Y2ggYXM6CisKKwlpbnNtb2QgM2M1MDMubyBpbz0weDI4MCwweDMwMCwweDMzMCwweDM1MCAgeGN2cj0wLDEsMCwxCisKK1RoZSBhYm92ZSB3b3VsZCBoYXZlIHRoZSBvbmUgbW9kdWxlIGNvbnRyb2xsaW5nIGZvdXIgM2M1MDMgY2FyZHMsIHdpdGggY2FyZCAyCithbmQgNCB1c2luZyBleHRlcm5hbCB0cmFuc2NlaXZlcnMuIFRoZSAiaW5zbW9kIiBtYW51YWwgZGVzY3JpYmVzIHRoZSB1c2FnZQorb2YgY29tbWEgc2VwYXJhdGVkIHZhbHVlIGxpc3RzLgorCitJdCBpcyAqU1RST05HTFkgUkVDT01NRU5ERUQqIHRoYXQgeW91IHN1cHBseSAiaW89IiBpbnN0ZWFkIG9mIGF1dG9wcm9iaW5nLgorSWYgYW4gImlvPSIgYXJndW1lbnQgaXMgbm90IHN1cHBsaWVkLCB0aGVuIHRoZSBJU0EgZHJpdmVycyB3aWxsIGNvbXBsYWluCithYm91dCBhdXRvcHJvYmluZyBiZWluZyBub3QgcmVjb21tZW5kZWQsIGFuZCBiZWdydWRnaW5nbHkgYXV0b3Byb2JlIGZvcgorYSAqU0lOR0xFIENBUkQgT05MWSogLS0gaWYgeW91IHdhbnQgdG8gdXNlIG11bHRpcGxlIGNhcmRzIHlvdSAqaGF2ZSogdG8gCitzdXBwbHkgYW4gImlvPTB4Tk5OLDB4UVFRLC4uLiIgYXJndW1lbnQuCisKK1RoZSBuZSBtb2R1bGUgaXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBhYm92ZS4gQSBORTIwMDAgaXMgZXNzZW50aWFsbHkgYW4KKzgzOTAgY2hpcCwgc29tZSBidXMgZ2x1ZSBhbmQgc29tZSBSQU0uIEJlY2F1c2Ugb2YgdGhpcywgdGhlIG5lIHByb2JlIGlzCittb3JlIGludmFzaXZlIHRoYW4gdGhlIHJlc3QsIGFuZCBzbyBhdCBib290IHdlIG1ha2Ugc3VyZSB0aGUgbmUgcHJvYmUgaXMgCitkb25lIGxhc3Qgb2YgYWxsIHRoZSA4MzkwIGNhcmRzIChzbyB0aGF0IGl0IHdvbid0IHRyaXAgb3ZlciBvdGhlciA4MzkwIGJhc2VkCitjYXJkcykgV2l0aCBtb2R1bGVzIHdlIGNhbid0IGVuc3VyZSB0aGF0IGFsbCBvdGhlciBub24tbmUgODM5MCBjYXJkcyBoYXZlCithbHJlYWR5IGJlZW4gZm91bmQuIEJlY2F1c2Ugb2YgdGhpcywgdGhlIG5lIG1vZHVsZSBSRVFVSVJFUyBhbiAiaW89MHhOTk4iIAorYXJndW1lbnQgcGFzc2VkIGluIHZpYSBpbnNtb2QuIEl0IHdpbGwgcmVmdXNlIHRvIGF1dG9wcm9iZS4KKworSXQgaXMgYWxzbyB3b3J0aCBub3RpbmcgdGhhdCBhdXRvLUlSUSBwcm9iYWJseSBpc24ndCBhcyByZWxpYWJsZSBkdXJpbmcgCit0aGUgZmx1cnJ5IG9mIGludGVycnVwdCBhY3Rpdml0eSBvbiBhIHJ1bm5pbmcgbWFjaGluZS4gQ2FyZHMgc3VjaCBhcyB0aGUgCituZTIwMDAgdGhhdCBjYW4ndCBnZXQgdGhlIElSUSBzZXR0aW5nIGZyb20gYW4gRUVQUk9NIG9yIGNvbmZpZ3VyYXRpb24KK3JlZ2lzdGVyIGFyZSBwcm9iYWJseSBiZXN0IHN1cHBsaWVkIHdpdGggYW4gImlycT1NIiBhcmd1bWVudCBhcyB3ZWxsLgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcmQvTW9kdWxlIExpc3QgLSBDb25maWd1cmFibGUgUGFyYW1ldGVycyBhbmQgRGVmYXVsdCBWYWx1ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworM2M1MDEuYzoKKwlpbyAgPSAweDI4MAlJTyBiYXNlIGFkZHJlc3MKKwlpcnEgPSA1CQlJUlEKKwkoUHJvYmVzIHBvcnRzOgkweDI4MCwgMHgzMDApCisKKzNjNTAzLmM6CisJaW8gPSAwCQkoSXQgd2lsbCBjb21wbGFpbiBpZiB5b3UgZG9uJ3Qgc3VwcGx5IGFuICJpbz0weE5OTiIpCisJaXJxID0gMAkJKElSUSBzb2Z0d2FyZSBzZWxlY3RlZCBieSBkcml2ZXIgdXNpbmcgYXV0b0lSUSkKKwl4Y3ZyID0gMAkoVXNlIHhjdnI9MSB0byBzZWxlY3QgZXh0ZXJuYWwgdHJhbnNjZWl2ZXIuKQorCShQcm9iZXMgcG9ydHM6IDB4MzAwLCAweDMxMCwgMHgzMzAsIDB4MzUwLCAweDI1MCwgMHgyODAsIDB4MkEwLCAweDJFMCkKKworM2M1MDUuYzoKKwlpbyA9IDAKKwlpcnEgPSAwCisJZG1hID0gNiAgICAgICAgIChub3QgYXV0b3Byb2JlZCkKKwkoUHJvYmVzIHBvcnRzOiAweDMwMCwgMHgyODAsIDB4MzEwKQorCiszYzUwNy5jOgorCWlvID0gMHgzMDAKKwlpcnEgPSAwCisJKFByb2JlcyBwb3J0czogMHgzMDAsIDB4MzIwLCAweDM0MCwgMHgyODApCisKKzNjNTA5LmM6CisJaW8gPSAwCisJaXJxID0gMAorCSggTW9kdWxlIGxvYWQtdGltZSBwcm9iaW5nIFdvcmtzIHJlbGlhYmx5IG9ubHkgb24gRUlTQSwgSVNBIElELVBST0JFCisJICBJUyBOT1QgUkVMSUFCTEUhICBDb21waWxlIHRoaXMgZHJpdmVyIHN0YXRpY2FsbHkgaW50byBrZXJuZWwgZm9yCisJICBub3csIGlmIHlvdSBuZWVkIGl0IGF1dG8tcHJvYmluZyBvbiBhbiBJU0EtYnVzIG1hY2hpbmUuICkKKworODM5MC5jOgorCShObyBwdWJsaWMgb3B0aW9ucywgc2V2ZXJhbCBvdGhlciBtb2R1bGVzIG5lZWQgdGhpcyBvbmUpCisKK2EyMDY1LmM6CisJU2luY2UgdGhpcyBpcyBhIFpvcnJvIGJvYXJkLCBpdCBzdXBwb3J0cyBmdWxsIGF1dG9wcm9iaW5nLCBldmVuIGZvcgorCW11bHRpcGxlIGJvYXJkcy4gKG02OGsvQW1pZ2EpCisKK2FjMzIwMC5jOgorCWlvID0gMAkJKENoZWNrcyAweDEwMDAgdG8gMHg4ZmZmIGluIDB4MTAwMCBpbnRlcnZhbHMpCisJaXJxID0gMAkJKFJlYWQgZnJvbSBjb25maWcgcmVnaXN0ZXIpCisJKEVJU0EgcHJvYmluZy4uKQorCithcHJpY290LmM6CisJaW8gPSAweDMwMCAgKENhbid0IGJlIGFsdGVyZWQhKQorCWlycSA9IDEwCisKK2FyY25ldC5jOgorCWlvID0gMAorCWlycW51bSA9IDAKKwlzaG1lbSA9IDAKKwludW0gPSAwCisJRE8gU0VUIFRIRVNFIE1BTlVBTExZIEFUIElOU01PRCEKKwkoV2hlbiBwcm9iaW5nLCBsb29rcyBhdCB0aGUgZm9sbG93aW5nIHBvc3NpYmxlIGFkZHJlc3NlczoKKwkgU3VnZ2VzdGVkIG9uZXM6CisJCTB4MzAwLCAweDJFMCwgMHgyRjAsIDB4MkQwCisJIE90aGVyIG9uZXM6CisJCTB4MjAwLCAweDIxMCwgMHgyMjAsIDB4MjMwLCAweDI0MCwgMHgyNTAsIDB4MjYwLCAweDI3MCwKKwkJMHgyODAsIDB4MjkwLCAweDJBMCwgMHgyQjAsIDB4MkMwLAorCQkgICAgICAgMHgzMTAsIDB4MzIwLCAweDMzMCwgMHgzNDAsIDB4MzUwLCAweDM2MCwgMHgzNzAsCisJCTB4MzgwLCAweDM5MCwgMHgzQTAsCQkJICAweDNFMCwgMHgzRjAgICkKKworYXJpYWRuZS5jOgorCVNpbmNlIHRoaXMgaXMgYSBab3JybyBib2FyZCwgaXQgc3VwcG9ydHMgZnVsbCBhdXRvcHJvYmluZywgZXZlbiBmb3IKKwltdWx0aXBsZSBib2FyZHMuIChtNjhrL0FtaWdhKQorCithdDE3MDAuYzoKKwlpbyA9IDB4MjYwCisJaXJxID0gMAorCShQcm9iZXMgcG9ydHM6IDB4MjYwLCAweDI4MCwgMHgyQTAsIDB4MjQwLCAweDM0MCwgMHgzMjAsIDB4MzgwLCAweDMwMCkKKworYXRhcmlfYmlvbmV0LmM6CisJU3VwcG9ydHMgZnVsbCBhdXRvcHJvYmluZy4gKG02OGsvQXRhcmkpCisKK2F0YXJpX3BhbXNuZXQuYzoKKwlTdXBwb3J0cyBmdWxsIGF1dG9wcm9iaW5nLiAobTY4ay9BdGFyaSkKKworYXRhcmlsYW5jZS5jOgorCVN1cHBvcnRzIGZ1bGwgYXV0b3Byb2JpbmcuIChtNjhrL0F0YXJpKQorCithdHAuYzogKk5vdCBtb2R1bGFyaXplZCoKKwkoUHJvYmVzIHBvcnRzOiAweDM3OCwgMHgyNzgsIDB4M0JDOworCSBmaXhlZCBJUlFzOiA1IGFuZCA3CQkJKQorCitjb3BzLmM6CisJaW8gPSAweDI0MAorCWlycSA9IDUKKwlub2RlaWQgPSAwCShBdXRvU2VsZWN0ID0gMCwgTm9kZUlEIDEtMjU0IGlzIGhhbmQgc2VsZWN0ZWQuKQorCShQcm9iZXMgcG9ydHM6IDB4MjQwLCAweDM0MCwgMHgyMDAsIDB4MjEwLCAweDIyMCwgMHgyMzAsIDB4MjYwLAorCQkgICAgICAgMHgyQTAsIDB4MzAwLCAweDMxMCwgMHgzMjAsIDB4MzMwLCAweDM1MCwgMHgzNjApCQorCitkZTR4NS5jOgorCWlvID0gMHgwMDBiCisJaXJxID0gMTAKKwlpc19ub3RfZGVjID0gMCAgLS0gRm9yIG5vbi1ERUMgY2FyZCB1c2luZyBERUMgMjEwNDAvMjEwNDEvMjExNDAgY2hpcCwgc2V0IHRoaXMgdG8gMQorCShFSVNBLCBhbmQgUENJIHByb2JpbmcpCisKK2RlNjAwLmM6CisJZGU2MDBfZGVidWcgPSAwCisJKE9uIHBvcnQgMHgzNzgsIGlycSA3IC0tIGxwdDE7ICBjb21waWxlIHRpbWUgY29uZmlndXJhYmxlKQorCitkZTYyMC5jOgorCWJuYyA9IDAsIHV0cCA9IDAgIDwtLSBGb3JjZSBtZWRpYSBieSBzZXR0aW5nIGVpdGhlci4KKwlpbyA9IDB4Mzc4CShhbHNvIGNvbXBpbGUtdGltZSBjb25maWd1cmFibGUpCisJaXJxID0gNworCitkZXBjYS5jOgorCWlvID0gMHgyMDAKKwlpcnEgPSA3CisJKFByb2JlcyBwb3J0czoJSVNBOiAgMHgzMDAsIDB4MjAwOworCQkJRUlTQTogMHgwYzAwCQkpCisKK2R1bW15LmM6CisJTm8gb3B0aW9ucworCitlMjEwMC5jOgorCWlvID0gMAkJKEl0IHdpbGwgY29tcGxhaW4gaWYgeW91IGRvbid0IHN1cHBseSBhbiAiaW89MHhOTk4iKQorCWlycSA9IDAJCShJUlEgc29mdHdhcmUgc2VsZWN0ZWQgYnkgZHJpdmVyKQorCW1lbSA9IDAJCShPdmVycmlkZSBkZWZhdWx0IHNoYXJlZCBtZW1vcnkgc3RhcnQgb2YgMHhkMDAwMCkKKwl4Y3ZyID0gMAkoVXNlIHhjdnI9MSB0byBzZWxlY3QgZXh0ZXJuYWwgdHJhbnNjZWl2ZXIuKQorCShQcm9iZXMgcG9ydHM6IDB4MzAwLCAweDI4MCwgMHgzODAsIDB4MjIwKQorCitlZXByby5jOgorCWlvID0gMHgyMDAKKwlpcnEgPSAwCisJKFByb2JlcyBwb3J0czogMHgyMDAsIDB4MjQwLCAweDI4MCwgMHgyQzAsIDB4MzAwLCAweDMyMCwgMHgzNDAsIDB4MzYwKQorCitlZXhwcmVzcy5jOgorCWlvID0gMHgzMDAKKwlpcnEgPSAwCQkoSVJRIHZhbHVlIHJlYWQgZnJvbSBFRVBST00pCisJKFByb2JlcyBwb3J0czogMHgzMDAsIDB4MjcwLCAweDMyMCwgMHgzNDApCisKK2VxbC5jOgorCShObyBwYXJhbWV0ZXJzKQorCitld3JrMy5jOgorCWlvID0gMHgzMDAKKwlpcnEgPSA1CisJKFdpdGggbW9kdWxlIG5vIGF1dG9wcm9iaW5nIQorCSBPbiBFSVNBLWJ1cyBkb2VzIEVJU0EgcHJvYmluZy4KKwkgU3RhdGljIGxpbmthZ2UgcHJvYmVzIHBvcnRzIG9uIElTQSBidXM6CisJCTB4MTAwLCAweDEyMCwgMHgxNDAsIDB4MTYwLCAweDE4MCwgMHgxQTAsIDB4MUMwLAorCQkweDIwMCwgMHgyMjAsIDB4MjQwLCAweDI2MCwgMHgyODAsIDB4MkEwLCAweDJDMCwgMHgyRTAsCisJCTB4MzAwLCAgICAgICAgMHgzNDAsIDB4MzYwLCAweDM4MCwgMHgzQTAsIDB4M0MwKQorCitocC1wbHVzLmM6CisJaW8gPSAwCQkoSXQgd2lsbCBjb21wbGFpbiBpZiB5b3UgZG9uJ3Qgc3VwcGx5IGFuICJpbz0weE5OTiIpCisJaXJxID0gMAkJKElSUSByZWFkIGZyb20gY29uZmlndXJhdGlvbiByZWdpc3RlcikKKwkoUHJvYmVzIHBvcnRzOiAweDIwMCwgMHgyNDAsIDB4MjgwLCAweDJDMCwgMHgzMDAsIDB4MzIwLCAweDM0MCkKKworaHAuYzoKKwlpbyA9IDAJCShJdCB3aWxsIGNvbXBsYWluIGlmIHlvdSBkb24ndCBzdXBwbHkgYW4gImlvPTB4Tk5OIikKKwlpcnEgPSAwCQkoSVJRIHNvZnR3YXJlIHNlbGVjdGVkIGJ5IGRyaXZlciB1c2luZyBhdXRvSVJRKQorCShQcm9iZXMgcG9ydHM6IDB4MzAwLCAweDMyMCwgMHgzNDAsIDB4MjgwLCAweDJDMCwgMHgyMDAsIDB4MjQwKQorCitocDEwMC5jOgorCWhwMTAwX3BvcnQgPSAwIChJTy1iYXNlIGFkZHJlc3MpCisJKERvZXMgRUlTQS1wcm9iaW5nLCBpZiBvbiBFSVNBLXNsb3Q7CisJIE9uIElTQS1idXMgcHJvYmVzIGFsbCBwb3J0cyBmcm9tIDB4MTAwIHRocnUgdG8gMHgzRTAKKwkgaW4gaW5jcmVtZW50cyBvZiAweDAyMCkKKworaHlkcmEuYzoKKwlTaW5jZSB0aGlzIGlzIGEgWm9ycm8gYm9hcmQsIGl0IHN1cHBvcnRzIGZ1bGwgYXV0b3Byb2JpbmcsIGV2ZW4gZm9yCisJbXVsdGlwbGUgYm9hcmRzLiAobTY4ay9BbWlnYSkKKworaWJtdHIuYzoKKwlpbyA9IDB4YTIwLCAweGEyNCAoYXV0b3Byb2JlZCBieSBkZWZhdWx0KQorCWlycSA9IDAgKGRyaXZlciBjYW5ub3Qgc2VsZWN0IGlycSAtIHJlYWQgZnJvbSBoYXJkd2FyZSkKKwltZW0gPSAwIChzaGFyZWQgbWVtb3J5IGJhc2Ugc2V0IGF0IDB4ZDAwMDAgYW5kIG5vdCB5ZXQgCisJICAgICAgICAgYWJsZSB0byBvdmVycmlkZSB0aHJ1IG1lbT0gcGFyYW1ldGVyLikKKworbGFuY2UuYzogKk5vdCBtb2R1bGFyaXplZCoKKwkoUENJLCBhbmQgSVNBIHByb2Jpbmc7ICJDT05GSUdfUENJIiBuZWVkZWQgZm9yIFBDSSBzdXBwb3J0KQorCShQcm9iZXMgSVNBIHBvcnRzOiAweDMwMCwgMHgzMjAsIDB4MzQwLCAweDM2MCkKKworbG9vcGJhY2suYzogKlN0YXRpYyBrZXJuZWwgY29tcG9uZW50KgorCituZS5jOgorCWlvID0gMAkJKEV4cGxpY2l0bHkgKnJlcXVpcmVzKiBhbiAiaW89MHhOTk4iIHZhbHVlKQorCWlycSA9IDAJCShUcmllcyB0byBkZXRlcm1pbmUgY29uZmlndXJlZCBJUlEgdmlhIGF1dG9JUlEpCisJKFByb2JlcyBwb3J0czogMHgzMDAsIDB4MjgwLCAweDMyMCwgMHgzNDAsIDB4MzYwKQorCituZXRfaW5pdC5jOiAqU3RhdGljIGtlcm5lbCBjb21wb25lbnQqCisKK25pNTIuYzogKk5vdCBtb2R1bGFyaXplZCoKKwkoUHJvYmVzIHBvcnRzOgkweDMwMCwgMHgyODAsIDB4MzYwLCAweDMyMCwgMHgzNDAKKwkJbWVtczoJMHhEMDAwMCwgMHhEMjAwMCwgMHhDODAwMCwgMHhDQTAwMCwKKwkJCTB4RDQwMDAsIDB4RDYwMDAsIDB4RDgwMDAgKQorCituaTY1LmM6ICpOb3QgbW9kdWxhcml6ZWQqICAqKjE2TUIgTUVNT1JZIEJBUlJJRVIgQlVHKioKKwkoUHJvYmVzIHBvcnRzOgkweDMwMCwgMHgzMjAsIDB4MzQwLCAweDM2MCkKKworcGkyLmM6CSpOb3QgbW9kdWxhcml6ZWQqICh3ZWxsLCBOT04tU1RBTkRBUkQgbW9kdWxhcml6YXRpb24hKQorCU9ubHkgb25lIGNhcmQgc3VwcG9ydGVkIGF0IHRoaXMgdGltZS4KKwkoUHJvYmVzIHBvcnRzOiAweDM4MCwgMHgzMDAsIDB4MzIwLCAweDM0MCwgMHgzNjAsIDB4M0EwKQorCitwbGlwLmM6CisJaW8gPSAwCisJaXJxID0gMAkJKGJ5IGRlZmF1bHQsIHVzZXMgSVJRIDUgZm9yIHBvcnQgYXQgMHgzYmMsIElSUSA3CisJCQlmb3IgcG9ydCBhdCAweDM3OCwgYW5kIElSUSAyIGZvciBwb3J0IGF0IDB4Mjc4KQorCShQcm9iZXMgcG9ydHM6IDB4Mjc4LCAweDM3OCwgMHgzYmMpCisKK3BwcC5jOgorCU5vIG9wdGlvbnMgKHBwcC0yLjIrIGhhcyBzb21lLCB0aGlzIGlzIGJhc2VkIG9uIG5vbi1keW5hbWljCisJdmVyc2lvbiBmcm9tIHBwcC0yLjEuMmQpCisKK3NlZXE4MDA1LmM6ICpOb3QgbW9kdWxhcml6ZWQqCisJKFByb2JlcyBwb3J0czogMHgzMDAsIDB4MzIwLCAweDM0MCwgMHgzNjApCisKK3NrX2cxNi5jOiAqTm90IG1vZHVsYXJpemVkKgorCShQcm9iZXMgcG9ydHM6IDB4MTAwLCAweDE4MCwgMHgyMDgsIDB4MjIwbSAweDI4OCwgMHgzMjAsIDB4MzI4LCAweDM5MCkKKworc2tlbGV0b24uYzogKlNrZWxldG9uKgorCitzbGhjLmM6CisJTm8gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzCisKK3NsaXAuYzoKKwlzbGlwX21heGRldiA9IDI1NiAoZGVmYXVsdCB2YWx1ZSBmcm9tIFNMX05SVU5JVCBvbiBzbGlwLmgpCisKKworc21jLXVsdHJhLmM6CisJaW8gPSAwCQkoSXQgd2lsbCBjb21wbGFpbiBpZiB5b3UgZG9uJ3Qgc3VwcGx5IGFuICJpbz0weE5OTiIpCisJaXJxID0gMAkJKElSUSB2YWwuIHJlYWQgZnJvbSBFRVBST00pCisJKFByb2JlcyBwb3J0czoJMHgyMDAsIDB4MjIwLCAweDI0MCwgMHgyODAsIDB4MzAwLCAweDM0MCwgMHgzODApCisKK3R1bGlwLmM6ICpQYXJ0aWFsIG1vZHVsYXJpemF0aW9uKgorCShpbml0LXRpbWUgbWVtb3J5IGFsbG9jYXRpb24gbWFrZXMgcHJvYmxlbXMuLikKKwordHVubmVsLmM6CisJTm8gaW5zbW9kIHBhcmFtZXRlcnMKKword2F2ZWxhbi5jOgorCWlvID0gMHgzOTAJKFNldHRhYmxlLCBidXQgY2hhbmdlIG5vdCByZWNvbW1lbmRlZCkKKwlpcnEgPSAwCQkoTm90IGhvbm91cmVkLCBpZiBjaGFuZ2VkLi4pCisKK3dkLmM6CisJaW8gPSAwCQkoSXQgd2lsbCBjb21wbGFpbiBpZiB5b3UgZG9uJ3Qgc3VwcGx5IGFuICJpbz0weE5OTiIpCisJaXJxID0gMAkJKElSUSB2YWwuIHJlYWQgZnJvbSBFRVBST00sIGFuY2llbnQgY2FyZHMgdXNlIGF1dG9JUlEpCisJbWVtID0gMAkJKEZvcmNlIHNoYXJlZC1tZW1vcnkgb24gYWRkcmVzcyAweEM4MDAwLCBvciB3aGF0ZXZlci4uKQorCW1lbV9lbmQgPSAwCShGb3JjZSBub24tc3RkLiBtZW0uIHNpemUgdmlhIHN1cHBseWluZyBtZW1fZW5kIHZhbC4pCisJCQkoZWcuIGZvciAzMmsgV0Q4MDAzRUJULCB1c2UgbWVtPTB4ZDAwMDAgbWVtX2VuZD0weGQ4MDAwKQorCShQcm9iZXMgcG9ydHM6CTB4MzAwLCAweDI4MCwgMHgzODAsIDB4MjQwKQorCit6bmV0LmM6ICpOb3QgbW9kdWxhcml6ZWQqCisJKE9ubHkgb25lIGRldmljZSBvbiAgWmVuaXRoIFotTm90ZSAobm90ZWJvb2s/KSBzeXN0ZW1zLAorCSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZyb20gKEVFKVBST00pCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM2MThmYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRjb25zb2xlLnR4dApAQCAtMCwwICsxLDU3IEBACisKK3N0YXJ0ZWQgYnkgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+LCAyMDAxLjA5LjE3CisyLjYgcG9ydCBhbmQgbmV0cG9sbCBhcGkgYnkgTWF0dCBNYWNrYWxsIDxtcG1Ac2VsZW5pYy5jb20+LCBTZXAgOSAyMDAzCisKK1BsZWFzZSBzZW5kIGJ1ZyByZXBvcnRzIHRvIE1hdHQgTWFja2FsbCA8bXBtQHNlbGVuaWMuY29tPgorCitUaGlzIG1vZHVsZSBsb2dzIGtlcm5lbCBwcmludGsgbWVzc2FnZXMgb3ZlciBVRFAgYWxsb3dpbmcgZGVidWdnaW5nIG9mCitwcm9ibGVtIHdoZXJlIGRpc2sgbG9nZ2luZyBmYWlscyBhbmQgc2VyaWFsIGNvbnNvbGVzIGFyZSBpbXByYWN0aWNhbC4KKworSXQgY2FuIGJlIHVzZWQgZWl0aGVyIGJ1aWx0LWluIG9yIGFzIGEgbW9kdWxlLiBBcyBhIGJ1aWx0LWluLAorbmV0Y29uc29sZSBpbml0aWFsaXplcyBpbW1lZGlhdGVseSBhZnRlciBOSUMgY2FyZHMgYW5kIHdpbGwgYnJpbmcgdXAKK3RoZSBzcGVjaWZpZWQgaW50ZXJmYWNlIGFzIHNvb24gYXMgcG9zc2libGUuIFdoaWxlIHRoaXMgZG9lc24ndCBhbGxvdworY2FwdHVyZSBvZiBlYXJseSBrZXJuZWwgcGFuaWNzLCBpdCBkb2VzIGNhcHR1cmUgbW9zdCBvZiB0aGUgYm9vdAorcHJvY2Vzcy4KKworSXQgdGFrZXMgYSBzdHJpbmcgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgIm5ldGNvbnNvbGUiIGluIHRoZQorZm9sbG93aW5nIGZvcm1hdDoKKworIG5ldGNvbnNvbGU9W3NyYy1wb3J0XUBbc3JjLWlwXS9bPGRldj5dLFt0Z3QtcG9ydF1APHRndC1pcD4vW3RndC1tYWNhZGRyXQorCisgICB3aGVyZQorICAgICAgICBzcmMtcG9ydCAgICAgIHNvdXJjZSBmb3IgVURQIHBhY2tldHMgKGRlZmF1bHRzIHRvIDY2NjUpCisgICAgICAgIHNyYy1pcCAgICAgICAgc291cmNlIElQIHRvIHVzZSAoaW50ZXJmYWNlIGFkZHJlc3MpCisgICAgICAgIGRldiAgICAgICAgICAgbmV0d29yayBpbnRlcmZhY2UgKGV0aDApCisgICAgICAgIHRndC1wb3J0ICAgICAgcG9ydCBmb3IgbG9nZ2luZyBhZ2VudCAoNjY2NikKKyAgICAgICAgdGd0LWlwICAgICAgICBJUCBhZGRyZXNzIGZvciBsb2dnaW5nIGFnZW50CisgICAgICAgIHRndC1tYWNhZGRyICAgZXRoZXJuZXQgTUFDIGFkZHJlc3MgZm9yIGxvZ2dpbmcgYWdlbnQgKGJyb2FkY2FzdCkKKworRXhhbXBsZXM6CisKKyBsaW51eCBuZXRjb25zb2xlPTQ0NDRAMTAuMC4wLjEvZXRoMSw5MzUzQDEwLjAuMC4yLzEyOjM0OjU2Ojc4OjlhOmJjCisKKyAgb3IKKworIGluc21vZCBuZXRjb25zb2xlIG5ldGNvbnNvbGU9QC8sQDEwLjAuMC4yLworCitCdWlsdC1pbiBuZXRjb25zb2xlIHN0YXJ0cyBpbW1lZGlhdGVseSBhZnRlciB0aGUgVENQIHN0YWNrIGlzCitpbml0aWFsaXplZCBhbmQgYXR0ZW1wdHMgdG8gYnJpbmcgdXAgdGhlIHN1cHBsaWVkIGRldiBhdCB0aGUgc3VwcGxpZWQKK2FkZHJlc3MuCisKK1RoZSByZW1vdGUgaG9zdCBjYW4gcnVuIGVpdGhlciAnbmV0Y2F0IC11IC1sIC1wIDxwb3J0Picgb3Igc3lzbG9nZC4KKworV0FSTklORzogdGhlIGRlZmF1bHQgdGFyZ2V0IGV0aGVybmV0IHNldHRpbmcgdXNlcyB0aGUgYnJvYWRjYXN0CitldGhlcm5ldCBhZGRyZXNzIHRvIHNlbmQgcGFja2V0cywgd2hpY2ggY2FuIGNhdXNlIGluY3JlYXNlZCBsb2FkIG9uCitvdGhlciBzeXN0ZW1zIG9uIHRoZSBzYW1lIGV0aGVybmV0IHNlZ21lbnQuCisKK05PVEU6IHRoZSBuZXR3b3JrIGRldmljZSAoZXRoMSBpbiB0aGUgYWJvdmUgY2FzZSkgY2FuIHJ1biBhbnkga2luZAorb2Ygb3RoZXIgbmV0d29yayB0cmFmZmljLCBuZXRjb25zb2xlIGlzIG5vdCBpbnRydXNpdmUuIE5ldGNvbnNvbGUKK21pZ2h0IGNhdXNlIHNsaWdodCBkZWxheXMgaW4gb3RoZXIgdHJhZmZpYyBpZiB0aGUgdm9sdW1lIG9mIGtlcm5lbAorbWVzc2FnZXMgaXMgaGlnaCwgYnV0IHNob3VsZCBoYXZlIG5vIG90aGVyIGltcGFjdC4KKworTmV0Y29uc29sZSB3YXMgZGVzaWduZWQgdG8gYmUgYXMgaW5zdGFudGFuZW91cyBhcyBwb3NzaWJsZSwgdG8KK2VuYWJsZSB0aGUgbG9nZ2luZyBvZiBldmVuIHRoZSBtb3N0IGNyaXRpY2FsIGtlcm5lbCBidWdzLiBJdCB3b3JrcworZnJvbSBJUlEgY29udGV4dHMgYXMgd2VsbCwgYW5kIGRvZXMgbm90IGVuYWJsZSBpbnRlcnJ1cHRzIHdoaWxlCitzZW5kaW5nIHBhY2tldHMuIER1ZSB0byB0aGVzZSB1bmlxdWUgbmVlZHMsIGNvbmZpZ3VyYXRpb24gY2FuIG5vdAorYmUgbW9yZSBhdXRvbWF0aWMsIGFuZCBzb21lIGZ1bmRhbWVudGFsIGxpbWl0YXRpb25zIHdpbGwgcmVtYWluOgorb25seSBJUCBuZXR3b3JrcywgVURQIHBhY2tldHMgYW5kIGV0aGVybmV0IGRldmljZXMgYXJlIHN1cHBvcnRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRkZXZpY2VzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTA5ZjNhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGRldmljZXMudHh0CkBAIC0wLDAgKzEsNzUgQEAKKworTmV0d29yayBEZXZpY2VzLCB0aGUgS2VybmVsLCBhbmQgWW91IQorCisKK0ludHJvZHVjdGlvbgorPT09PT09PT09PT09CitUaGUgZm9sbG93aW5nIGlzIGEgcmFuZG9tIGNvbGxlY3Rpb24gb2YgZG9jdW1lbnRhdGlvbiByZWdhcmRpbmcKK25ldHdvcmsgZGV2aWNlcy4KKworc3RydWN0IG5ldF9kZXZpY2UgYWxsb2NhdGlvbiBydWxlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTmV0d29yayBkZXZpY2Ugc3RydWN0dXJlcyBuZWVkIHRvIHBlcnNpc3QgZXZlbiBhZnRlciBtb2R1bGUgaXMgdW5sb2FkZWQgYW5kCittdXN0IGJlIGFsbG9jYXRlZCB3aXRoIGttYWxsb2MuICBJZiBkZXZpY2UgaGFzIHJlZ2lzdGVyZWQgc3VjY2Vzc2Z1bGx5LAoraXQgd2lsbCBiZSBmcmVlZCBvbiBsYXN0IHVzZSBieSBmcmVlX25ldGRldi4gIFRoaXMgaXMgcmVxdWlyZWQgdG8gaGFuZGxlIHRoZQorcGF0aG9sb2dpYyBjYXNlIGNsZWFubHkgKGV4YW1wbGU6IHJtbW9kIG15ZHJpdmVyIDwvc3lzL2NsYXNzL25ldC9teWV0aC9tdHUgKQorCitUaGVyZSBhcmUgcm91dGluZXMgaW4gbmV0X2luaXQuYyB0byBoYW5kbGUgdGhlIGNvbW1vbiBjYXNlcyBvZgorYWxsb2NfZXRoZXJkZXYsIGFsbG9jX25ldGRldi4gIFRoZXNlIHJlc2VydmUgZXh0cmEgc3BhY2UgZm9yIGRyaXZlcgorcHJpdmF0ZSBkYXRhIHdoaWNoIGdldHMgZnJlZWQgd2hlbiB0aGUgbmV0d29yayBkZXZpY2UgaXMgZnJlZWQuIElmCitzZXBhcmF0ZWx5IGFsbG9jYXRlZCBkYXRhIGlzIGF0dGFjaGVkIHRvIHRoZSBuZXR3b3JrIGRldmljZQorKGRldi0+cHJpdikgdGhlbiBpdCBpcyB1cCB0byB0aGUgbW9kdWxlIGV4aXQgaGFuZGxlciB0byBmcmVlIHRoYXQuCisKKworc3RydWN0IG5ldF9kZXZpY2Ugc3luY2hyb25pemF0aW9uIHJ1bGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2Rldi0+b3BlbjoKKwlTeW5jaHJvbml6YXRpb246IHJ0bmxfbG9jaygpIHNlbWFwaG9yZS4KKwlDb250ZXh0OiBwcm9jZXNzCisKK2Rldi0+c3RvcDoKKwlTeW5jaHJvbml6YXRpb246IHJ0bmxfbG9jaygpIHNlbWFwaG9yZS4KKwlDb250ZXh0OiBwcm9jZXNzCisJTm90ZTE6IG5ldGlmX3J1bm5pbmcoKSBpcyBndWFyYW50ZWVkIGZhbHNlCisJTm90ZTI6IGRldi0+cG9sbCgpIGlzIGd1YXJhbnRlZWQgdG8gYmUgc3RvcHBlZAorCitkZXYtPmRvX2lvY3RsOgorCVN5bmNocm9uaXphdGlvbjogcnRubF9sb2NrKCkgc2VtYXBob3JlLgorCUNvbnRleHQ6IHByb2Nlc3MKKworZGV2LT5nZXRfc3RhdHM6CisJU3luY2hyb25pemF0aW9uOiBkZXZfYmFzZV9sb2NrIHJ3bG9jay4KKwlDb250ZXh0OiBub21pbmFsbHkgcHJvY2VzcywgYnV0IGRvbid0IHNsZWVwIGluc2lkZSBhbiByd2xvY2sKKworZGV2LT5oYXJkX3N0YXJ0X3htaXQ6CisJU3luY2hyb25pemF0aW9uOiBkZXYtPnhtaXRfbG9jayBzcGlubG9jay4KKwlXaGVuIHRoZSBkcml2ZXIgc2V0cyBORVRJRl9GX0xMVFggaW4gZGV2LT5mZWF0dXJlcyB0aGlzIHdpbGwgYmUKKwljYWxsZWQgd2l0aG91dCBob2xkaW5nIHhtaXRfbG9jay4gSW4gdGhpcyBjYXNlIHRoZSBkcml2ZXIgCisJaGFzIHRvIGxvY2sgYnkgaXRzZWxmIHdoZW4gbmVlZGVkLiBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgYSB0cnkgbG9jaworCWZvciB0aGlzIGFuZCByZXR1cm4gLTEgd2hlbiB0aGUgc3BpbiBsb2NrIGZhaWxzLiAKKwlUaGUgbG9ja2luZyB0aGVyZSBzaG91bGQgYWxzbyBwcm9wZXJseSBwcm90ZWN0IGFnYWluc3QgCisJc2V0X211bHRpY2FzdF9saXN0CisJQ29udGV4dDogQkhzIGRpc2FibGVkCisJTm90ZXM6IG5ldGlmX3F1ZXVlX3N0b3BwZWQoKSBpcyBndWFyYW50ZWVkIGZhbHNlCisJUmV0dXJuIGNvZGVzOiAKKwlvIE5FVERFVl9UWF9PSyBldmVyeXRoaW5nIG9rLiAKKwlvIE5FVERFVl9UWF9CVVNZIENhbm5vdCB0cmFuc21pdCBwYWNrZXQsIHRyeSBsYXRlciAKKwkgIFVzdWFsbHkgYSBidWcsIG1lYW5zIHF1ZXVlIHN0YXJ0L3N0b3AgZmxvdyBjb250cm9sIGlzIGJyb2tlbiBpbgorCSAgdGhlIGRyaXZlci4gTm90ZTogdGhlIGRyaXZlciBtdXN0IE5PVCBwdXQgdGhlIHNrYiBpbiBpdHMgRE1BIHJpbmcuCisJbyBORVRERVZfVFhfTE9DS0VEIExvY2tpbmcgZmFpbGVkLCBwbGVhc2UgcmV0cnkgcXVpY2tseS4KKwkgIE9ubHkgdmFsaWQgd2hlbiBORVRJRl9GX0xMVFggaXMgc2V0LgorCitkZXYtPnR4X3RpbWVvdXQ6CisJU3luY2hyb25pemF0aW9uOiBkZXYtPnhtaXRfbG9jayBzcGlubG9jay4KKwlDb250ZXh0OiBCSHMgZGlzYWJsZWQKKwlOb3RlczogbmV0aWZfcXVldWVfc3RvcHBlZCgpIGlzIGd1YXJhbnRlZWQgdHJ1ZQorCitkZXYtPnNldF9tdWx0aWNhc3RfbGlzdDoKKwlTeW5jaHJvbml6YXRpb246IGRldi0+eG1pdF9sb2NrIHNwaW5sb2NrLgorCUNvbnRleHQ6IEJIcyBkaXNhYmxlZAorCitkZXYtPnBvbGw6CisJU3luY2hyb25pemF0aW9uOiBfX0xJTktfU1RBVEVfUlhfU0NIRUQgYml0IGluIGRldi0+c3RhdGUuICBTZWUKKwkJZGV2X2Nsb3NlIGNvZGUgYW5kIGNvbW1lbnRzIGluIG5ldC9jb3JlL2Rldi5jIGZvciBtb3JlIGluZm8uCisJQ29udGV4dDogc29mdGlycQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0aWYtbXNnLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRpZi1tc2cudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YWQ0Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0aWYtbXNnLnR4dApAQCAtMCwwICsxLDc5IEBACisKK19fX19fX19fX19fX19fX18KK05FVElGIE1zZyBMZXZlbAorCitUaGUgZGVzaWduIG9mIHRoZSBuZXR3b3JrIGludGVyZmFjZSBtZXNzYWdlIGxldmVsIHNldHRpbmcuCisKK0hpc3RvcnkKKworIFRoZSBkZXNpZ24gb2YgdGhlIGRlYnVnZ2luZyBtZXNzYWdlIGludGVyZmFjZSB3YXMgZ3VpZGVkIGFuZAorIGNvbnN0cmFpbmVkIGJ5IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHByZXZpb3VzIHByYWN0aWNlLiAgSXQgaXMgdXNlZnVsCisgdG8gdW5kZXJzdGFuZCB0aGUgaGlzdG9yeSBhbmQgZXZvbHV0aW9uIGluIG9yZGVyIHRvIHVuZGVyc3RhbmQgY3VycmVudAorIHByYWN0aWNlIGFuZCByZWxhdGUgaXQgdG8gb2xkZXIgZHJpdmVyIHNvdXJjZSBjb2RlLgorCisgRnJvbSB0aGUgYmVnaW5uaW5nIG9mIExpbnV4LCBlYWNoIG5ldHdvcmsgZGV2aWNlIGRyaXZlciBoYXMgaGFkIGEgbG9jYWwKKyBpbnRlZ2VyIHZhcmlhYmxlIHRoYXQgY29udHJvbHMgdGhlIGRlYnVnIG1lc3NhZ2UgbGV2ZWwuICBUaGUgbWVzc2FnZQorIGxldmVsIHJhbmdlZCBmcm9tIDAgdG8gNywgYW5kIG1vbm90b25pY2FsbHkgaW5jcmVhc2VkIGluIHZlcmJvc2l0eS4KKworIFRoZSBtZXNzYWdlIGxldmVsIHdhcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgcGFzdCBsZXZlbCAzLCBidXQgd2VyZQorIGFsd2F5cyBpbXBsZW1lbnRlZCB3aXRoaW4gKy0xIG9mIHRoZSBzcGVjaWZpZWQgbGV2ZWwuICBEcml2ZXJzIHRlbmRlZAorIHRvIHNoZWQgdGhlIG1vcmUgdmVyYm9zZSBsZXZlbCBtZXNzYWdlcyBhcyB0aGV5IG1hdHVyZWQuCisgICAgMCAgTWluaW1hbCBtZXNzYWdlcywgb25seSBlc3NlbnRpYWwgaW5mb3JtYXRpb24gb24gZmF0YWwgZXJyb3JzLgorICAgIDEgIFN0YW5kYXJkIG1lc3NhZ2VzLCBpbml0aWFsaXphdGlvbiBzdGF0dXMuICBObyBydW4tdGltZSBtZXNzYWdlcworICAgIDIgIFNwZWNpYWwgbWVkaWEgc2VsZWN0aW9uIG1lc3NhZ2VzLCBnZW5lcmFsbHkgdGltZXItZHJpdmVyLgorICAgIDMgIEludGVyZmFjZSBzdGFydHMgYW5kIHN0b3BzLCBpbmNsdWRpbmcgbm9ybWFsIHN0YXR1cyBtZXNzYWdlcworICAgIDQgIFR4IGFuZCBSeCBmcmFtZSBlcnJvciBtZXNzYWdlcywgYW5kIGFibm9ybWFsIGRyaXZlciBvcGVyYXRpb24KKyAgICA1ICBUeCBwYWNrZXQgcXVldWUgaW5mb3JtYXRpb24sIGludGVycnVwdCBldmVudHMuCisgICAgNiAgU3RhdHVzIG9uIGVhY2ggY29tcGxldGVkIFR4IHBhY2tldCBhbmQgcmVjZWl2ZWQgUnggcGFja2V0cworICAgIDcgIEluaXRpYWwgY29udGVudHMgb2YgVHggYW5kIFJ4IHBhY2tldHMKKworIEluaXRpYWxseSB0aGlzIG1lc3NhZ2UgbGV2ZWwgdmFyaWFibGUgd2FzIHVuaXF1ZWx5IG5hbWVkIGluIGVhY2ggZHJpdmVyCisgZS5nLiAibGFuY2VfZGVidWciLCBzbyB0aGF0IGEga2VybmVsIHN5bWJvbGljIGRlYnVnZ2VyIGNvdWxkIGxvY2F0ZSBhbmQKKyBtb2RpZnkgdGhlIHNldHRpbmcuICBXaGVuIGtlcm5lbCBtb2R1bGVzIGJlY2FtZSBjb21tb24sIHRoZSB2YXJpYWJsZXMKKyB3ZXJlIGNvbnNpc3RlbnRseSByZW5hbWVkIHRvICJkZWJ1ZyIgYW5kIGFsbG93ZWQgdG8gYmUgc2V0IGFzIGEgbW9kdWxlCisgcGFyYW1ldGVyLgorCisgVGhpcyBhcHByb2FjaCB3b3JrZWQgd2VsbC4gIEhvd2V2ZXIgdGhlcmUgaXMgYWx3YXlzIGEgZGVtYW5kIGZvcgorIGFkZGl0aW9uYWwgZmVhdHVyZXMuICBPdmVyIHRoZSB5ZWFycyB0aGUgZm9sbG93aW5nIGVtZXJnZWQgYXMKKyByZWFzb25hYmxlIGFuZCBlYXNpbHkgaW1wbGVtZW50ZWQgZW5oYW5jZW1lbnRzCisgICBVc2luZyBhbiBpb2N0bCgpIGNhbGwgdG8gbW9kaWZ5IHRoZSBsZXZlbC4KKyAgIFBlci1pbnRlcmZhY2UgcmF0aGVyIHRoYW4gcGVyLWRyaXZlciBtZXNzYWdlIGxldmVsIHNldHRpbmcuCisgICBNb3JlIHNlbGVjdGl2ZSBjb250cm9sIG92ZXIgdGhlIHR5cGUgb2YgbWVzc2FnZXMgZW1pdHRlZC4KKworIFRoZSBuZXRpZl9tc2cgcmVjb21tYW5kYXRpb24gYWRkcyB0aGVzZSBmZWF0dXJlcyB3aXRoIG9ubHkgYSBtaW5vcgorIGNvbXBsZXhpdHkgYW5kIGNvZGUgc2l6ZSBpbmNyZWFzZS4KKworIFRoZSByZWNvbW1lbmRhdGlvbiBpcyB0aGUgZm9sbG93aW5nIHBvaW50cworICAgIFJldGFpbmluZyB0aGUgcGVyLWRyaXZlciBpbnRlZ2VyIHZhcmlhYmxlICJkZWJ1ZyIgYXMgYSBtb2R1bGUKKyAgICBwYXJhbWV0ZXIgd2l0aCBhIGRlZmF1bHQgbGV2ZWwgb2YgJzEnLgorCisgICAgQWRkaW5nIGEgcGVyLWludGVyZmFjZSBwcml2YXRlIHZhcmlhYmxlIG5hbWVkICJtc2dfZW5hYmxlIi4gIFRoZQorICAgIHZhcmlhYmxlIGlzIGEgYml0IG1hcCByYXRoZXIgdGhhbiBhIGxldmVsLCBhbmQgaXMgaW5pdGlhbGl6ZWQgYXMKKyAgICAgICAxIDw8IGRlYnVnCisgICAgT3IgbW9yZSBwcmVjaXNlbHkKKyAgICAgICAgZGVidWcgPCAwID8gMCA6IDEgPDwgbWluKHNpemVvZihpbnQpLTEsIGRlYnVnKQorCisgICAgTWVzc2FnZXMgc2hvdWxkIGNoYW5nZXMgZnJvbQorICAgICAgaWYgKGRlYnVnID4gMSkKKyAgICAgICAgICAgcHJpbnRrKE1TR19ERUJVRyAiJXM6IC4uLgorICAgIHRvCisgICAgICBpZiAobnAtPm1zZ19lbmFibGUgJiBORVRJRl9NU0dfTElOSykKKyAgICAgICAgICAgcHJpbnRrKE1TR19ERUJVRyAiJXM6IC4uLgorCisKK1RoZSBzZXQgb2YgbWVzc2FnZSBsZXZlbHMgaXMgbmFtZWQKKyAgT2xkIGxldmVsICAgTmFtZSAgIEJpdCBwb3NpdGlvbgorICAgIDAgICAgTkVUSUZfTVNHX0RSVgkJMHgwMDAxCisgICAgMSAgICBORVRJRl9NU0dfUFJPQkUJMHgwMDAyCisgICAgMiAgICBORVRJRl9NU0dfTElOSwkJMHgwMDA0CisgICAgMiAgICBORVRJRl9NU0dfVElNRVIJMHgwMDA0CisgICAgMyAgICBORVRJRl9NU0dfSUZET1dOCTB4MDAwOAorICAgIDMgICAgTkVUSUZfTVNHX0lGVVAJCTB4MDAwOAorICAgIDQgICAgTkVUSUZfTVNHX1JYX0VSUgkweDAwMTAKKyAgICA0ICAgIE5FVElGX01TR19UWF9FUlIJMHgwMDEwCisgICAgNSAgICBORVRJRl9NU0dfVFhfUVVFVUVECTB4MDAyMAorICAgIDUgICAgTkVUSUZfTVNHX0lOVFIJCTB4MDAyMAorICAgIDYgICAgTkVUSUZfTVNHX1RYX0RPTkUJMHgwMDQwCisgICAgNiAgICBORVRJRl9NU0dfUlhfU1RBVFVTCTB4MDA0MAorICAgIDcgICAgTkVUSUZfTVNHX1BLVERBVEEJMHgwMDgwCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9vbHltcGljLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9vbHltcGljLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjVhOTQwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29seW1waWMudHh0CkBAIC0wLDAgKzEsNzkgQEAKKworSUJNIFBDSSBQaXQvUGl0LVBoeS9PbHltcGljIENISVBTRVQgQkFTRUQgVE9LRU4gUklORyBDQVJEUyBSRUFETUUKKworUmVsZWFzZSAwLjIuMCAtIFJlbGVhc2UgICAgCisJSnVuZSA4dGggMTk5OSBQZXRlciBEZSBTY2hyaWp2ZXIgJiBNaWtlIFBoaWxsaXBzCitSZWxlYXNlIDAuOS5DIC0gUmVsZWFzZQorCUFwcmlsIDE4dGggMjAwMSBNaWtlIFBoaWxsaXBzCisKK1RoYW5rczoKK0VyaWsgRGUgQ29jaywgQWRyaWFuIEJyaWRnZXR0IGFuZCBGcmFuayBGaWVuZSBmb3IgdGhlaXIgCitwYXRpZW5jZSBhbmQgdGVzdGluZy4KK0RvbmFsZCBDaGFtcGlvbiBmb3IgdGhlIGNhcmRidXMgc3VwcG9ydAorS3lsZSBMdWNrZSBmb3IgdGhlIGRtYSBhcGkgY2hhbmdlcy4gICAKK0pvbmF0aG9uIEJpdG5lciBmb3IgaGFyZHdhcmUgc3VwcG9ydC4gCitFdmVyeWJvZHkgb24gbGludXgtdHIgZm9yIHRoZWlyIGNvbnRpbnVlZCBzdXBwb3J0LiAgCisgCitPcHRpb25zOgorCitUaGUgZHJpdmVyIGFjY2VwdHMgZm91ciBvcHRpb25zOiByaW5nc3BlZWQsIHBrdF9idWZfc3osICAKK21lc3NhZ2VfbGV2ZWwgYW5kIG5ldHdvcmtfbW9uaXRvci4KKworVGhlc2Ugb3B0aW9ucyBjYW4gYmUgc3BlY2lmaWVkIGRpZmZlcmVudGx5IGZvciBlYWNoIGNhcmQgZm91bmQuIAorCityaW5nc3BlZWQ6ICBIYXMgb25lIG9mIHRocmVlIHNldHRpbmdzIDAgKGRlZmF1bHQpLCA0IG9yIDE2LiAgMCB3aWxsIAorbWFrZSB0aGUgY2FyZCBhdXRvc2Vuc2UgdGhlIHJpbmdzcGVlZCBhbmQgam9pbiBhdCB0aGUgYXBwcm9wcmlhdGUgc3BlZWQsIAordGhpcyB3aWxsIGJlIHRoZSBkZWZhdWx0IG9wdGlvbiBmb3IgbW9zdCBwZW9wbGUuICA0IG9yIDE2IGFsbG93IHlvdSB0byAKK2V4cGxpY2l0bHkgZm9yY2UgdGhlIGNhcmQgdG8gb3BlcmF0ZSBhdCBhIGNlcnRhaW4gc3BlZWQuICBUaGUgY2FyZCB3aWxsIGZhaWwgCitpZiB5b3UgdHJ5IHRvIGluc2VydCBpdCBhdCB0aGUgd3Jvbmcgc3BlZWQuIChBbHRob3VnaCBzb21lIGh1YnMgd2lsbCBhbGxvdyAKK3RoaXMgc28gYmUgKnZlcnkqIGNhcmVmdWwpLiAgVGhlIG1haW4gcHVycG9zZSBmb3IgZXhwbGljaXRseSBzZXR0aW5nIHRoZSByaW5nCitzcGVlZCBpcyBmb3Igd2hlbiB0aGUgY2FyZCBpcyBmaXJzdCBvbiB0aGUgcmluZy4gIEluIGF1dG9zZW5zZSBtb2RlLCBpZiB0aGUgY2FyZAorY2Fubm90IGRldGVjdCBhbnkgYWN0aXZlIG1vbml0b3JzIG9uIHRoZSByaW5nIGl0IHdpbGwgbm90IG9wZW4sIHNvIHlvdSBtdXN0IAorcmUtaW5pdCB0aGUgY2FyZCBhdCB0aGUgYXBwcm9wcmlhdGUgc3BlZWQuICBVbmZvcnR1bmF0ZWx5IGF0IHByZXNlbnQgdGhlIG9ubHkKK3dheSBvZiBkb2luZyB0aGlzIGlzIHJtbW9kIGFuZCBpbnNtb2Qgd2hpY2ggaXMgYSBiaXQgdG91Z2ggaWYgaXQgaXMgY29tcGlsZWQKK2luIHRoZSBrZXJuZWwuCisKK3BrdF9idWZfc3o6ICBUaGlzIGlzIHRoaXMgaW5pdGlhbCByZWNlaXZlIGJ1ZmZlciBhbGxvY2F0aW9uIHNpemUuICBUaGlzIHdpbGwKK2RlZmF1bHQgdG8gNDA5NiBpZiBubyB2YWx1ZSBpcyBlbnRlcmVkLiBZb3UgbWF5IGluY3JlYXNlIHBlcmZvcm1hbmNlIG9mIHRoZSAKK2RyaXZlciBieSBzZXR0aW5nIHRoaXMgdG8gYSB2YWx1ZSBsYXJnZXIgdGhhbiB0aGUgbmV0d29yayBwYWNrZXQgc2l6ZSwgYWx0aG91Z2gKK3RoZSBkcml2ZXIgbm93IHJlLXNpemVzIGJ1ZmZlcnMgYmFzZWQgb24gTVRVIHNldHRpbmdzIGFzIHdlbGwuIAorCittZXNzYWdlX2xldmVsOiBDb250cm9scyBsZXZlbCBvZiBtZXNzYWdlcyBjcmVhdGVkIGJ5IHRoZSBkcml2ZXIuIERlZmF1bHRzIHRvIDA6Cit3aGljaCBvbmx5IGRpc3BsYXlzIHN0YXJ0LXVwIGFuZCBjcml0aWNhbCBtZXNzYWdlcy4gIFByZXNlbnRseSBhbnkgbm9uLXplcm8gCit2YWx1ZSB3aWxsIGRpc3BsYXkgYWxsIHNvZnQgbWVzc2FnZXMgYXMgd2VsbC4gIE5CIFRoaXMgZG9lcyBub3QgdHVybiAKK2RlYnVnZ2luZyBtZXNzYWdlcyBvbiwgdGhhdCBtdXN0IGJlIGRvbmUgYnkgbW9kaWZpZWQgdGhlIHNvdXJjZSBjb2RlLgorCituZXR3b3JrX21vbml0b3I6IEFueSBub24temVybyB2YWx1ZSB3aWxsIHByb3ZpZGUgYSBxdWFzaSBuZXR3b3JrIG1vbml0b3JpbmcgCittb2RlLiAgQWxsIHVuZXhwZWN0ZWQgTUFDIGZyYW1lcyAoYmVhY29uaW5nIGV0Yy4pIHdpbGwgYmUgcmVjZWl2ZWQKK2J5IHRoZSBkcml2ZXIgYW5kIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBwcmludGVkLiAKK0Fsc28gYW4gZW50cnkgd2lsbCBiZSBhZGRlZCBpbiAgL3Byb2MvbmV0IGNhbGxlZCBvbHltcGljX3RyJWQsIHdoZXJlIHRyJWQKK2lzIHRoZSByZWdpc3RlcmVkIGRldmljZSBuYW1lLCBpLmUgdHIwLCB0cjEsIGV0Yy4gVGhpcyBkaXNwbGF5cyBsb3cKK2xldmVsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSByaW5nIGFuZCB0aGUgYWRhcHRlci4KK1RoaXMgZmVhdHVyZSBoYXMgYmVlbiBkZXNpZ25lZCBmb3IgbmV0d29yayBhZG1pbmlzdHJhdG9ycyB0byBhc3Npc3QgaW4gCit0aGUgZGlhZ25vc2lzIG9mIG5ldHdvcmsgLyByaW5nIHByb2JsZW1zLiAoVGhpcyB1c2VkIHRvIE9MWU1QSUNfTkVUV09SS19NT05JVE9SLAorYnV0IGhhcyBub3cgY2hhbmdlZCB0byBhbGxvdyBlYWNoIGFkYXB0ZXIgdG8gYmUgY29uZmlndXJlZCBkaWZmZXJlbnRseSBhbmQKK3RvIGFsbGV2aWF0ZSB0aGUgbmVjZXNzaXR5IHRvIHJlLWNvbXBpbGUgb2x5bXBpYyB0byB0dXJuIHRoZSBvcHRpb24gb24pLgorCitNdWx0aS1jYXJkOgorCitUaGUgZHJpdmVyIHdpbGwgZGV0ZWN0IG11bHRpcGxlIGNhcmRzIGFuZCB3aWxsIHdvcmsgd2l0aCBzaGFyZWQgaW50ZXJydXB0cywKK2VhY2ggY2FyZCBpcyBhc3NpZ25lZCB0aGUgbmV4dCB0b2tlbiByaW5nIGRldmljZSwgaS5lLiB0cjAgLCB0cjEsIHRyMi4gIFRoZSAKK2RyaXZlciBzaG91bGQgYWxzbyBoYXBwaWx5IHJlc2lkZSBpbiB0aGUgc3lzdGVtIHdpdGggb3RoZXIgZHJpdmVycy4gIEl0IGhhcyAKK2JlZW4gdGVzdGVkIHdpdGggaWJtdHIuYyBydW5uaW5nLCBhbmQgSSBwZXJzb25hbGx5IGhhdmUgaGFkIG9uZSBPbGljb20gUENJIAorY2FyZCBhbmQgdHdvIElCTSBvbHltcGljIGNhcmRzIChhbGwgb24gdGhlIHNhbWUgaW50ZXJydXB0KSwgYWxsIHJ1bm5pbmcKK3RvZ2V0aGVyLiAKKworVmFyaWFibGUgTVRVIHNpemU6CisKK1RoZSBkcml2ZXIgY2FuIGhhbmRsZSBhIE1UVSBzaXplIHVwdG8gZWl0aGVyIDQ1MDAgb3IgMTgwMDAgZGVwZW5kaW5nIHVwb24gCityaW5nIHNwZWVkLiAgVGhlIGRyaXZlciBhbHNvIGNoYW5nZXMgdGhlIHNpemUgb2YgdGhlIHJlY2VpdmUgYnVmZmVycyBhcyBwYXJ0CitvZiB0aGUgbXR1IHJlLXNpemluZywgc28gaWYgeW91IHNldCBtdHUgPSAxODAwMCwgeW91IHdpbGwgbmVlZCB0byBiZSBhYmxlCit0byBhbGxvY2F0ZSAxNiAqIChza19idWZmIHdpdGggMTgwMDAgYnVmZmVyIHNpemUpIGNhbGwgaXQgMTg1MDAgYnl0ZXMgcGVyIHJpbmcgCitwb3NpdGlvbiA9IDI5NiwwMDAgYnl0ZXMgb2YgbWVtb3J5IHNwYWNlLCBwbHVzIG9mIGNvdXJzZSBhbnl0aGluZyAKK25lY2Vzc2FyeSBmb3IgdGhlIHR4IHNrX2J1ZmYncy4gIFJlbWVtYmVyIHRoaXMgaXMgcGVyIGNhcmQsIHNvIGlmIHlvdSBhcmUKK2J1aWxkaW5nIHJvdXRlcnMsIGdhdGV3YXkncyBldGMsIHlvdSBjb3VsZCBzdGFydCB0byB1c2UgYSBsb3Qgb2YgbWVtb3J5CityZWFsIGZhc3QuCisKKworNi84Lzk5IFBldGVyIERlIFNjaHJpanZlciBhbmQgTWlrZSBQaGlsbGlwcworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGFja2V0X21tYXAudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BhY2tldF9tbWFwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDRjZjc4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BhY2tldF9tbWFwLnR4dApAQCAtMCwwICsxLDM5OSBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysgQUJTVFJBQ1QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIENPTkZJR19QQUNLRVRfTU1BUCBvcHRpb24gYXZhaWxhYmxlIHdpdGggdGhlIFBBQ0tFVAorc29ja2V0IGludGVyZmFjZSBvbiAyLjQgYW5kIDIuNiBrZXJuZWxzLiBUaGlzIHR5cGUgb2Ygc29ja2V0cyBpcyB1c2VkIGZvciAKK2NhcHR1cmUgbmV0d29yayB0cmFmZmljIHdpdGggdXRpbGl0aWVzIGxpa2UgdGNwZHVtcCBvciBhbnkgb3RoZXIgdGhhdCB1c2VzIAordGhlIGxpYnBjYXAgbGlicmFyeS4gCisKK1lvdSBjYW4gZmluZCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBkb2N1bWVudCBhdAorCisgICAgaHR0cDovL3B1c2EudXYuZXMvfnVsaXNzZXMvcGFja2V0X21tYXAvCisKK1BsZWFzZSBzZW5kIG1lIHlvdXIgY29tbWVudHMgdG8KKworICAgIFVsaXNzZXMgQWxvbnNvIENhbWFy8yA8dWFjYUBpLmhhdGUuc3BhbS5hbHVtbmkudXYuZXM+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysgV2h5IHVzZSBQQUNLRVRfTU1BUAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gTGludXggMi40LzIuNiBpZiBQQUNLRVRfTU1BUCBpcyBub3QgZW5hYmxlZCwgdGhlIGNhcHR1cmUgcHJvY2VzcyBpcyB2ZXJ5CitpbmVmZmljaWVudC4gSXQgdXNlcyB2ZXJ5IGxpbWl0ZWQgYnVmZmVycyBhbmQgcmVxdWlyZXMgb25lIHN5c3RlbSBjYWxsCit0byBjYXB0dXJlIGVhY2ggcGFja2V0LCBpdCByZXF1aXJlcyB0d28gaWYgeW91IHdhbnQgdG8gZ2V0IHBhY2tldCdzIAordGltZXN0YW1wIChsaWtlIGxpYnBjYXAgYWx3YXlzIGRvZXMpLgorCitJbiB0aGUgb3RoZXIgaGFuZCBQQUNLRVRfTU1BUCBpcyB2ZXJ5IGVmZmljaWVudC4gUEFDS0VUX01NQVAgcHJvdmlkZXMgYSBzaXplIAorY29uZmlndXJhYmxlIGNpcmN1bGFyIGJ1ZmZlciBtYXBwZWQgaW4gdXNlciBzcGFjZS4gVGhpcyB3YXkgcmVhZGluZyBwYWNrZXRzIGp1c3QgCituZWVkcyB0byB3YWl0IGZvciB0aGVtLCBtb3N0IG9mIHRoZSB0aW1lIHRoZXJlIGlzIG5vIG5lZWQgdG8gaXNzdWUgYSBzaW5nbGUgCitzeXN0ZW0gY2FsbC4gQnkgdXNpbmcgYSBzaGFyZWQgYnVmZmVyIGJldHdlZW4gdGhlIGtlcm5lbCBhbmQgdGhlIHVzZXIgCithbHNvIGhhcyB0aGUgYmVuZWZpdCBvZiBtaW5pbWl6aW5nIHBhY2tldCBjb3BpZXMuCisKK0l0J3MgZmluZSB0byB1c2UgUEFDS0VUX01NQVAgdG8gaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIGNhcHR1cmUgcHJvY2VzcywgCitidXQgaXQgaXNuJ3QgZXZlcnl0aGluZy4gQXQgbGVhc3QsIGlmIHlvdSBhcmUgY2FwdHVyaW5nIGF0IGhpZ2ggc3BlZWRzICh0aGlzIAoraXMgcmVsYXRpdmUgdG8gdGhlIGNwdSBzcGVlZCksIHlvdSBzaG91bGQgY2hlY2sgaWYgdGhlIGRldmljZSBkcml2ZXIgb2YgeW91ciAKK25ldHdvcmsgaW50ZXJmYWNlIGNhcmQgc3VwcG9ydHMgc29tZSBzb3J0IG9mIGludGVycnVwdCBsb2FkIG1pdGlnYXRpb24gb3IgCisoZXZlbiBiZXR0ZXIpIGlmIGl0IHN1cHBvcnRzIE5BUEksIGFsc28gbWFrZSBzdXJlIGl0IGlzIGVuYWJsZWQuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIEhvdyB0byB1c2UgQ09ORklHX1BBQ0tFVF9NTUFQCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGcm9tIHRoZSB1c2VyIHN0YW5kcG9pbnQsIHlvdSBzaG91bGQgdXNlIHRoZSBoaWdoZXIgbGV2ZWwgbGlicGNhcCBsaWJyYXJ5LCB3aWNoCitpcyBhIGRlIGZhY3RvIHN0YW5kYXJkLCBwb3J0YWJsZSBhY3Jvc3MgbmVhcmx5IGFsbCBvcGVyYXRpbmcgc3lzdGVtcworaW5jbHVkaW5nIFdpbjMyLiAKKworU2FpZCB0aGF0LCBhdCB0aW1lIG9mIHRoaXMgd3JpdGluZywgb2ZmaWNpYWwgbGlicGNhcCAwLjguMSBpcyBvdXQgYW5kIGRvZXNuJ3QgaW5jbHVkZQorc3VwcG9ydCBmb3IgUEFDS0VUX01NQVAsIGFuZCBhbHNvIHByb2JhYmx5IHRoZSBsaWJwY2FwIGluY2x1ZGVkIGluIHlvdXIgZGlzdHJpYnV0aW9uLiAKKworSSdtIGF3YXJlIG9mIHR3byBpbXBsZW1lbnRhdGlvbnMgb2YgUEFDS0VUX01NQVAgaW4gbGlicGNhcDoKKworICAgIGh0dHA6Ly9wdXNhLnV2LmVzL351bGlzc2VzL3BhY2tldF9tbWFwLyAgKGJ5IFNpbW9uIFBhdGFyaW4sIGJhc2VkIG9uIGxpYnBjYXAgMC42LjIpCisgICAgaHR0cDovL3B1YmxpYy5sYW5sLmdvdi9jcHcvICAgICAgICAgICAgICAoYnkgUGhpbCBXb29kLCBiYXNlZCBvbiBsYXN0ZXN0IGxpYnBjYXApCisKK1RoZSByZXN0IG9mIHRoaXMgZG9jdW1lbnQgaXMgaW50ZW5kZWQgZm9yIHBlb3BsZSB3aG8gd2FudCB0byB1bmRlcnN0YW5kCit0aGUgbG93IGxldmVsIGRldGFpbHMgb3Igd2FudCB0byBpbXByb3ZlIGxpYnBjYXAgYnkgaW5jbHVkaW5nIFBBQ0tFVF9NTUFQCitzdXBwb3J0LgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyBIb3cgdG8gdXNlIENPTkZJR19QQUNLRVRfTU1BUCBkaXJlY3RseQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRnJvbSB0aGUgc3lzdGVtIGNhbGxzIHN0YW5kIHBvaW50LCB0aGUgdXNlIG9mIFBBQ0tFVF9NTUFQIGludm9sdmVzCit0aGUgZm9sbG93aW5nIHByb2Nlc3M6CisKKworW3NldHVwXSAgICAgc29ja2V0KCkgLS0tLS0tLT4gY3JlYXRpb24gb2YgdGhlIGNhcHR1cmUgc29ja2V0CisgICAgICAgICAgICBzZXRzb2Nrb3B0KCkgLS0tPiBhbGxvY2F0aW9uIG9mIHRoZSBjaXJjdWxhciBidWZmZXIgKHJpbmcpCisgICAgICAgICAgICBtbWFwKCkgLS0tLS0tLS0tPiBtYXBpbmcgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXIgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyIHByb2Nlc3MKKworW2NhcHR1cmVdICAgcG9sbCgpIC0tLS0tLS0tLT4gdG8gd2FpdCBmb3IgaW5jb21pbmcgcGFja2V0cworCitbc2h1dGRvd25dICBjbG9zZSgpIC0tLS0tLS0tPiBkZXN0cnVjdGlvbiBvZiB0aGUgY2FwdHVyZSBzb2NrZXQgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWFsbG9jYXRpb24gb2YgYWxsIGFzc29jaWF0ZWQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXMuCisKKworc29ja2V0IGNyZWF0aW9uIGFuZCBkZXN0cnVjdGlvbiBpcyBzdHJhaWdodCBmb3J3YXJkLCBhbmQgaXMgZG9uZSAKK3RoZSBzYW1lIHdheSB3aXRoIG9yIHdpdGhvdXQgUEFDS0VUX01NQVA6CisKK2ludCBmZDsKKworZmQ9IHNvY2tldChQRl9QQUNLRVQsIG1vZGUsIGh0b25zKEVUSF9QX0FMTCkpCisKK3doZXJlIG1vZGUgaXMgU09DS19SQVcgZm9yIHRoZSByYXcgaW50ZXJmYWNlIHdlcmUgbGluayBsZXZlbAoraW5mb3JtYXRpb24gY2FuIGJlIGNhcHR1cmVkIG9yIFNPQ0tfREdSQU0gZm9yIHRoZSBjb29rZWQKK2ludGVyZmFjZSB3aGVyZSBsaW5rIGxldmVsIGluZm9ybWF0aW9uIGNhcHR1cmUgaXMgbm90IAorc3VwcG9ydGVkIGFuZCBhIGxpbmsgbGV2ZWwgcHNldWRvLWhlYWRlciBpcyBwcm92aWRlZCAKK2J5IHRoZSBrZXJuZWwuCisKK1RoZSBkZXN0cnVjdGlvbiBvZiB0aGUgc29ja2V0IGFuZCBhbGwgYXNzb2NpYXRlZCByZXNvdXJjZXMKK2lzIGRvbmUgYnkgYSBzaW1wbGUgY2FsbCB0byBjbG9zZShmZCkuCisKK05leHQgSSB3aWxsIGRlc2NyaWJlIFBBQ0tFVF9NTUFQIHNldHRpbmdzIGFuZCBpdCdzIGNvbnN0cmFpbnRzLAorYWxzbyB0aGUgbWFwaW5nIG9mIHRoZSBjaXJjdWxhciBidWZmZXIgaW4gdGhlIHVzZXIgcHJvY2VzcyBhbmQgCit0aGUgdXNlIG9mIHRoaXMgYnVmZmVyLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyBQQUNLRVRfTU1BUCBzZXR0aW5ncworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitUbyBzZXR1cCBQQUNLRVRfTU1BUCBmcm9tIHVzZXIgbGV2ZWwgY29kZSBpcyBkb25lIHdpdGggYSBjYWxsIGxpa2UKKworICAgICBzZXRzb2Nrb3B0KGZkLCBTT0xfUEFDS0VULCBQQUNLRVRfUlhfUklORywgKHZvaWQgKikgJnJlcSwgc2l6ZW9mKHJlcSkpCisKK1RoZSBtb3N0IHNpZ25pZmljYW50IGFyZ3VtZW50IGluIHRoZSBwcmV2aW91cyBjYWxsIGlzIHRoZSByZXEgcGFyYW1ldGVyLCAKK3RoaXMgcGFyYW1ldGVyIG11c3QgdG8gaGF2ZSB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZToKKworICAgIHN0cnVjdCB0cGFja2V0X3JlcQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50ICAgIHRwX2Jsb2NrX3NpemU7ICAvKiBNaW5pbWFsIHNpemUgb2YgY29udGlndW91cyBibG9jayAqLworICAgICAgICB1bnNpZ25lZCBpbnQgICAgdHBfYmxvY2tfbnI7ICAgIC8qIE51bWJlciBvZiBibG9ja3MgKi8KKyAgICAgICAgdW5zaWduZWQgaW50ICAgIHRwX2ZyYW1lX3NpemU7ICAvKiBTaXplIG9mIGZyYW1lICovCisgICAgICAgIHVuc2lnbmVkIGludCAgICB0cF9mcmFtZV9ucjsgICAgLyogVG90YWwgbnVtYmVyIG9mIGZyYW1lcyAqLworICAgIH07CisKK1RoaXMgc3RydWN0dXJlIGlzIGRlZmluZWQgaW4gL3Vzci9pbmNsdWRlL2xpbnV4L2lmX3BhY2tldC5oIGFuZCBlc3RhYmxpc2hlcyBhIAorY2lyY3VsYXIgYnVmZmVyIChyaW5nKSBvZiB1bnN3YXBwYWJsZSBtZW1vcnkgbWFwcGVkIGluIHRoZSBjYXB0dXJlIHByb2Nlc3MuIAorQmVpbmcgbWFwcGVkIGluIHRoZSBjYXB0dXJlIHByb2Nlc3MgYWxsb3dzIHJlYWRpbmcgdGhlIGNhcHR1cmVkIGZyYW1lcyBhbmQgCityZWxhdGVkIG1ldGEtaW5mb3JtYXRpb24gbGlrZSB0aW1lc3RhbXBzIHdpdGhvdXQgcmVxdWlyaW5nIGEgc3lzdGVtIGNhbGwuCisKK0NhcHR1cmVkIGZyYW1lcyBhcmUgZ3JvdXBlZCBpbiBibG9ja3MuIEVhY2ggYmxvY2sgaXMgYSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgCityZWdpb24gb2YgbWVtb3J5IGFuZCBob2xkcyB0cF9ibG9ja19zaXplL3RwX2ZyYW1lX3NpemUgZnJhbWVzLiBUaGUgdG90YWwgbnVtYmVyIAorb2YgYmxvY2tzIGlzIHRwX2Jsb2NrX25yLiBOb3RlIHRoYXQgdHBfZnJhbWVfbnIgaXMgYSByZWR1bmRhbnQgcGFyYW1ldGVyIGJlY2F1c2UKKworICAgIGZyYW1lc19wZXJfYmxvY2sgPSB0cF9ibG9ja19zaXplL3RwX2ZyYW1lX3NpemUKKworaW5kZWVkLCBwYWNrZXRfc2V0X3JpbmcgY2hlY2tzIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb24gaXMgdHJ1ZQorCisgICAgZnJhbWVzX3Blcl9ibG9jayAqIHRwX2Jsb2NrX25yID09IHRwX2ZyYW1lX25yCisKKworTGV0cyBzZWUgYW4gZXhhbXBsZSwgd2l0aCB0aGUgZm9sbG93aW5nIHZhbHVlczoKKworICAgICB0cF9ibG9ja19zaXplPSA0MDk2CisgICAgIHRwX2ZyYW1lX3NpemU9IDIwNDgKKyAgICAgdHBfYmxvY2tfbnIgID0gNAorICAgICB0cF9mcmFtZV9uciAgPSA4CisKK3dlIHdpbGwgZ2V0IHRoZSBmb2xsb3dpbmcgYnVmZmVyIHN0cnVjdHVyZToKKworICAgICAgICBibG9jayAjMSAgICAgICAgICAgICAgICAgYmxvY2sgIzIgICAgICAgICAKKystLS0tLS0tLS0rLS0tLS0tLS0tKyAgICArLS0tLS0tLS0tKy0tLS0tLS0tLSsgICAgCit8IGZyYW1lIDEgfCBmcmFtZSAyIHwgICAgfCBmcmFtZSAzIHwgZnJhbWUgNCB8ICAgIAorKy0tLS0tLS0tLSstLS0tLS0tLS0rICAgICstLS0tLS0tLS0rLS0tLS0tLS0tKyAgICAKKworICAgICAgICBibG9jayAjMyAgICAgICAgICAgICAgICAgYmxvY2sgIzQKKystLS0tLS0tLS0rLS0tLS0tLS0tKyAgICArLS0tLS0tLS0tKy0tLS0tLS0tLSsKK3wgZnJhbWUgNSB8IGZyYW1lIDYgfCAgICB8IGZyYW1lIDcgfCBmcmFtZSA4IHwKKystLS0tLS0tLS0rLS0tLS0tLS0tKyAgICArLS0tLS0tLS0tKy0tLS0tLS0tLSsKKworQSBmcmFtZSBjYW4gYmUgb2YgYW55IHNpemUgd2l0aCB0aGUgb25seSBjb25kaXRpb24gaXQgY2FuIGZpdCBpbiBhIGJsb2NrLiBBIGJsb2NrCitjYW4gb25seSBob2xkIGFuIGludGVnZXIgbnVtYmVyIG9mIGZyYW1lcywgb3IgaW4gb3RoZXIgd29yZHMsIGEgZnJhbWUgY2Fubm90IAorYmUgc3Bhd24gYWNjcm9zcyB0d28gYmxvY2tzIHNvIHRoZXJlIGFyZSBzb21lIGRhdGFpbHMgeW91IGhhdmUgdG8gdGFrZSBpbnRvIAorYWNjb3VudCB3aGVuIGNob29zaW5nIHRoZSBmcmFtZV9zaXplLiBTZWUgIk1hcGluZyBhbmQgdXNlIG9mIHRoZSBjaXJjdWxhciAKK2J1ZmZlciAocmluZykiLgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIFBBQ0tFVF9NTUFQIHNldHRpbmcgY29uc3RyYWludHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIGtlcm5lbCB2ZXJzaW9ucyBwcmlvciB0byAyLjQuMjYgKGZvciB0aGUgMi40IGJyYW5jaCkgYW5kIDIuNi41ICgyLjYgYnJhbmNoKSwKK3RoZSBQQUNLRVRfTU1BUCBidWZmZXIgY291bGQgaG9sZCBvbmx5IDMyNzY4IGZyYW1lcyBpbiBhIDMyIGJpdCBhcmNoaXRlY3R1cmUgb3IKKzE2Mzg0IGluIGEgNjQgYml0IGFyY2hpdGVjdHVyZS4gRm9yIGluZm9ybWF0aW9uIG9uIHRoZXNlIGtlcm5lbCB2ZXJzaW9ucworc2VlIGh0dHA6Ly9wdXNhLnV2LmVzL351bGlzc2VzL3BhY2tldF9tbWFwL3BhY2tldF9tbWFwLnByZS0yLjQuMjZfMi42LjUudHh0CisKKyBCbG9jayBzaXplIGxpbWl0CistLS0tLS0tLS0tLS0tLS0tLS0KKworQXMgc3RhdGVkIGVhcmxpZXIsIGVhY2ggYmxvY2sgaXMgYSBjb250aWd1b3VzIHBoeXNpY2FsIHJlZ2lvbiBvZiBtZW1vcnkuIFRoZXNlIAorbWVtb3J5IHJlZ2lvbnMgYXJlIGFsbG9jYXRlZCB3aXRoIGNhbGxzIHRvIHRoZSBfX2dldF9mcmVlX3BhZ2VzKCkgZnVuY3Rpb24uIEFzIAordGhlIG5hbWUgaW5kaWNhdGVzLCB0aGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBwYWdlcyBvZiBtZW1vcnksIGFuZCB0aGUgc2Vjb25kCithcmd1bWVudCBpcyAib3JkZXIiIG9yIGEgcG93ZXIgb2YgdHdvIG51bWJlciBvZiBwYWdlcywgdGhhdCBpcyAKKyhmb3IgUEFHRV9TSVpFID09IDQwOTYpIG9yZGVyPTAgPT0+IDQwOTYgYnl0ZXMsIG9yZGVyPTEgPT0+IDgxOTIgYnl0ZXMsIAorb3JkZXI9MiA9PT4gMTYzODQgYnl0ZXMsIGV0Yy4gVGhlIG1heGltdW0gc2l6ZSBvZiBhIAorcmVnaW9uIGFsbG9jYXRlZCBieSBfX2dldF9mcmVlX3BhZ2VzIGlzIGRldGVybWluZWQgYnkgdGhlIE1BWF9PUkRFUiBtYWNyby4gTW9yZSAKK3ByZWNpc2VseSB0aGUgbGltaXQgY2FuIGJlIGNhbGN1bGF0ZWQgYXM6CisKKyAgIFBBR0VfU0laRSA8PCBNQVhfT1JERVIKKworICAgSW4gYSBpMzg2IGFyY2hpdGVjdHVyZSBQQUdFX1NJWkUgaXMgNDA5NiBieXRlcyAKKyAgIEluIGEgMi40L2kzODYga2VybmVsIE1BWF9PUkRFUiBpcyAxMAorICAgSW4gYSAyLjYvaTM4NiBrZXJuZWwgTUFYX09SREVSIGlzIDExCisKK1NvIGdldF9mcmVlX3BhZ2VzIGNhbiBhbGxvY2F0ZSBhcyBtdWNoIGFzIDRNQiBvciA4TUIgaW4gYSAyLjQvMi42IGtlcm5lbCAKK3Jlc3BlY3RpdmVseSwgd2l0aCBhbiBpMzg2IGFyY2hpdGVjdHVyZS4KKworVXNlciBzcGFjZSBwcm9ncmFtcyBjYW4gaW5jbHVkZSAvdXNyL2luY2x1ZGUvc3lzL3VzZXIuaCBhbmQgCisvdXNyL2luY2x1ZGUvbGludXgvbW16b25lLmggdG8gZ2V0IFBBR0VfU0laRSBNQVhfT1JERVIgZGVjbGFyYXRpb25zLgorCitUaGUgcGFnZXNpemUgY2FuIGFsc28gYmUgZGV0ZXJtaW5lZCBkeW5hbWljYWxseSB3aXRoIHRoZSBnZXRwYWdlc2l6ZSAoMikgCitzeXN0ZW0gY2FsbC4gCisKKworIEJsb2NrIG51bWJlciBsaW1pdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gdW5kZXJzdGFuZCB0aGUgY29uc3RyYWludHMgb2YgUEFDS0VUX01NQVAsIHdlIGhhdmUgdG8gc2VlIHRoZSBzdHJ1Y3R1cmUgCit1c2VkIHRvIGhvbGQgdGhlIHBvaW50ZXJzIHRvIGVhY2ggYmxvY2suCisKK0N1cnJlbnRseSwgdGhpcyBzdHJ1Y3R1cmUgaXMgYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgdmVjdG9yIHdpdGgga21hbGxvYyAKK2NhbGxlZCBwZ192ZWMsIGl0cyBzaXplIGxpbWl0cyB0aGUgbnVtYmVyIG9mIGJsb2NrcyB0aGF0IGNhbiBiZSBhbGxvY2F0ZWQuCisKKyAgICArLS0tKy0tLSstLS0rLS0tKworICAgIHwgeCB8IHggfCB4IHwgeCB8CisgICAgKy0tLSstLS0rLS0tKy0tLSsKKyAgICAgIHwgICB8ICAgfCAgIHwKKyAgICAgIHwgICB8ICAgfCAgIHYKKyAgICAgIHwgICB8ICAgdiAgYmxvY2sgIzQKKyAgICAgIHwgICB2ICBibG9jayAjMworICAgICAgdiAgYmxvY2sgIzIKKyAgICAgYmxvY2sgIzEKKworCitrbWFsbG9jIGFsbG9jYXRlcyBhbnkgbnVtYmVyIG9mIGJ5dGVzIG9mIHBoaXNpY2FsbHkgY29udGlndW91cyBtZW1vcnkgZnJvbSAKK2EgcG9vbCBvZiBwcmUtZGV0ZXJtaW5lZCBzaXplcy4gVGhpcyBwb29sIG9mIG1lbW9yeSBpcyBtYW50YWluZWQgYnkgdGhlIHNsYWIgCithbGxvY2F0b3Igd2ljaCBpcyBhdCB0aGUgZW5kIHRoZSByZXNwb25zaWJsZSBmb3IgZG9pbmcgdGhlIGFsbG9jYXRpb24gYW5kIAoraGVuY2Ugd2ljaCBpbXBvc2VzIHRoZSBtYXhpbXVtIG1lbW9yeSB0aGF0IGttYWxsb2MgY2FuIGFsbG9jYXRlLiAKKworSW4gYSAyLjQvMi42IGtlcm5lbCBhbmQgdGhlIGkzODYgYXJjaGl0ZWN0dXJlLCB0aGUgbGltaXQgaXMgMTMxMDcyIGJ5dGVzLiBUaGUgCitwcmVkZXRlcm1pbmVkIHNpemVzIHRoYXQga21hbGxvYyB1c2VzIGNhbiBiZSBjaGVja2VkIGluIHRoZSAic2l6ZS08Ynl0ZXM+IiAKK2VudHJpZXMgb2YgL3Byb2Mvc2xhYmluZm8KKworSW4gYSAzMiBiaXQgYXJjaGl0ZWN0dXJlLCBwb2ludGVycyBhcmUgNCBieXRlcyBsb25nLCBzbyB0aGUgdG90YWwgbnVtYmVyIG9mIAorcG9pbnRlcnMgdG8gYmxvY2tzIGlzCisKKyAgICAgMTMxMDcyLzQgPSAzMjc2OCBibG9ja3MKKworCisgUEFDS0VUX01NQVAgYnVmZmVyIHNpemUgY2FsY3VsYXRvcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RlZmluaXRpb25zOgorCis8c2l6ZS1tYXg+ICAgIDogaXMgdGhlIG1heGltdW0gc2l6ZSBvZiBhbGxvY2FibGUgd2l0aCBrbWFsbG9jIChzZWUgL3Byb2Mvc2xhYmluZm8pCis8cG9pbnRlciBzaXplPjogZGVwZW5kcyBvbiB0aGUgYXJjaGl0ZWN0dXJlIC0tIHNpemVvZih2b2lkICopCis8cGFnZSBzaXplPiAgIDogZGVwZW5kcyBvbiB0aGUgYXJjaGl0ZWN0dXJlIC0tIFBBR0VfU0laRSBvciBnZXRwYWdlc2l6ZSAoMikKKzxtYXgtb3JkZXI+ICAgOiBpcyB0aGUgdmFsdWUgZGVmaW5lZCB3aXRoIE1BWF9PUkRFUgorPGZyYW1lIHNpemU+ICA6IGl0J3MgYW4gdXBwZXIgYm91bmQgb2YgZnJhbWUncyBjYXB0dXJlIHNpemUgKG1vcmUgb24gdGhpcyBsYXRlcikKKworZnJvbSB0aGVzZSBkZWZpbml0aW9ucyB3ZSB3aWxsIGRlcml2ZSAKKworCTxibG9jayBudW1iZXI+ID0gPHNpemUtbWF4Pi88cG9pbnRlciBzaXplPgorCTxibG9jayBzaXplPiA9IDxwYWdlc2l6ZT4gPDwgPG1heC1vcmRlcj4KKworc28sIHRoZSBtYXggYnVmZmVyIHNpemUgaXMKKworCTxibG9jayBudW1iZXI+ICogPGJsb2NrIHNpemU+CisKK2FuZCwgdGhlIG51bWJlciBvZiBmcmFtZXMgYmUKKworCTxibG9jayBudW1iZXI+ICogPGJsb2NrIHNpemU+IC8gPGZyYW1lIHNpemU+CisKK1N1cG9zc2UgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzLCB3aWNoIGFwcGx5IGZvciAyLjYga2VybmVsIGFuZCBhbgoraTM4NiBhcmNoaXRlY3R1cmU6CisKKwk8c2l6ZS1tYXg+ID0gMTMxMDcyIGJ5dGVzCisJPHBvaW50ZXIgc2l6ZT4gPSA0IGJ5dGVzCisJPHBhZ2VzaXplPiA9IDQwOTYgYnl0ZXMKKwk8bWF4LW9yZGVyPiA9IDExCisKK2FuZCBhIHZhbHVlIGZvciA8ZnJhbWUgc2l6ZT4gb2YgMjA0OCBieXRlYXMuIFRoZXNlIHBhcmFtZXRlcnMgd2lsbCB5aWVsZAorCisJPGJsb2NrIG51bWJlcj4gPSAxMzEwNzIvNCA9IDMyNzY4IGJsb2NrcworCTxibG9jayBzaXplPiA9IDQwOTYgPDwgMTEgPSA4IE1pQi4KKworYW5kIGhlbmNlIHRoZSBidWZmZXIgd2lsbCBoYXZlIGEgMjYyMTQ0IE1pQiBzaXplLiBTbyBpdCBjYW4gaG9sZCAKKzI2MjE0NCBNaUIgLyAyMDQ4IGJ5dGVzID0gMTM0MjE3NzI4IGZyYW1lcworCisKK0FjdHVhbGx5LCB0aGlzIGJ1ZmZlciBzaXplIGlzIG5vdCBwb3NzaWJsZSB3aXRoIGFuIGkzODYgYXJjaGl0ZWN0dXJlLiAKK1JlbWVtYmVyIHRoYXQgdGhlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgaW4ga2VybmVsIHNwYWNlLCBpbiB0aGUgY2FzZSBvZiAKK2FuIGkzODYga2VybmVsJ3MgbWVtb3J5IHNpemUgaXMgbGltaXRlZCB0byAxR2lCLgorCitBbGwgbWVtb3J5IGFsbG9jYXRpb25zIGFyZSBub3QgZnJlZWQgdW50aWwgdGhlIHNvY2tldCBpcyBjbG9zZWQuIFRoZSBtZW1vcnkgCithbGxvY2F0aW9ucyBhcmUgZG9uZSB3aXRoIEdGUF9LRVJORUwgcHJpb3JpdHksIHRoaXMgYmFzaWNhbGx5IG1lYW5zIHRoYXQgCit0aGUgYWxsb2NhdGlvbiBjYW4gd2FpdCBhbmQgc3dhcCBvdGhlciBwcm9jZXNzJyBtZW1vcnkgaW4gb3JkZXIgdG8gYWxsb2NhdGUgCit0aGUgbmVjZWNlc3NhcnkgbWVtb3J5LCBzbyBub3JtYWxseSBsaW1pdHMgY2FuIGJlIHJlYWNoZWQuCisKKyBPdGhlciBjb25zdHJhaW50cworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3UgY2hlY2sgdGhlIHNvdXJjZSBjb2RlIHlvdSB3aWxsIHNlZSB0aGF0IHdoYXQgSSBkcmF3IGhlcmUgYXMgYSBmcmFtZQoraXMgbm90IG9ubHkgdGhlIGxpbmsgbGV2ZWwgZnJhbWUuIEF0IHRoZSBiZWdpbmluZyBvZiBlYWNoIGZyYW1lIHRoZXJlIGlzIGEgCitoZWFkZXIgY2FsbGVkIHN0cnVjdCB0cGFja2V0X2hkciB1c2VkIGluIFBBQ0tFVF9NTUFQIHRvIGhvbGQgbGluayBsZXZlbCdzIGZyYW1lCittZXRhIGluZm9ybWF0aW9uIGxpa2UgdGltZXN0YW1wLiBTbyB3aGF0IHdlIGRyYXcgaGVyZSBhIGZyYW1lIGl0J3MgcmVhbGx5IAordGhlIGZvbGxvd2luZyAoZnJvbSBpbmNsdWRlL2xpbnV4L2lmX3BhY2tldC5oKToKKworLyoKKyAgIEZyYW1lIHN0cnVjdHVyZToKKworICAgLSBTdGFydC4gRnJhbWUgbXVzdCBiZSBhbGlnbmVkIHRvIFRQQUNLRVRfQUxJR05NRU5UPTE2CisgICAtIHN0cnVjdCB0cGFja2V0X2hkcgorICAgLSBwYWQgdG8gVFBBQ0tFVF9BTElHTk1FTlQ9MTYKKyAgIC0gc3RydWN0IHNvY2thZGRyX2xsCisgICAtIEdhcCwgY2hvc2VuIHNvIHRoYXQgcGFja2V0IGRhdGEgKFN0YXJ0K3RwX25ldCkgYWxpZ25lcyB0byAKKyAgICAgVFBBQ0tFVF9BTElHTk1FTlQ9MTYKKyAgIC0gU3RhcnQrdHBfbWFjOiBbIE9wdGlvbmFsIE1BQyBoZWFkZXIgXQorICAgLSBTdGFydCt0cF9uZXQ6IFBhY2tldCBkYXRhLCBhbGlnbmVkIHRvIFRQQUNLRVRfQUxJR05NRU5UPTE2LgorICAgLSBQYWQgdG8gYWxpZ24gdG8gVFBBQ0tFVF9BTElHTk1FTlQ9MTYKKyAqLworICAgICAgICAgICAKKyAKKyBUaGUgZm9sbG93aW5nIGFyZSBjb25kaXRpb25zIHRoYXQgYXJlIGNoZWNrZWQgaW4gcGFja2V0X3NldF9yaW5nCisKKyAgIHRwX2Jsb2NrX3NpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIFBBR0VfU0laRSAoMSkKKyAgIHRwX2ZyYW1lX3NpemUgbXVzdCBiZSBncmVhdGVyIHRoYW4gVFBBQ0tFVF9IRFJMRU4gKG9idmlvdXMpCisgICB0cF9mcmFtZV9zaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBUUEFDS0VUX0FMSUdOTUVOVAorICAgdHBfZnJhbWVfbnIgICBtdXN0IGJlIGV4YWN0bHkgZnJhbWVzX3Blcl9ibG9jayp0cF9ibG9ja19ucgorCitOb3RlIHRoYXQgdHBfYmxvY2tfc2l6ZSBzaG91bGQgYmUgY2hvb3NlZCB0byBiZSBhIHBvd2VyIG9mIHR3byBvciB0aGVyZSB3aWxsCitiZSBhIHdhc3RlIG9mIG1lbW9yeS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysgTWFwaW5nIGFuZCB1c2Ugb2YgdGhlIGNpcmN1bGFyIGJ1ZmZlciAocmluZykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBtYXBpbmcgb2YgdGhlIGJ1ZmZlciBpbiB0aGUgdXNlciBwcm9jZXNzIGlzIGRvbmUgd2l0aCB0aGUgY29udmVudGlvbmFsIAorbW1hcCBmdW5jdGlvbi4gRXZlbiB0aGUgY2lyY3VsYXIgYnVmZmVyIGlzIGNvbXBvdW5kIG9mIHNldmVyYWwgcGh5c2ljYWxseQorZGlzY29udGlndW91cyBibG9ja3Mgb2YgbWVtb3J5LCB0aGV5IGFyZSBjb250aWd1b3VzIHRvIHRoZSB1c2VyIHNwYWNlLCBoZW5jZQoranVzdCBvbmUgY2FsbCB0byBtbWFwIGlzIG5lZWRlZDoKKworICAgIG1tYXAoMCwgc2l6ZSwgUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkLCAwKTsKKworSWYgdHBfZnJhbWVfc2l6ZSBpcyBhIGRpdmlzb3Igb2YgdHBfYmxvY2tfc2l6ZSBmcmFtZXMgd2lsbCBiZSAKK2NvbnRpZ3Vvc2x5IHNwYWNlZCBieSB0cF9mcmFtZV9zaXplIGJ5dGVzLiBJZiBub3QsIGVhY2ggCit0cF9ibG9ja19zaXplL3RwX2ZyYW1lX3NpemUgZnJhbWVzIHRoZXJlIHdpbGwgYmUgYSBnYXAgYmV0d2VlbiAKK3RoZSBmcmFtZXMuIFRoaXMgaXMgYmVjYXVzZSBhIGZyYW1lIGNhbm5vdCBiZSBzcGF3biBhY3Jvc3MgdHdvCitibG9ja3MuIAorCitBdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggZnJhbWUgdGhlcmUgaXMgYW4gc3RhdHVzIGZpZWxkIChzZWUgCitzdHJ1Y3QgdHBhY2tldF9oZHIpLiBJZiB0aGlzIGZpZWxkIGlzIDAgbWVhbnMgdGhhdCB0aGUgZnJhbWUgaXMgcmVhZHkKK3RvIGJlIHVzZWQgZm9yIHRoZSBrZXJuZWwsIElmIG5vdCwgdGhlcmUgaXMgYSBmcmFtZSB0aGUgdXNlciBjYW4gcmVhZCAKK2FuZCB0aGUgZm9sbG93aW5nIGZsYWdzIGFwcGx5OgorCisgICAgIGZyb20gaW5jbHVkZS9saW51eC9pZl9wYWNrZXQuaAorCisgICAgICNkZWZpbmUgVFBfU1RBVFVTX0NPUFkgICAgICAgICAgMiAKKyAgICAgI2RlZmluZSBUUF9TVEFUVVNfTE9TSU5HICAgICAgICA0IAorICAgICAjZGVmaW5lIFRQX1NUQVRVU19DU1VNTk9UUkVBRFkgIDggCisKKworVFBfU1RBVFVTX0NPUFkgICAgICAgIDogVGhpcyBmbGFnIGluZGljYXRlcyB0aGF0IHRoZSBmcmFtZSAoYW5kIGFzc29jaWF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldGEgaW5mb3JtYXRpb24pIGhhcyBiZWVuIHRydW5jYXRlZCBiZWNhdXNlIGl0J3MgCisgICAgICAgICAgICAgICAgICAgICAgICBsYXJnZXIgdGhhbiB0cF9mcmFtZV9zaXplLiBUaGlzIHBhY2tldCBjYW4gYmUgCisgICAgICAgICAgICAgICAgICAgICAgICByZWFkIGVudGlyZWx5IHdpdGggcmVjdmZyb20oKS4KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgSW4gb3JkZXIgdG8gbWFrZSB0aGlzIHdvcmsgaXQgbXVzdCB0byBiZQorICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZCBwcmV2aW91c2x5IHdpdGggc2V0c29ja29wdCgpIGFuZCAKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBQQUNLRVRfQ09QWV9USFJFU0ggb3B0aW9uLiAKKworICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG51bWJlciBvZiBmcmFtZXMgdGhhbiBjYW4gYmUgYnVmZmVyZWQgdG8gCisgICAgICAgICAgICAgICAgICAgICAgICBiZSByZWFkIHdpdGggcmVjdmZyb20gaXMgbGltaXRlZCBsaWtlIGEgbm9ybWFsIHNvY2tldC4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0aGUgU09fUkNWQlVGIG9wdGlvbiBpbiB0aGUgc29ja2V0ICg3KSBtYW4gcGFnZS4KKworVFBfU1RBVFVTX0xPU0lORyAgICAgIDogaW5kaWNhdGVzIHRoZXJlIHdlcmUgcGFja2V0IGRyb3BzIGZyb20gbGFzdCB0aW1lIAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljcyB3aGVyZSBjaGVja2VkIHdpdGggZ2V0c29ja29wdCgpIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgdGhlIFBBQ0tFVF9TVEFUSVNUSUNTIG9wdGlvbi4KKworVFBfU1RBVFVTX0NTVU1OT1RSRUFEWTogY3VycmVudGx5IGl0J3MgdXNlZCBmb3Igb3V0Z29pbmcgSVAgcGFja2V0cyB3aWNoIAorICAgICAgICAgICAgICAgICAgICAgICAgaXQncyBjaGVja3N1bSB3aWxsIGJlIGRvbmUgaW4gaGFyZHdhcmUuIFNvIHdoaWxlIAorICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGluZyB0aGUgcGFja2V0IHdlIHNob3VsZCBub3QgdHJ5IHRvIGNoZWNrIHRoZSAKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrc3VtLiAKKworZm9yIGNvbnZlbmllbmNlIHRoZXJlIGFyZSBhbHNvIHRoZSBmb2xsb3dpbmcgZGVmaW5lczoKKworICAgICAjZGVmaW5lIFRQX1NUQVRVU19LRVJORUwgICAgICAgIDAKKyAgICAgI2RlZmluZSBUUF9TVEFUVVNfVVNFUiAgICAgICAgICAxCisKK1RoZSBrZXJuZWwgaW5pdGlhbGl6ZXMgYWxsIGZyYW1lcyB0byBUUF9TVEFUVVNfS0VSTkVMLCB3aGVuIHRoZSBrZXJuZWwKK3JlY2VpdmVzIGEgcGFja2V0IGl0IHB1dHMgaW4gdGhlIGJ1ZmZlciBhbmQgdXBkYXRlcyB0aGUgc3RhdHVzIHdpdGgKK2F0IGxlYXN0IHRoZSBUUF9TVEFUVVNfVVNFUiBmbGFnLiBUaGVuIHRoZSB1c2VyIGNhbiByZWFkIHRoZSBwYWNrZXQsCitvbmNlIHRoZSBwYWNrZXQgaXMgcmVhZCB0aGUgdXNlciBtdXN0IHplcm8gdGhlIHN0YXR1cyBmaWVsZCwgc28gdGhlIGtlcm5lbCAKK2NhbiB1c2UgYWdhaW4gdGhhdCBmcmFtZSBidWZmZXIuCisKK1RoZSB1c2VyIGNhbiB1c2UgcG9sbCAoYW55IG90aGVyIHZhcmlhbnQgc2hvdWxkIGFwcGx5IHRvbykgdG8gY2hlY2sgaWYgbmV3CitwYWNrZXRzIGFyZSBpbiB0aGUgcmluZzoKKworICAgIHN0cnVjdCBwb2xsZmQgcGZkOworCisgICAgcGZkLmZkID0gZmQ7CisgICAgcGZkLnJldmVudHMgPSAwOworICAgIHBmZC5ldmVudHMgPSBQT0xMSU58UE9MTFJETk9STXxQT0xMRVJSOworCisgICAgaWYgKHN0YXR1cyA9PSBUUF9TVEFUVVNfS0VSTkVMKQorICAgICAgICByZXR2YWwgPSBwb2xsKCZwZmQsIDEsIHRpbWVvdXQpOworCitJdCBkb2Vzbid0IGluY3VyIGluIGEgcmFjZSBjb25kaXRpb24gdG8gZmlyc3QgY2hlY2sgdGhlIHN0YXR1cyB2YWx1ZSBhbmQgCit0aGVuIHBvbGwgZm9yIGZyYW1lcy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysgVEhBTktTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgCisgICBKZXNzZSBCcmFuZGVidXJnLCBmb3IgZml4aW5nIG15IGdyYW1tYXRoaWNhbC9zcGVsbGluZyBlcnJvcnMKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BrdGdlbi50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGt0Z2VuLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzRiNGQwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BrdGdlbi50eHQKQEAgLTAsMCArMSwyMTQgQEAKKworCisgICAgICAgICAgICAgICAgICBIT1dUTyBmb3IgdGhlIGxpbnV4IHBhY2tldCBnZW5lcmF0b3IgCisgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRGF0ZTogMDQxMjIxCisKK0VuYWJsZSBDT05GSUdfTkVUX1BLVEdFTiB0byBjb21waWxlIGFuZCBidWlsZCBwa3RnZW4ubyBlaXRoZXIgaW4ga2VybmVsCitvciBhcyBtb2R1bGUuIE1vZHVsZSBpcyBwcmVmZXJyZWQuIGluc21vZCBwa3RnZW4gaWYgbmVlZGVkLiBPbmNlIHJ1bm5pbmcKK3BrdGdlbiBjcmVhdGVzIGEgdGhyZWFkIG9uIGVhY2ggQ1BVIHdoZXJlIGVhY2ggdGhyZWFkIGhhcyBhZmZpbnR5IGl0J3MgQ1BVLgorTW9uaXRvcmluZyBhbmQgY29udHJvbGxpbmcgaXMgZG9uZSB2aWEgL3Byb2MuIEVhc2llc3QgdG8gc2VsZWN0IGEgc3VpdGFibGUgCithIHNhbXBsZSBzY3JpcHQgYW5kIGNvbmZpZ3VyZS4KKworT24gYSBkdWFsIENQVToKKworcHMgYXV4IHwgZ3JlcCBwa3QKK3Jvb3QgICAgICAgMTI5ICAwLjMgIDAuMCAgICAgMCAgICAwID8gICAgICAgIFNXICAgIDIwMDMgNTIzOjIwIFtwa3RnZW4vMF0KK3Jvb3QgICAgICAgMTMwICAwLjMgIDAuMCAgICAgMCAgICAwID8gICAgICAgIFNXICAgIDIwMDMgNTA5OjUwIFtwa3RnZW4vMV0KKworCitGb3IgbW9udG9yaW5nIGFuZCBjb250cm9sIHBrdGdlbiBjcmVhdGVzOgorCS9wcm9jL25ldC9wa3RnZW4vcGdjdHJsCisJL3Byb2MvbmV0L3BrdGdlbi9rcGt0Z2VuZF9YCisgICAgICAgIC9wcm9jL25ldC9wa3RnZW4vZXRoWAorCisKK1ZpZXdpbmcgdGhyZWFkcworPT09PT09PT09PT09PT09CisvcHJvYy9uZXQvcGt0Z2VuL2twa3RnZW5kXzAgCitOYW1lOiBrcGt0Z2VuZF8wICBtYXhfYmVmb3JlX3NvZnRpcnE6IDEwMDAwCitSdW5uaW5nOiAKK1N0b3BwZWQ6IGV0aDEgCitSZXN1bHQ6IE9LOiBtYXhfYmVmb3JlX3NvZnRpcnE9MTAwMDAKKworTW9zdCBpbXBvcnRhbnQgdGhlIGRldmljZXMgYXNzaWdlbmQgdG8gdGhyZWFkLiBOb3RlISBBIGRldmljZSBjYW4gb25seSBiZWxvbmcgCit0byBvbmUgdGhyZWFkLgorCisKK1ZpZXdpbmcgZGV2aWNlcworPT09PT09PT09PT09PT09CisKK1Bhcm0gc2VjdGlvbiBob2xkcyBjb25maWd1cmVkIGluZm8uIEN1cnJlbnQgaG9sZCBydW5uaW5nIHN0YXRzLiAKK1Jlc3VsdCBpcyBwcmludGVkIGFmdGVyIHJ1biBvciBhZnRlciBpbnRlcnJ1cHRpb24uIEV4YW1wbGU6CisKKy9wcm9jL25ldC9wa3RnZW4vZXRoMSAgICAgICAKKworUGFyYW1zOiBjb3VudCAxMDAwMDAwMCAgbWluX3BrdF9zaXplOiA2MCAgbWF4X3BrdF9zaXplOiA2MAorICAgICBmcmFnczogMCAgZGVsYXk6IDAgIGNsb25lX3NrYjogMTAwMDAwMCAgaWZuYW1lOiBldGgxCisgICAgIGZsb3dzOiAwIGZsb3dsZW46IDAKKyAgICAgZHN0X21pbjogMTAuMTAuMTEuMiAgZHN0X21heDogCisgICAgIHNyY19taW46ICAgc3JjX21heDogCisgICAgIHNyY19tYWM6IDAwOjAwOjAwOjAwOjAwOjAwICBkc3RfbWFjOiAwMDowNDoyMzpBQzpGRDo4MgorICAgICB1ZHBfc3JjX21pbjogOSAgdWRwX3NyY19tYXg6IDkgIHVkcF9kc3RfbWluOiA5ICB1ZHBfZHN0X21heDogOQorICAgICBzcmNfbWFjX2NvdW50OiAwICBkc3RfbWFjX2NvdW50OiAwIAorICAgICBGbGFnczogCitDdXJyZW50OgorICAgICBwa3RzLXNvZmFyOiAxMDAwMDAwMCAgZXJyb3JzOiAzOTY2NAorICAgICBzdGFydGVkOiAxMTAzMDUzOTg2MjQ1MTg3dXMgIHN0b3BwZWQ6IDExMDMwNTM5OTkzNDYzMjl1cyBpZGxlOiA4ODA0MDF1cworICAgICBzZXFfbnVtOiAxMDAwMDAxMSAgY3VyX2RzdF9tYWNfb2Zmc2V0OiAwICBjdXJfc3JjX21hY19vZmZzZXQ6IDAKKyAgICAgY3VyX3NhZGRyOiAweDEwYTBhMGEgIGN1cl9kYWRkcjogMHgyMGIwYTBhCisgICAgIGN1cl91ZHBfZHN0OiA5ICBjdXJfdWRwX3NyYzogOQorICAgICBmbG93czogMAorUmVzdWx0OiBPSzogMTMxMDExNDIoYzEyMjIwNzQxK2Q4ODA0MDEpIHVzZWMsIDEwMDAwMDAwICg2MGJ5dGUsMGZyYWdzKQorICA3NjMyOTJwcHMgMzkwTWIvc2VjICgzOTA4MDU1MDRicHMpIGVycm9yczogMzk2NjQKKworQ29uZmd1cmluZyB0aHJlYWRzIGFuZCBkZXZpY2VzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoaXMgaXMgZG9uZSB2aWEgdGhlIC9wcm9jIGludGVyZmFjZSBlYXNpZXN0IGRvbmUgdmlhIHBnc2V0IGluIHRoZSBzY3JpcHRzCisKK0V4YW1wbGVzOgorCisgcGdzZXQgImNsb25lX3NrYiAxIiAgICAgc2V0cyB0aGUgbnVtYmVyIG9mIGNvcGllcyBvZiB0aGUgc2FtZSBwYWNrZXQKKyBwZ3NldCAiY2xvbmVfc2tiIDAiICAgICB1c2Ugc2luZ2xlIFNLQiBmb3IgYWxsIHRyYW5zbWl0cworIHBnc2V0ICJwa3Rfc2l6ZSA5MDE0IiAgIHNldHMgcGFja2V0IHNpemUgdG8gOTAxNAorIHBnc2V0ICJmcmFncyA1IiAgICAgICAgIHBhY2tldCB3aWxsIGNvbnNpc3Qgb2YgNSBmcmFnbWVudHMKKyBwZ3NldCAiY291bnQgMjAwMDAwIiAgICBzZXRzIG51bWJlciBvZiBwYWNrZXRzIHRvIHNlbmQsIHNldCB0byB6ZXJvCisgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGNvbnRpbmlvdXMgc2VuZHMgdW50aWxsIGV4cGxpY2l0bCBzdG9wcGVkLgorCisgcGdzZXQgImRlbGF5IDUwMDAiICAgICAgYWRkcyBkZWxheSB0byBoYXJkX3N0YXJ0X3htaXQoKS4gbmFub3NlY29uZHMKKworIHBnc2V0ICJkc3QgMTAuMC4wLjEiICAgIHNldHMgSVAgZGVzdGluYXRpb24gYWRkcmVzcworICAgICAgICAgICAgICAgICAgICAgICAgIChCRVdBUkUhIFRoaXMgZ2VuZXJhdG9yIGlzIHZlcnkgYWdncmVzc2l2ZSEpCisKKyBwZ3NldCAiZHN0X21pbiAxMC4wLjAuMSIgICAgICAgICAgICBTYW1lIGFzIGRzdAorIHBnc2V0ICJkc3RfbWF4IDEwLjAuMC4yNTQiICAgICAgICAgIFNldCB0aGUgbWF4aW11bSBkZXN0aW5hdGlvbiBJUC4KKyBwZ3NldCAic3JjX21pbiAxMC4wLjAuMSIgICAgICAgICAgICBTZXQgdGhlIG1pbmltdW0gKG9yIG9ubHkpIHNvdXJjZSBJUC4KKyBwZ3NldCAic3JjX21heCAxMC4wLjAuMjU0IiAgICAgICAgICBTZXQgdGhlIG1heGltdW0gc291cmNlIElQLgorIHBnc2V0ICJkc3Q2IGZlYzA6OjEiICAgICBJUFY2IGRlc3RpbmF0aW9uIGFkZHJlc3MKKyBwZ3NldCAic3JjNiBmZWMwOjoyIiAgICAgSVBWNiBzb3VyY2UgYWRkcmVzcworIHBnc2V0ICJkc3RtYWMgMDA6MDA6MDA6MDA6MDA6MDAiICAgIHNldHMgTUFDIGRlc3RpbmF0aW9uIGFkZHJlc3MKKyBwZ3NldCAic3JjbWFjIDAwOjAwOjAwOjAwOjAwOjAwIiAgICBzZXRzIE1BQyBzb3VyY2UgYWRkcmVzcworCisgcGdzZXQgInNyY19tYWNfY291bnQgMSIgU2V0cyB0aGUgbnVtYmVyIG9mIE1BQ3Mgd2UnbGwgcmFuZ2UgdGhyb3VnaC4gIAorICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSAnbWluaW11bScgTUFDIGlzIHdoYXQgeW91IHNldCB3aXRoIHNyY21hYy4KKworIHBnc2V0ICJkc3RfbWFjX2NvdW50IDEiIFNldHMgdGhlIG51bWJlciBvZiBNQUNzIHdlJ2xsIHJhbmdlIHRocm91Z2guCisgICAgICAgICAgICAgICAgICAgICAgICAgVGhlICdtaW5pbXVtJyBNQUMgaXMgd2hhdCB5b3Ugc2V0IHdpdGggZHN0bWFjLgorCisgcGdzZXQgImZsYWcgW25hbWVdIiAgICAgU2V0IGEgZmxhZyB0byBkZXRlcm1pbmUgYmVoYXZpb3VyLiAgQ3VycmVudCBmbGFncworICAgICAgICAgICAgICAgICAgICAgICAgIGFyZTogSVBTUkNfUk5EICNJUCBTb3VyY2UgaXMgcmFuZG9tIChiZXR3ZWVuIG1pbi9tYXgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBEU1RfUk5ELCBVRFBTUkNfUk5ELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVURQRFNUX1JORCwgTUFDU1JDX1JORCwgTUFDRFNUX1JORCAKKworIHBnc2V0ICJ1ZHBfc3JjX21pbiA5IiAgIHNldCBVRFAgc291cmNlIHBvcnQgbWluLCBJZiA8IHVkcF9zcmNfbWF4LCB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgY3ljbGUgdGhyb3VnaCB0aGUgcG9ydCByYW5nZS4KKworIHBnc2V0ICJ1ZHBfc3JjX21heCA5IiAgIHNldCBVRFAgc291cmNlIHBvcnQgbWF4LgorIHBnc2V0ICJ1ZHBfZHN0X21pbiA5IiAgIHNldCBVRFAgZGVzdGluYXRpb24gcG9ydCBtaW4sIElmIDwgdWRwX2RzdF9tYXgsIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICBjeWNsZSB0aHJvdWdoIHRoZSBwb3J0IHJhbmdlLgorIHBnc2V0ICJ1ZHBfZHN0X21heCA5IiAgIHNldCBVRFAgZGVzdGluYXRpb24gcG9ydCBtYXguCisKKyBwZ3NldCBzdG9wICAgIAkgICAgICAgICAgYWJvcnRzIGluamVjdGlvbi4gQWxzbywgXkMgYWJvcnRzIGdlbmVyYXRvci4KKworCitFeGFtcGxlIHNjcmlwdHMKKz09PT09PT09PT09PT09PQorCitBIGNvbGxlY3Rpb24gb2Ygc21hbGwgdHV0b3JpYWwgc2NyaXB0cyBmb3IgcGt0Z2VuIGlzIGluIGV4cGFtcGxlcyBkaXIuCisKK3BrdGdlbi5jb25mLTEtMSAgICAgICAgICAgICAgICAgICMgMSBDUFUgMSBkZXYgCitwa3RnZW4uY29uZi0xLTIgICAgICAgICAgICAgICAgICAjIDEgQ1BVIDIgZGV2Citwa3RnZW4uY29uZi0yLTEgICAgICAgICAgICAgICAgICAjIDIgQ1BVJ3MgMSBkZXYgCitwa3RnZW4uY29uZi0yLTIgICAgICAgICAgICAgICAgICAjIDIgQ1BVJ3MgMiBkZXYKK3BrdGdlbi5jb25mLTEtMS1yZG9zICAgICAgICAgICAgICMgMSBDUFUgMSBkZXYgdy4gcm91dGUgRG9TIAorcGt0Z2VuLmNvbmYtMS0xLWlwNiAgICAgICAgICAgICAgIyAxIENQVSAxIGRldiBpcHY2Citwa3RnZW4uY29uZi0xLTEtaXA2LXJkb3MgICAgICAgICAjIDEgQ1BVIDEgZGV2IGlwdjYgIHcuIHJvdXRlIERvUworcGt0Z2VuLmNvbmYtMS0xLWZsb3dzICAgICAgICAgICAgIyAxIENQVSAxIGRldiBtdWx0aXBsZSBmbG93cy4KKworUnVuIGluIHNoZWxsOiAuL3BrdGdlbi5jb25mLVgtWSBJdCBkb2VzIGFsbCB0aGUgc2V0dXAgaW5jbHVkaW5nIHNlbmRpbmcuIAorCisKK0ludGVycnVwdCBhZmZpbml0eQorPT09PT09PT09PT09PT09PT09PQorTm90ZSB3aGVuIGFkZGluZyBkZXZpY2VzIHRvIGEgc3BlY2lmaWMgQ1BVIHRoZXJlIGdvb2QgaWRlYSB0byBhbHNvIGFzc2lnbiAKKy9wcm9jL2lycS9YWC9zbXBfYWZmaW5pdHkgc28gdGhlIFRYLWludGVycnVwdHMgZ2V0cyBib3VuZCB0byB0aGUgc2FtZSBDUFUuCithcyB0aGlzIHJlZHVjZXMgY2FjaGUgYm91bmNpbmcgd2hlbiBmcmVlaW5nIHNrYidzLgorCisKK0N1cnJlbnQgY29tbWFuZHMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyoqIFBnY29udHJvbCBjb21tYW5kczoKKworc3RhcnQKK3N0b3AKKworKiogVGhyZWFkIGNvbW1hbmRzOgorCithZGRfZGV2aWNlCityZW1fZGV2aWNlX2FsbAorbWF4X2JlZm9yZV9zb2Z0aXJxCisKKworKiogRGV2aWNlIGNvbW1hbmRzOgorCitjb3VudAorY2xvbmVfc2tiCitkZWJ1ZworCitmcmFncworZGVsYXkKKworc3JjX21hY19jb3VudAorZHN0X21hY19jb3VudAorCitwa3Rfc2l6ZSAKK21pbl9wa3Rfc2l6ZQorbWF4X3BrdF9zaXplCisKK3VkcF9zcmNfbWluCit1ZHBfc3JjX21heAorCit1ZHBfZHN0X21pbgordWRwX2RzdF9tYXgKKworZmxhZworICBJUFNSQ19STkQKKyAgVFhTSVpFX1JORAorICBJUERTVF9STkQKKyAgVURQU1JDX1JORAorICBVRFBEU1RfUk5ECisgIE1BQ1NSQ19STkQKKyAgTUFDRFNUX1JORAorCitkc3RfbWluCitkc3RfbWF4CisKK3NyY19taW4KK3NyY19tYXgKKworZHN0X21hYworc3JjX21hYworCitjbGVhcl9jb3VudGVycworCitkc3Q2CitzcmM2CisKK2Zsb3dzCitmbG93bGVuCisKK1JlZmVyZW5jZXM6CitmdHA6Ly9yb2J1ci5zbHUuc2UvcHViL0xpbnV4L25ldC1kZXZlbG9wbWVudC9wa3RnZW4tdGVzdGluZy8KK2Z0cDovL3JvYnVyLnNsdS5zZS9wdWIvTGludXgvbmV0LWRldmVsb3BtZW50L3BrdGdlbi10ZXN0aW5nL2V4YW1wbGVzLworCitQYXBlciBmcm9tIExpbnV4LUtvbmdyZXNzIGluIEVybGFuZ2VuIDIwMDQuCitmdHA6Ly9yb2J1ci5zbHUuc2UvcHViL0xpbnV4L25ldC1kZXZlbG9wbWVudC9wa3RnZW4tdGVzdGluZy9wa3RnZW5fcGFwZXIucGRmCisKK1RoYW5rcyB0bzoKK0dyYW50IEdydW5kbGVyIGZvciB0ZXN0aW5nIG9uIElBLTY0IGFuZCBwYXJpc2MsIEhhcmFsZCBXZWx0ZSwgIExlbm5lcnQgQnV5dGVuaGVrCitTdGVwaGVuIEhlbW1pbmdlciwgQW5kaSBLbGVlbiwgRGF2ZSBNaWxsZXIgYW5kIG1hbnkgb3RoZXJzLgorCisKK0dvb2QgbHVjayB3aXRoIHRoZSBsaW51eCBuZXQtZGV2ZWxvcG1lbnQuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BvbGljeS1yb3V0aW5nLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wb2xpY3ktcm91dGluZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZmNjkzNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wb2xpY3ktcm91dGluZy50eHQKQEAgLTAsMCArMSwxNTAgQEAKK0NsYXNzZXMKKy0tLS0tLS0KKworCSJDbGFzcyIgaXMgYSBjb21wbGV0ZSByb3V0aW5nIHRhYmxlIGluIGNvbW1vbiBzZW5zZS4KKwlJLmUuIGl0IGlzIHRyZWUgb2Ygbm9kZXMgKGRlc3RpbmF0aW9uIHByZWZpeCwgdG9zLCBtZXRyaWMpCisJd2l0aCBhdHRhY2hlZCBpbmZvcm1hdGlvbjogZ2F0ZXdheSwgZGV2aWNlIGV0Yy4KKwlUaGlzIHRyZWUgaXMgbG9va2VkIHVwIGFzIHNwZWNpZmllZCBpbiBSRkMxODEyIDUuMi40LjMKKwkxLiBCYXNpYyBtYXRjaAorCTIuIExvbmdlc3QgbWF0Y2gKKwkzLiBXZWFrIFRPUy4KKwk0LiBNZXRyaWMuIChzaG91bGQgbm90IGJlIGluIGtlcm5lbCBzcGFjZSwgYnV0IHRoZXkgYXJlKQorCTUuIEFkZGl0aW9uYWwgcHJ1bmluZyBydWxlcy4gKG5vdCBpbiBrZXJuZWwgc3BhY2UpLgorCQorCVdlIGhhdmUgdHdvIHNwZWNpYWwgdHlwZSBvZiBub2RlczoKKwlSRUpFQ1QgLSBhYm9ydCByb3V0ZSBsb29rdXAgYW5kIHJldHVybiBhbiBlcnJvciB2YWx1ZS4KKwlUSFJPVyAgLSBhYm9ydCByb3V0ZSBsb29rdXAgaW4gdGhpcyBjbGFzcy4KKworCisJQ3VycmVudGx5IHRoZSBudW1iZXIgb2YgY2xhc3NlcyBpcyBsaW1pdGVkIHRvIDI1NQorCSgwIGlzIHJlc2VydmVkIGZvciAibm90IHNwZWNpZmllZCBjbGFzcyIpCisKKwlUaHJlZSBjbGFzc2VzIGFyZSBidWlsdGluOgorCisJUlRfQ0xBU1NfTE9DQUw9MjU1IC0gbG9jYWwgaW50ZXJmYWNlIGFkZHJlc3NlcywKKwlicm9hZGNhc3RzLCBuYXQgYWRkcmVzc2VzLgorCisJUlRfQ0xBU1NfTUFJTj0yNTQgIC0gYWxsIG5vcm1hbCByb3V0ZXMgYXJlIHB1dCB0aGVyZQorCWJ5IGRlZmF1bHQuCisKKwlSVF9DTEFTU19ERUZBVUxUPTI1MyAtIGlmIGlwX2ZpYl9tb2RlbD09MSwgdGhlbgorCW5vcm1hbCBkZWZhdWx0IHJvdXRlcyBhcmUgcHV0IHRoZXJlLCBpZiBpcF9maWJfbW9kZWw9PTIKKwlhbGwgZ2F0ZXdheSByb3V0ZXMgYXJlIHB1dCB0aGVyZS4KKworCitSdWxlcworLS0tLS0KKwlSdWxlIGlzIGEgcmVjb3JkIG9mIChzcmMgcHJlZml4LCBzcmMgaW50ZXJmYWNlLCB0b3MsIGRzdCBwcmVmaXgpCisJd2l0aCBhdHRhY2hlZCBpbmZvcm1hdGlvbi4KKworCVJ1bGUgdHlwZXM6CisJUlRQX1JPVVRFIC0gbG9va3VwIGluIGF0dGFjaGVkIGNsYXNzCisJUlRQX05BVCAgIC0gbG9va3VwIGluIGF0dGFjaGVkIGNsYXNzIGFuZCBpZiBhIG1hdGNoIGlzIGZvdW5kLAorCQkgICAgdHJhbnNsYXRlIHBhY2tldCBzb3VyY2UgYWRkcmVzcy4KKwlSVFBfTUFTUVVFUkFERSAtIGxvb2t1cCBpbiBhdHRhY2hlZCBjbGFzcyBhbmQgaWYgYSBtYXRjaCBpcyBmb3VuZCwKKwkJICAgIG1hc3F1ZXJhZGUgcGFja2V0IGFzIHNvdXJjZWQgYnkgdXMuCisJUlRQX0RST1AgICAtIHNpbGVudGx5IGRyb3AgdGhlIHBhY2tldC4KKwlSVFBfUkVKRUNUIC0gZHJvcCB0aGUgcGFja2V0IGFuZCBzZW5kIElDTVAgTkVUIFVOUkVBQ0hBQkxFLgorCVJUUF9QUk9ISUJJVCAtIGRyb3AgdGhlIHBhY2tldCBhbmQgc2VuZCBJQ01QIENPTU0uIEFETS4gUFJPSElCSVRFRC4KKworCVJ1bGUgZmxhZ3M6CisJUlRSRl9MT0cgLSBsb2cgcm91dGUgY3JlYXRpb25zLgorCVJUUkZfVkFMVkUgLSBPbmUgd2F5IHJvdXRlICh1c2VkIHdpdGggbWFzcXVlcmFkaW5nKQorCitEZWZhdWx0IHNldHVwOgorCityb290QGFtYmVyOi9wdWIvaXAtcm91dGluZyAjIGlwcm91dGUgLXIKK0tlcm5lbCByb3V0aW5nIHBvbGljeSBydWxlcworUHJlZiBTb3VyY2UgICAgICAgICAgICAgRGVzdGluYXRpb24gICAgICAgIFRPUyBJZmFjZSAgIENsCisgICAwIGRlZmF1bHQgICAgICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgMDAgICogICAgICAgMjU1CisgMjU0IGRlZmF1bHQgICAgICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgMDAgICogICAgICAgMjU0CisgMjU1IGRlZmF1bHQgICAgICAgICAgICBkZWZhdWx0ICAgICAgICAgICAgMDAgICogICAgICAgMjUzCisKKworTG9va3VwIGFsZ29yaXRobQorLS0tLS0tLS0tLS0tLS0tLQorCisJV2Ugc2NhbiBydWxlcyBsaXN0LCBhbmQgaWYgYSBydWxlIGlzIG1hdGNoZWQsIGFwcGx5IGl0LgorCUlmIGEgcm91dGUgaXMgZm91bmQsIHJldHVybiBpdC4KKwlJZiBpdCBpcyBub3QgZm91bmQgb3IgYSBUSFJPVyBub2RlIHdhcyBtYXRjaGVkLCBjb250aW51ZQorCXRvIHNjYW4gcnVsZXMuCisKK0FwcGxpY2F0aW9ucworLS0tLS0tLS0tLS0tCisKKzEuCUp1c3QgaWdub3JlIGNsYXNzZXMuIEFsbCB0aGUgcm91dGVzIGFyZSBwdXQgaW50byBNQUlOIGNsYXNzCisJKGFuZC9vciBpbnRvIERFRkFVTFQgY2xhc3MpLgorCisJSE9XVE86ICBpcHJvdXRlIGFkZCBQUkVGSVggWyB0b3MgVE9TIF0gWyBndyBHVyBdIFsgZGV2IERFViBdCisJCVsgbWV0cmljIE1FVFJJQyBdIFsgcmVqZWN0IF0gLi4uIChsb29rIGF0IGlwcm91dGUgdXRpbGl0eSkKKworCQlvciB1c2Ugcm91dGUgdXRpbGl0eSBmcm9tIGN1cnJlbnQgbmV0LXRvb2xzLgorCQkKKzIuCU9wcG9zaXRlIGNhc2UuIEp1c3QgZm9yZ2V0IGFsbCB0aGF0IHlvdSBrbm93IGFib3V0IHJvdXRpbmcKKwl0YWJsZXMuIEV2ZXJ5IHJ1bGUgaXMgc3VwcGxpZWQgd2l0aCBpdHMgb3duIGdhdGV3YXksIGRldmljZQorCWluZm8uIHJlY29yZC4gVGhpcyBhcHByb2FjaCBpcyBub3QgYXBwcm9wcmlhdGUgZm9yIGF1dG9tYXRlZAorCXJvdXRlIG1haW50ZW5hbmNlLCBidXQgaXQgaXMgaWRlYWwgZm9yIG1hbnVhbCBjb25maWd1cmF0aW9uLgorCisJSE9XVE86ICBpcHJvdXRlIGFkZHJ1bGUgWyBmcm9tIFBSRUZJWCBdIFsgdG8gUFJFRklYIF0gWyB0b3MgVE9TIF0KKwkJWyBkZXYgSU5QVVRERVZdIFsgcHJlZiBQUkVGRVJFTkNFIF0gcm91dGUgWyBndyBHQVRFV0FZIF0KKwkJWyBkZXYgT1VUREVWIF0gLi4uLi4KKworCVdhcm5pbmc6IEFzIG9mIG5vdyB0aGUgc2l6ZSBvZiB0aGUgcm91dGluZyB0YWJsZSBpbiB0aGlzCisJYXBwcm9hY2ggaXMgbGltaXRlZCB0byAyNTYuIElmIHNvbWVvbmUgbGlrZXMgdGhpcyBtb2RlbCwgSSdsbAorCXJlbGF4IHRoaXMgbGltaXRhdGlvbi4KKworMy4JT1NQRiBjbGFzc2VzIChzZWUgUkZDMTU4MywgUkZDMTgxMiBFLjMuMykKKwlWZXJ5IGNsZWFuLCBzdGFibGUgYW5kIHJvYnVzdCBhbGdvcml0aG0gZm9yIE9TUEYgcm91dGluZworCWRvbWFpbnMuIFVuZm9ydHVuYXRlbHksIGl0IGlzIG5vdCB3aWRlbHkgdXNlZCBpbiB0aGUgSW50ZXJuZXQuCisKKwlQcm9wb3NlZCBzZXR1cDoKKwkyNTUgbG9jYWwgYWRkcmVzc2VzCisJMjU0IGludGVyZmFjZSByb3V0ZXMKKwkyNTMgQVNFIHJvdXRlcyB3aXRoIGV4dGVybmFsIG1ldHJpYworCTI1MiBBU0Ugcm91dGVzIHdpdGggaW50ZXJuYWwgbWV0cmljCisJMjUxIGludGVyLWFyZWEgcm91dGVzCisJMjUwIGludHJhLWFyZWEgcm91dGVzIGZvciAxc3QgYXJlYQorCTI0OSBpbnRyYS1hcmVhIHJvdXRlcyBmb3IgMm5kIGFyZWEKKwlldGMuCisJCisJUnVsZXM6CisJaXByb3V0ZSBhZGRydWxlIGNsYXNzIDI1MworCWlwcm91dGUgYWRkcnVsZSBjbGFzcyAyNTIKKwlpcHJvdXRlIGFkZHJ1bGUgY2xhc3MgMjUxCisJaXByb3V0ZSBhZGRydWxlIHRvIGEtcHJlZml4LWZvci0xc3QtYXJlYSBjbGFzcyAyNTAKKwlpcHJvdXRlIGFkZHJ1bGUgdG8gYW5vdGhlci1wcmVmaXgtZm9yLTFzdC1hcmVhIGNsYXNzIDI1MAorCS4uLgorCWlwcm91dGUgYWRkcnVsZSB0byBhLXByZWZpeC1mb3ItMm5kLWFyZWEgY2xhc3MgMjQ5CisJLi4uCisKKwlBcmVhIGNsYXNzZXMgbXVzdCBiZSB0ZXJtaW5hdGVkIHdpdGggcmVqZWN0IHJlY29yZC4KKwlpcHJvdXRlIGFkZCBkZWZhdWx0IHJlamVjdCBjbGFzcyAyNTAKKwlpcHJvdXRlIGFkZCBkZWZhdWx0IHJlamVjdCBjbGFzcyAyNDkKKwkuLi4KKworNC4JVGhlIFZhcmlhbnQgUm91dGVyIFJlcXVpcmVtZW50cyBBbGdvcml0aG0gKFJGQzE4MTIgRS4zLjIpCisJQ3JlYXRlIDE2IGNsYXNzZXMgZm9yIGRpZmZlcmVudCBUT1MgdmFsdWVzLgorCUl0IGlzIGEgZnVubnksIGJ1dCBwcmV0dHkgdXNlbGVzcyBhbGdvcml0aG0uCisJSSBsaXN0ZWQgaXQganVzdCB0byBzaG93IHRoZSBwb3dlciBvZiBuZXcgcm91dGluZyBjb2RlLgorCis1LglBbGwgdGhlIHZhcmlldHkgb2YgY29tYmluYXRpb25zLi4uLi4uCisKKworR0FURUQKKy0tLS0tCisKKwlHYXRlZCBkb2VzIG5vdCB1bmRlcnN0YW5kIGNsYXNzZXMsIGJ1dCBpdCB3aWxsIHdvcmsKKwloYXBwaWx5IGluIE1BSU4rREVGQVVMVC4gQWxsIHBvbGljeSByb3V0ZXMgY2FuIGJlIHNldAorCWFuZCBtYWludGFpbmVkIG1hbnVhbGx5LgorCitJTVBPUlRBTlQgTk9URQorLS0tLS0tLS0tLS0tLS0KKwlyb3V0ZS5jIGhhcyBhIGNvbXBpbGF0aW9uIHRpbWUgc3dpdGNoIENPTkZJR19JUF9MT0NBTF9SVF9QT0xJQ1kuCisJSWYgaXQgaXMgc2V0LCBsb2NhbGx5IG9yaWdpbmF0ZWQgcGFja2V0cyBhcmUgcm91dGVkCisJdXNpbmcgYWxsIHRoZSBwb2xpY3kgbGlzdC4gVGhpcyBpcyBub3QgdmVyeSBjb252ZW5pZW50IGFuZAorCXByZXR0eSBhbWJpZ3VvdXMgd2hlbiB1c2VkIHdpdGggTkFUIGFuZCBtYXNxdWVyYWRpbmcuCisJSSBzZXQgaXQgdG8gRkFMU0UgYnkgZGVmYXVsdC4KKworCitBbGV4ZXkgS3V6bmV0b3YKK2t1em5ldEBtczIuaW5yLmFjLnJ1CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHBwX2dlbmVyaWMudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BwcF9nZW5lcmljLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWI1MTcyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BwcF9nZW5lcmljLnR4dApAQCAtMCwwICsxLDQzMiBAQAorCQlQUFAgR2VuZXJpYyBEcml2ZXIgYW5kIENoYW5uZWwgSW50ZXJmYWNlCisJCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCQkJICAgIFBhdWwgTWFja2VycmFzCisJCQkgICBwYXVsdXNAc2FtYmEub3JnCisJCQkgICAgICA3IEZlYiAyMDAyCisKK1RoZSBnZW5lcmljIFBQUCBkcml2ZXIgaW4gbGludXgtMi40IHByb3ZpZGVzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZQorZnVuY3Rpb25hbGl0eSB3aGljaCBpcyBvZiB1c2UgaW4gYW55IFBQUCBpbXBsZW1lbnRhdGlvbiwgaW5jbHVkaW5nOgorCisqIHRoZSBuZXR3b3JrIGludGVyZmFjZSB1bml0IChwcHAwIGV0Yy4pCisqIHRoZSBpbnRlcmZhY2UgdG8gdGhlIG5ldHdvcmtpbmcgY29kZQorKiBQUFAgbXVsdGlsaW5rOiBzcGxpdHRpbmcgZGF0YWdyYW1zIGJldHdlZW4gbXVsdGlwbGUgbGlua3MsIGFuZAorICBvcmRlcmluZyBhbmQgY29tYmluaW5nIHJlY2VpdmVkIGZyYWdtZW50cworKiB0aGUgaW50ZXJmYWNlIHRvIHBwcGQsIHZpYSBhIC9kZXYvcHBwIGNoYXJhY3RlciBkZXZpY2UKKyogcGFja2V0IGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uCisqIFRDUC9JUCBoZWFkZXIgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24KKyogZGV0ZWN0aW5nIG5ldHdvcmsgdHJhZmZpYyBmb3IgZGVtYW5kIGRpYWxsaW5nIGFuZCBmb3IgaWRsZSB0aW1lb3V0cworKiBzaW1wbGUgcGFja2V0IGZpbHRlcmluZworCitGb3Igc2VuZGluZyBhbmQgcmVjZWl2aW5nIFBQUCBmcmFtZXMsIHRoZSBnZW5lcmljIFBQUCBkcml2ZXIgY2FsbHMgb24KK3RoZSBzZXJ2aWNlcyBvZiBQUFAgYGNoYW5uZWxzJy4gIEEgUFBQIGNoYW5uZWwgZW5jYXBzdWxhdGVzIGEKK21lY2hhbmlzbSBmb3IgdHJhbnNwb3J0aW5nIFBQUCBmcmFtZXMgZnJvbSBvbmUgbWFjaGluZSB0byBhbm90aGVyLiAgQQorUFBQIGNoYW5uZWwgaW1wbGVtZW50YXRpb24gY2FuIGJlIGFyYml0cmFyaWx5IGNvbXBsZXggaW50ZXJuYWxseSBidXQKK2hhcyBhIHZlcnkgc2ltcGxlIGludGVyZmFjZSB3aXRoIHRoZSBnZW5lcmljIFBQUCBjb2RlOiBpdCBtZXJlbHkgaGFzCit0byBiZSBhYmxlIHRvIHNlbmQgUFBQIGZyYW1lcywgcmVjZWl2ZSBQUFAgZnJhbWVzLCBhbmQgb3B0aW9uYWxseQoraGFuZGxlIGlvY3RsIHJlcXVlc3RzLiAgQ3VycmVudGx5IHRoZXJlIGFyZSBQUFAgY2hhbm5lbAoraW1wbGVtZW50YXRpb25zIGZvciBhc3luY2hyb25vdXMgc2VyaWFsIHBvcnRzLCBzeW5jaHJvbm91cyBzZXJpYWwKK3BvcnRzLCBhbmQgZm9yIFBQUCBvdmVyIGV0aGVybmV0LgorCitUaGlzIGFyY2hpdGVjdHVyZSBtYWtlcyBpdCBwb3NzaWJsZSB0byBpbXBsZW1lbnQgUFBQIG11bHRpbGluayBpbiBhCituYXR1cmFsIGFuZCBzdHJhaWdodGZvcndhcmQgd2F5LCBieSBhbGxvd2luZyBtb3JlIHRoYW4gb25lIGNoYW5uZWwgdG8KK2JlIGxpbmtlZCB0byBlYWNoIHBwcCBuZXR3b3JrIGludGVyZmFjZSB1bml0LiAgVGhlIGdlbmVyaWMgbGF5ZXIgaXMKK3Jlc3BvbnNpYmxlIGZvciBzcGxpdHRpbmcgZGF0YWdyYW1zIG9uIHRyYW5zbWl0IGFuZCByZWNvbWJpbmluZyB0aGVtCitvbiByZWNlaXZlLgorCisKK1BQUCBjaGFubmVsIEFQSQorLS0tLS0tLS0tLS0tLS0tCisKK1NlZSBpbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmggZm9yIHRoZSBkZWNsYXJhdGlvbiBvZiB0aGUgdHlwZXMgYW5kCitmdW5jdGlvbnMgdXNlZCB0byBjb21tdW5pY2F0ZSBiZXR3ZWVuIHRoZSBnZW5lcmljIFBQUCBsYXllciBhbmQgUFBQCitjaGFubmVscy4KKworRWFjaCBjaGFubmVsIGhhcyB0byBwcm92aWRlIHR3byBmdW5jdGlvbnMgdG8gdGhlIGdlbmVyaWMgUFBQIGxheWVyLAordmlhIHRoZSBwcHBfY2hhbm5lbC5vcHMgcG9pbnRlcjoKKworKiBzdGFydF94bWl0KCkgaXMgY2FsbGVkIGJ5IHRoZSBnZW5lcmljIGxheWVyIHdoZW4gaXQgaGFzIGEgZnJhbWUgdG8KKyAgc2VuZC4gIFRoZSBjaGFubmVsIGhhcyB0aGUgb3B0aW9uIG9mIHJlamVjdGluZyB0aGUgZnJhbWUgZm9yCisgIGZsb3ctY29udHJvbCByZWFzb25zLiAgSW4gdGhpcyBjYXNlLCBzdGFydF94bWl0KCkgc2hvdWxkIHJldHVybiAwCisgIGFuZCB0aGUgY2hhbm5lbCBzaG91bGQgY2FsbCB0aGUgcHBwX291dHB1dF93YWtldXAoKSBmdW5jdGlvbiBhdCBhCisgIGxhdGVyIHRpbWUgd2hlbiBpdCBjYW4gYWNjZXB0IGZyYW1lcyBhZ2FpbiwgYW5kIHRoZSBnZW5lcmljIGxheWVyCisgIHdpbGwgdGhlbiBhdHRlbXB0IHRvIHJldHJhbnNtaXQgdGhlIHJlamVjdGVkIGZyYW1lKHMpLiAgSWYgdGhlIGZyYW1lCisgIGlzIGFjY2VwdGVkLCB0aGUgc3RhcnRfeG1pdCgpIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gMS4KKworKiBpb2N0bCgpIHByb3ZpZGVzIGFuIGludGVyZmFjZSB3aGljaCBjYW4gYmUgdXNlZCBieSBhIHVzZXItc3BhY2UKKyAgcHJvZ3JhbSB0byBjb250cm9sIGFzcGVjdHMgb2YgdGhlIGNoYW5uZWwncyBiZWhhdmlvdXIuICBUaGlzCisgIHByb2NlZHVyZSB3aWxsIGJlIGNhbGxlZCB3aGVuIGEgdXNlci1zcGFjZSBwcm9ncmFtIGRvZXMgYW4gaW9jdGwKKyAgc3lzdGVtIGNhbGwgb24gYW4gaW5zdGFuY2Ugb2YgL2Rldi9wcHAgd2hpY2ggaXMgYm91bmQgdG8gdGhlCisgIGNoYW5uZWwuICAoVXN1YWxseSBpdCB3b3VsZCBvbmx5IGJlIHBwcGQgd2hpY2ggd291bGQgZG8gdGhpcy4pCisKK1RoZSBnZW5lcmljIFBQUCBsYXllciBwcm92aWRlcyBzZXZlbiBmdW5jdGlvbnMgdG8gY2hhbm5lbHM6CisKKyogcHBwX3JlZ2lzdGVyX2NoYW5uZWwoKSBpcyBjYWxsZWQgd2hlbiBhIGNoYW5uZWwgaGFzIGJlZW4gY3JlYXRlZCwgdG8KKyAgbm90aWZ5IHRoZSBQUFAgZ2VuZXJpYyBsYXllciBvZiBpdHMgcHJlc2VuY2UuICBGb3IgZXhhbXBsZSwgc2V0dGluZworICBhIHNlcmlhbCBwb3J0IHRvIHRoZSBQUFBESVNDIGxpbmUgZGlzY2lwbGluZSBjYXVzZXMgdGhlIHBwcF9hc3luYworICBjaGFubmVsIGNvZGUgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLgorCisqIHBwcF91bnJlZ2lzdGVyX2NoYW5uZWwoKSBpcyBjYWxsZWQgd2hlbiBhIGNoYW5uZWwgaXMgdG8gYmUKKyAgZGVzdHJveWVkLiAgRm9yIGV4YW1wbGUsIHRoZSBwcHBfYXN5bmMgY2hhbm5lbCBjb2RlIGNhbGxzIHRoaXMgd2hlbgorICBhIGhhbmd1cCBpcyBkZXRlY3RlZCBvbiB0aGUgc2VyaWFsIHBvcnQuCisKKyogcHBwX291dHB1dF93YWtldXAoKSBpcyBjYWxsZWQgYnkgYSBjaGFubmVsIHdoZW4gaXQgaGFzIHByZXZpb3VzbHkKKyAgcmVqZWN0ZWQgYSBjYWxsIHRvIGl0cyBzdGFydF94bWl0IGZ1bmN0aW9uLCBhbmQgY2FuIG5vdyBhY2NlcHQgbW9yZQorICBwYWNrZXRzLgorCisqIHBwcF9pbnB1dCgpIGlzIGNhbGxlZCBieSBhIGNoYW5uZWwgd2hlbiBpdCBoYXMgcmVjZWl2ZWQgYSBjb21wbGV0ZQorICBQUFAgZnJhbWUuCisKKyogcHBwX2lucHV0X2Vycm9yKCkgaXMgY2FsbGVkIGJ5IGEgY2hhbm5lbCB3aGVuIGl0IGhhcyBkZXRlY3RlZCB0aGF0IGEKKyAgZnJhbWUgaGFzIGJlZW4gbG9zdCBvciBkcm9wcGVkIChmb3IgZXhhbXBsZSwgYmVjYXVzZSBvZiBhIEZDUyAoZnJhbWUKKyAgY2hlY2sgc2VxdWVuY2UpIGVycm9yKS4KKworKiBwcHBfY2hhbm5lbF9pbmRleCgpIHJldHVybnMgdGhlIGNoYW5uZWwgaW5kZXggYXNzaWduZWQgYnkgdGhlIFBQUAorICBnZW5lcmljIGxheWVyIHRvIHRoaXMgY2hhbm5lbC4gIFRoZSBjaGFubmVsIHNob3VsZCBwcm92aWRlIHNvbWUgd2F5CisgIChlLmcuIGFuIGlvY3RsKSB0byB0cmFuc21pdCB0aGlzIGJhY2sgdG8gdXNlci1zcGFjZSwgYXMgdXNlci1zcGFjZQorICB3aWxsIG5lZWQgaXQgdG8gYXR0YWNoIGFuIGluc3RhbmNlIG9mIC9kZXYvcHBwIHRvIHRoaXMgY2hhbm5lbC4KKworKiBwcHBfdW5pdF9udW1iZXIoKSByZXR1cm5zIHRoZSB1bml0IG51bWJlciBvZiB0aGUgcHBwIG5ldHdvcmsKKyAgaW50ZXJmYWNlIHRvIHdoaWNoIHRoaXMgY2hhbm5lbCBpcyBjb25uZWN0ZWQsIG9yIC0xIGlmIHRoZSBjaGFubmVsCisgIGlzIG5vdCBjb25uZWN0ZWQuCisKK0Nvbm5lY3RpbmcgYSBjaGFubmVsIHRvIHRoZSBwcHAgZ2VuZXJpYyBsYXllciBpcyBpbml0aWF0ZWQgZnJvbSB0aGUKK2NoYW5uZWwgY29kZSwgcmF0aGVyIHRoYW4gZnJvbSB0aGUgZ2VuZXJpYyBsYXllci4gIFRoZSBjaGFubmVsIGlzCitleHBlY3RlZCB0byBoYXZlIHNvbWUgd2F5IGZvciBhIHVzZXItbGV2ZWwgcHJvY2VzcyB0byBjb250cm9sIGl0CitpbmRlcGVuZGVudGx5IG9mIHRoZSBwcHAgZ2VuZXJpYyBsYXllci4gIEZvciBleGFtcGxlLCB3aXRoIHRoZQorcHBwX2FzeW5jIGNoYW5uZWwsIHRoaXMgaXMgcHJvdmlkZWQgYnkgdGhlIGZpbGUgZGVzY3JpcHRvciB0byB0aGUKK3NlcmlhbCBwb3J0LgorCitHZW5lcmFsbHkgYSB1c2VyLWxldmVsIHByb2Nlc3Mgd2lsbCBpbml0aWFsaXplIHRoZSB1bmRlcmx5aW5nCitjb21tdW5pY2F0aW9ucyBtZWRpdW0gYW5kIHByZXBhcmUgaXQgdG8gZG8gUFBQLiAgRm9yIGV4YW1wbGUsIHdpdGggYW4KK2FzeW5jIHR0eSwgdGhpcyBjYW4gaW52b2x2ZSBzZXR0aW5nIHRoZSB0dHkgc3BlZWQgYW5kIG1vZGVzLCBpc3N1aW5nCittb2RlbSBjb21tYW5kcywgYW5kIHRoZW4gZ29pbmcgdGhyb3VnaCBzb21lIHNvcnQgb2YgZGlhbG9nIHdpdGggdGhlCityZW1vdGUgc3lzdGVtIHRvIGludm9rZSBQUFAgc2VydmljZSB0aGVyZS4gIFdlIHJlZmVyIHRvIHRoaXMgcHJvY2VzcworYXMgYGRpc2NvdmVyeScuICBUaGVuIHRoZSB1c2VyLWxldmVsIHByb2Nlc3MgdGVsbHMgdGhlIG1lZGl1bSB0bworYmVjb21lIGEgUFBQIGNoYW5uZWwgYW5kIHJlZ2lzdGVyIGl0c2VsZiB3aXRoIHRoZSBnZW5lcmljIFBQUCBsYXllci4KK1RoZSBjaGFubmVsIHRoZW4gaGFzIHRvIHJlcG9ydCB0aGUgY2hhbm5lbCBudW1iZXIgYXNzaWduZWQgdG8gaXQgYmFjawordG8gdGhlIHVzZXItbGV2ZWwgcHJvY2Vzcy4gIEZyb20gdGhhdCBwb2ludCwgdGhlIFBQUCBuZWdvdGlhdGlvbiBjb2RlCitpbiB0aGUgUFBQIGRhZW1vbiAocHBwZCkgY2FuIHRha2Ugb3ZlciBhbmQgcGVyZm9ybSB0aGUgUFBQCituZWdvdGlhdGlvbiwgYWNjZXNzaW5nIHRoZSBjaGFubmVsIHRocm91Z2ggdGhlIC9kZXYvcHBwIGludGVyZmFjZS4KKworQXQgdGhlIGludGVyZmFjZSB0byB0aGUgUFBQIGdlbmVyaWMgbGF5ZXIsIFBQUCBmcmFtZXMgYXJlIHN0b3JlZCBpbgorc2tidWZmIHN0cnVjdHVyZXMgYW5kIHN0YXJ0IHdpdGggdGhlIHR3by1ieXRlIFBQUCBwcm90b2NvbCBudW1iZXIuCitUaGUgZnJhbWUgZG9lcyAqbm90KiBpbmNsdWRlIHRoZSAweGZmIGBhZGRyZXNzJyBieXRlIG9yIHRoZSAweDAzCitgY29udHJvbCcgYnl0ZSB0aGF0IGFyZSBvcHRpb25hbGx5IHVzZWQgaW4gYXN5bmMgUFBQLiAgTm9yIGlzIHRoZXJlCithbnkgZXNjYXBpbmcgb2YgY29udHJvbCBjaGFyYWN0ZXJzLCBub3IgYXJlIHRoZXJlIGFueSBGQ1Mgb3IgZnJhbWluZworY2hhcmFjdGVycyBpbmNsdWRlZC4gIFRoYXQgaXMgYWxsIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2hhbm5lbAorY29kZSwgaWYgaXQgaXMgbmVlZGVkIGZvciB0aGUgcGFydGljdWxhciBtZWRpdW0uICBUaGF0IGlzLCB0aGUgc2tidWZmcworcHJlc2VudGVkIHRvIHRoZSBzdGFydF94bWl0KCkgZnVuY3Rpb24gY29udGFpbiBvbmx5IHRoZSAyLWJ5dGUKK3Byb3RvY29sIG51bWJlciBhbmQgdGhlIGRhdGEsIGFuZCB0aGUgc2tidWZmcyBwcmVzZW50ZWQgdG8gcHBwX2lucHV0KCkKK211c3QgYmUgaW4gdGhlIHNhbWUgZm9ybWF0LgorCitUaGUgY2hhbm5lbCBtdXN0IHByb3ZpZGUgYW4gaW5zdGFuY2Ugb2YgYSBwcHBfY2hhbm5lbCBzdHJ1Y3QgdG8KK3JlcHJlc2VudCB0aGUgY2hhbm5lbC4gIFRoZSBjaGFubmVsIGlzIGZyZWUgdG8gdXNlIHRoZSBgcHJpdmF0ZScgZmllbGQKK2hvd2V2ZXIgaXQgd2lzaGVzLiAgVGhlIGNoYW5uZWwgc2hvdWxkIGluaXRpYWxpemUgdGhlIGBtdHUnIGFuZAorYGhkcmxlbicgZmllbGRzIGJlZm9yZSBjYWxsaW5nIHBwcF9yZWdpc3Rlcl9jaGFubmVsKCkgYW5kIG5vdCBjaGFuZ2UKK3RoZW0gdW50aWwgYWZ0ZXIgcHBwX3VucmVnaXN0ZXJfY2hhbm5lbCgpIHJldHVybnMuICBUaGUgYG10dScgZmllbGQKK3JlcHJlc2VudHMgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgZGF0YSBwYXJ0IG9mIHRoZSBQUFAgZnJhbWVzLCB0aGF0CitpcywgaXQgZG9lcyBub3QgaW5jbHVkZSB0aGUgMi1ieXRlIHByb3RvY29sIG51bWJlci4KKworSWYgdGhlIGNoYW5uZWwgbmVlZHMgc29tZSBoZWFkcm9vbSBpbiB0aGUgc2tidWZmcyBwcmVzZW50ZWQgdG8gaXQgZm9yCit0cmFuc21pc3Npb24gKGkuZS4sIHNvbWUgc3BhY2UgZnJlZSBpbiB0aGUgc2tidWZmIGRhdGEgYXJlYSBiZWZvcmUgdGhlCitzdGFydCBvZiB0aGUgUFBQIGZyYW1lKSwgaXQgc2hvdWxkIHNldCB0aGUgYGhkcmxlbicgZmllbGQgb2YgdGhlCitwcHBfY2hhbm5lbCBzdHJ1Y3QgdG8gdGhlIGFtb3VudCBvZiBoZWFkcm9vbSByZXF1aXJlZC4gIFRoZSBnZW5lcmljCitQUFAgbGF5ZXIgd2lsbCBhdHRlbXB0IHRvIHByb3ZpZGUgdGhhdCBtdWNoIGhlYWRyb29tIGJ1dCB0aGUgY2hhbm5lbAorc2hvdWxkIHN0aWxsIGNoZWNrIGlmIHRoZXJlIGlzIHN1ZmZpY2llbnQgaGVhZHJvb20gYW5kIGNvcHkgdGhlIHNrYnVmZgoraWYgdGhlcmUgaXNuJ3QuCisKK09uIHRoZSBpbnB1dCBzaWRlLCBjaGFubmVscyBzaG91bGQgaWRlYWxseSBwcm92aWRlIGF0IGxlYXN0IDIgYnl0ZXMgb2YKK2hlYWRyb29tIGluIHRoZSBza2J1ZmZzIHByZXNlbnRlZCB0byBwcHBfaW5wdXQoKS4gIFRoZSBnZW5lcmljIFBQUAorY29kZSBkb2VzIG5vdCByZXF1aXJlIHRoaXMgYnV0IHdpbGwgYmUgbW9yZSBlZmZpY2llbnQgaWYgdGhpcyBpcyBkb25lLgorCisKK0J1ZmZlcmluZyBhbmQgZmxvdyBjb250cm9sCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZ2VuZXJpYyBQUFAgbGF5ZXIgaGFzIGJlZW4gZGVzaWduZWQgdG8gbWluaW1pemUgdGhlIGFtb3VudCBvZiBkYXRhCit0aGF0IGl0IGJ1ZmZlcnMgaW4gdGhlIHRyYW5zbWl0IGRpcmVjdGlvbi4gIEl0IG1haW50YWlucyBhIHF1ZXVlIG9mCit0cmFuc21pdCBwYWNrZXRzIGZvciB0aGUgUFBQIHVuaXQgKG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSkgcGx1cyBhCitxdWV1ZSBvZiB0cmFuc21pdCBwYWNrZXRzIGZvciBlYWNoIGF0dGFjaGVkIGNoYW5uZWwuICBOb3JtYWxseSB0aGUKK3RyYW5zbWl0IHF1ZXVlIGZvciB0aGUgdW5pdCB3aWxsIGNvbnRhaW4gYXQgbW9zdCBvbmUgcGFja2V0OyB0aGUKK2V4Y2VwdGlvbnMgYXJlIHdoZW4gcHBwZCBzZW5kcyBwYWNrZXRzIGJ5IHdyaXRpbmcgdG8gL2Rldi9wcHAsIGFuZAord2hlbiB0aGUgY29yZSBuZXR3b3JraW5nIGNvZGUgY2FsbHMgdGhlIGdlbmVyaWMgbGF5ZXIncyBzdGFydF94bWl0KCkKK2Z1bmN0aW9uIHdpdGggdGhlIHF1ZXVlIHN0b3BwZWQsIGkuZS4gd2hlbiB0aGUgZ2VuZXJpYyBsYXllciBoYXMKK2NhbGxlZCBuZXRpZl9zdG9wX3F1ZXVlKCksIHdoaWNoIG9ubHkgaGFwcGVucyBvbiBhIHRyYW5zbWl0IHRpbWVvdXQuCitUaGUgc3RhcnRfeG1pdCBmdW5jdGlvbiBhbHdheXMgYWNjZXB0cyBhbmQgcXVldWVzIHRoZSBwYWNrZXQgd2hpY2ggaXQKK2lzIGFza2VkIHRvIHRyYW5zbWl0LgorCitUcmFuc21pdCBwYWNrZXRzIGFyZSBkZXF1ZXVlZCBmcm9tIHRoZSBQUFAgdW5pdCB0cmFuc21pdCBxdWV1ZSBhbmQKK3RoZW4gc3ViamVjdGVkIHRvIFRDUC9JUCBoZWFkZXIgY29tcHJlc3Npb24gYW5kIHBhY2tldCBjb21wcmVzc2lvbgorKERlZmxhdGUgb3IgQlNELUNvbXByZXNzIGNvbXByZXNzaW9uKSwgYXMgYXBwcm9wcmlhdGUuICBBZnRlciB0aGlzCitwb2ludCB0aGUgcGFja2V0cyBjYW4gbm8gbG9uZ2VyIGJlIHJlb3JkZXJlZCwgYXMgdGhlIGRlY29tcHJlc3Npb24KK2FsZ29yaXRobXMgcmVseSBvbiByZWNlaXZpbmcgY29tcHJlc3NlZCBwYWNrZXRzIGluIHRoZSBzYW1lIG9yZGVyIHRoYXQKK3RoZXkgd2VyZSBnZW5lcmF0ZWQuCisKK0lmIG11bHRpbGluayBpcyBub3QgaW4gdXNlLCB0aGlzIHBhY2tldCBpcyB0aGVuIHBhc3NlZCB0byB0aGUgYXR0YWNoZWQKK2NoYW5uZWwncyBzdGFydF94bWl0KCkgZnVuY3Rpb24uICBJZiB0aGUgY2hhbm5lbCByZWZ1c2VzIHRvIHRha2UKK3RoZSBwYWNrZXQsIHRoZSBnZW5lcmljIGxheWVyIHNhdmVzIGl0IGZvciBsYXRlciB0cmFuc21pc3Npb24uICBUaGUKK2dlbmVyaWMgbGF5ZXIgd2lsbCBjYWxsIHRoZSBjaGFubmVsJ3Mgc3RhcnRfeG1pdCgpIGZ1bmN0aW9uIGFnYWluCit3aGVuIHRoZSBjaGFubmVsIGNhbGxzICBwcHBfb3V0cHV0X3dha2V1cCgpIG9yIHdoZW4gdGhlIGNvcmUKK25ldHdvcmtpbmcgY29kZSBjYWxscyB0aGUgZ2VuZXJpYyBsYXllcidzIHN0YXJ0X3htaXQoKSBmdW5jdGlvbgorYWdhaW4uICBUaGUgZ2VuZXJpYyBsYXllciBjb250YWlucyBubyB0aW1lb3V0IGFuZCByZXRyYW5zbWlzc2lvbgorbG9naWM7IGl0IHJlbGllcyBvbiB0aGUgY29yZSBuZXR3b3JraW5nIGNvZGUgZm9yIHRoYXQuCisKK0lmIG11bHRpbGluayBpcyBpbiB1c2UsIHRoZSBnZW5lcmljIGxheWVyIGRpdmlkZXMgdGhlIHBhY2tldCBpbnRvIG9uZQorb3IgbW9yZSBmcmFnbWVudHMgYW5kIHB1dHMgYSBtdWx0aWxpbmsgaGVhZGVyIG9uIGVhY2ggZnJhZ21lbnQuICBJdAorZGVjaWRlcyBob3cgbWFueSBmcmFnbWVudHMgdG8gdXNlIGJhc2VkIG9uIHRoZSBsZW5ndGggb2YgdGhlIHBhY2tldAorYW5kIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgd2hpY2ggYXJlIHBvdGVudGlhbGx5IGFibGUgdG8gYWNjZXB0IGEKK2ZyYWdtZW50IGF0IHRoZSBtb21lbnQuICBBIGNoYW5uZWwgaXMgcG90ZW50aWFsbHkgYWJsZSB0byBhY2NlcHQgYQorZnJhZ21lbnQgaWYgaXQgZG9lc24ndCBoYXZlIGFueSBmcmFnbWVudHMgY3VycmVudGx5IHF1ZXVlZCB1cCBmb3IgaXQKK3RvIHRyYW5zbWl0LiAgVGhlIGNoYW5uZWwgbWF5IHN0aWxsIHJlZnVzZSBhIGZyYWdtZW50OyBpbiB0aGlzIGNhc2UKK3RoZSBmcmFnbWVudCBpcyBxdWV1ZWQgdXAgZm9yIHRoZSBjaGFubmVsIHRvIHRyYW5zbWl0IGxhdGVyLiAgVGhpcworc2NoZW1lIGhhcyB0aGUgZWZmZWN0IHRoYXQgbW9yZSBmcmFnbWVudHMgYXJlIGdpdmVuIHRvIGhpZ2hlci0KK2JhbmR3aWR0aCBjaGFubmVscy4gIEl0IGFsc28gbWVhbnMgdGhhdCB1bmRlciBsaWdodCBsb2FkLCB0aGUgZ2VuZXJpYworbGF5ZXIgd2lsbCB0ZW5kIHRvIGZyYWdtZW50IGxhcmdlIHBhY2tldHMgYWNyb3NzIGFsbCB0aGUgY2hhbm5lbHMsCit0aHVzIHJlZHVjaW5nIGxhdGVuY3ksIHdoaWxlIHVuZGVyIGhlYXZ5IGxvYWQsIHBhY2tldHMgd2lsbCB0ZW5kIHRvIGJlCit0cmFuc21pdHRlZCBhcyBzaW5nbGUgZnJhZ21lbnRzLCB0aHVzIHJlZHVjaW5nIHRoZSBvdmVyaGVhZCBvZgorZnJhZ21lbnRhdGlvbi4KKworCitTTVAgc2FmZXR5CistLS0tLS0tLS0tCisKK1RoZSBQUFAgZ2VuZXJpYyBsYXllciBoYXMgYmVlbiBkZXNpZ25lZCB0byBiZSBTTVAtc2FmZS4gIExvY2tzIGFyZQordXNlZCBhcm91bmQgYWNjZXNzZXMgdG8gdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyB3aGVyZSBuZWNlc3NhcnkKK3RvIGVuc3VyZSB0aGVpciBpbnRlZ3JpdHkuICBBcyBwYXJ0IG9mIHRoaXMsIHRoZSBnZW5lcmljIGxheWVyCityZXF1aXJlcyB0aGF0IHRoZSBjaGFubmVscyBhZGhlcmUgdG8gY2VydGFpbiByZXF1aXJlbWVudHMgYW5kIGluIHR1cm4KK3Byb3ZpZGVzIGNlcnRhaW4gZ3VhcmFudGVlcyB0byB0aGUgY2hhbm5lbHMuICBFc3NlbnRpYWxseSB0aGUgY2hhbm5lbHMKK2FyZSByZXF1aXJlZCB0byBwcm92aWRlIHRoZSBhcHByb3ByaWF0ZSBsb2NraW5nIG9uIHRoZSBwcHBfY2hhbm5lbAorc3RydWN0dXJlcyB0aGF0IGZvcm0gdGhlIGJhc2lzIG9mIHRoZSBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlCitjaGFubmVsIGFuZCB0aGUgZ2VuZXJpYyBsYXllci4gIFRoaXMgaXMgYmVjYXVzZSB0aGUgY2hhbm5lbCBwcm92aWRlcwordGhlIHN0b3JhZ2UgZm9yIHRoZSBwcHBfY2hhbm5lbCBzdHJ1Y3R1cmUsIGFuZCBzbyB0aGUgY2hhbm5lbCBpcworcmVxdWlyZWQgdG8gcHJvdmlkZSB0aGUgZ3VhcmFudGVlIHRoYXQgdGhpcyBzdG9yYWdlIGV4aXN0cyBhbmQgaXMKK3ZhbGlkIGF0IHRoZSBhcHByb3ByaWF0ZSB0aW1lcy4KKworVGhlIGdlbmVyaWMgbGF5ZXIgcmVxdWlyZXMgdGhlc2UgZ3VhcmFudGVlcyBmcm9tIHRoZSBjaGFubmVsOgorCisqIFRoZSBwcHBfY2hhbm5lbCBvYmplY3QgbXVzdCBleGlzdCBmcm9tIHRoZSB0aW1lIHRoYXQKKyAgcHBwX3JlZ2lzdGVyX2NoYW5uZWwoKSBpcyBjYWxsZWQgdW50aWwgYWZ0ZXIgdGhlIGNhbGwgdG8KKyAgcHBwX3VucmVnaXN0ZXJfY2hhbm5lbCgpIHJldHVybnMuCisKKyogTm8gdGhyZWFkIG1heSBiZSBpbiBhIGNhbGwgdG8gYW55IG9mIHBwcF9pbnB1dCgpLCBwcHBfaW5wdXRfZXJyb3IoKSwKKyAgcHBwX291dHB1dF93YWtldXAoKSwgcHBwX2NoYW5uZWxfaW5kZXgoKSBvciBwcHBfdW5pdF9udW1iZXIoKSBmb3IgYQorICBjaGFubmVsIGF0IHRoZSB0aW1lIHRoYXQgcHBwX3VucmVnaXN0ZXJfY2hhbm5lbCgpIGlzIGNhbGxlZCBmb3IgdGhhdAorICBjaGFubmVsLgorCisqIHBwcF9yZWdpc3Rlcl9jaGFubmVsKCkgYW5kIHBwcF91bnJlZ2lzdGVyX2NoYW5uZWwoKSBtdXN0IGJlIGNhbGxlZAorICBmcm9tIHByb2Nlc3MgY29udGV4dCwgbm90IGludGVycnVwdCBvciBzb2Z0aXJxL0JIIGNvbnRleHQuCisKKyogVGhlIHJlbWFpbmluZyBnZW5lcmljIGxheWVyIGZ1bmN0aW9ucyBtYXkgYmUgY2FsbGVkIGF0IHNvZnRpcnEvQkgKKyAgbGV2ZWwgYnV0IG11c3Qgbm90IGJlIGNhbGxlZCBmcm9tIGEgaGFyZHdhcmUgaW50ZXJydXB0IGhhbmRsZXIuCisKKyogVGhlIGdlbmVyaWMgbGF5ZXIgbWF5IGNhbGwgdGhlIGNoYW5uZWwgc3RhcnRfeG1pdCgpIGZ1bmN0aW9uIGF0CisgIHNvZnRpcnEvQkggbGV2ZWwgYnV0IHdpbGwgbm90IGNhbGwgaXQgYXQgaW50ZXJydXB0IGxldmVsLiAgVGh1cyB0aGUKKyAgc3RhcnRfeG1pdCgpIGZ1bmN0aW9uIG1heSBub3QgYmxvY2suCisKKyogVGhlIGdlbmVyaWMgbGF5ZXIgd2lsbCBvbmx5IGNhbGwgdGhlIGNoYW5uZWwgaW9jdGwoKSBmdW5jdGlvbiBpbgorICBwcm9jZXNzIGNvbnRleHQuCisKK1RoZSBnZW5lcmljIGxheWVyIHByb3ZpZGVzIHRoZXNlIGd1YXJhbnRlZXMgdG8gdGhlIGNoYW5uZWxzOgorCisqIFRoZSBnZW5lcmljIGxheWVyIHdpbGwgbm90IGNhbGwgdGhlIHN0YXJ0X3htaXQoKSBmdW5jdGlvbiBmb3IgYQorICBjaGFubmVsIHdoaWxlIGFueSB0aHJlYWQgaXMgYWxyZWFkeSBleGVjdXRpbmcgaW4gdGhhdCBmdW5jdGlvbiBmb3IKKyAgdGhhdCBjaGFubmVsLgorCisqIFRoZSBnZW5lcmljIGxheWVyIHdpbGwgbm90IGNhbGwgdGhlIGlvY3RsKCkgZnVuY3Rpb24gZm9yIGEgY2hhbm5lbAorICB3aGlsZSBhbnkgdGhyZWFkIGlzIGFscmVhZHkgZXhlY3V0aW5nIGluIHRoYXQgZnVuY3Rpb24gZm9yIHRoYXQKKyAgY2hhbm5lbC4KKworKiBCeSB0aGUgdGltZSBhIGNhbGwgdG8gcHBwX3VucmVnaXN0ZXJfY2hhbm5lbCgpIHJldHVybnMsIG5vIHRocmVhZAorICB3aWxsIGJlIGV4ZWN1dGluZyBpbiBhIGNhbGwgZnJvbSB0aGUgZ2VuZXJpYyBsYXllciB0byB0aGF0IGNoYW5uZWwncworICBzdGFydF94bWl0KCkgb3IgaW9jdGwoKSBmdW5jdGlvbiwgYW5kIHRoZSBnZW5lcmljIGxheWVyIHdpbGwgbm90CisgIGNhbGwgZWl0aGVyIG9mIHRob3NlIGZ1bmN0aW9ucyBzdWJzZXF1ZW50bHkuCisKKworSW50ZXJmYWNlIHRvIHBwcGQKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBQUFAgZ2VuZXJpYyBsYXllciBleHBvcnRzIGEgY2hhcmFjdGVyIGRldmljZSBpbnRlcmZhY2UgY2FsbGVkCisvZGV2L3BwcC4gIFRoaXMgaXMgdXNlZCBieSBwcHBkIHRvIGNvbnRyb2wgUFBQIGludGVyZmFjZSB1bml0cyBhbmQKK2NoYW5uZWxzLiAgQWx0aG91Z2ggdGhlcmUgaXMgb25seSBvbmUgL2Rldi9wcHAsIGVhY2ggb3BlbiBpbnN0YW5jZSBvZgorL2Rldi9wcHAgYWN0cyBpbmRlcGVuZGVudGx5IGFuZCBjYW4gYmUgYXR0YWNoZWQgZWl0aGVyIHRvIGEgUFBQIHVuaXQKK29yIGEgUFBQIGNoYW5uZWwuICBUaGlzIGlzIGFjaGlldmVkIHVzaW5nIHRoZSBmaWxlLT5wcml2YXRlX2RhdGEgZmllbGQKK3RvIHBvaW50IHRvIGEgc2VwYXJhdGUgb2JqZWN0IGZvciBlYWNoIG9wZW4gaW5zdGFuY2Ugb2YgL2Rldi9wcHAuICBJbgordGhpcyB3YXkgYW4gZWZmZWN0IHNpbWlsYXIgdG8gU29sYXJpcycgY2xvbmUgb3BlbiBpcyBvYnRhaW5lZCwKK2FsbG93aW5nIHVzIHRvIGNvbnRyb2wgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiBQUFAgaW50ZXJmYWNlcyBhbmQKK2NoYW5uZWxzIHdpdGhvdXQgaGF2aW5nIHRvIGZpbGwgdXAgL2RldiB3aXRoIGh1bmRyZWRzIG9mIGRldmljZSBuYW1lcy4KKworV2hlbiAvZGV2L3BwcCBpcyBvcGVuZWQsIGEgbmV3IGluc3RhbmNlIGlzIGNyZWF0ZWQgd2hpY2ggaXMgaW5pdGlhbGx5Cit1bmF0dGFjaGVkLiAgVXNpbmcgYW4gaW9jdGwgY2FsbCwgaXQgY2FuIHRoZW4gYmUgYXR0YWNoZWQgdG8gYW4KK2V4aXN0aW5nIHVuaXQsIGF0dGFjaGVkIHRvIGEgbmV3bHktY3JlYXRlZCB1bml0LCBvciBhdHRhY2hlZCB0byBhbgorZXhpc3RpbmcgY2hhbm5lbC4gIEFuIGluc3RhbmNlIGF0dGFjaGVkIHRvIGEgdW5pdCBjYW4gYmUgdXNlZCB0byBzZW5kCithbmQgcmVjZWl2ZSBQUFAgY29udHJvbCBmcmFtZXMsIHVzaW5nIHRoZSByZWFkKCkgYW5kIHdyaXRlKCkgc3lzdGVtCitjYWxscywgYWxvbmcgd2l0aCBwb2xsKCkgaWYgbmVjZXNzYXJ5LiAgU2ltaWxhcmx5LCBhbiBpbnN0YW5jZQorYXR0YWNoZWQgdG8gYSBjaGFubmVsIGNhbiBiZSB1c2VkIHRvIHNlbmQgYW5kIHJlY2VpdmUgUFBQIGZyYW1lcyBvbgordGhhdCBjaGFubmVsLgorCitJbiBtdWx0aWxpbmsgdGVybXMsIHRoZSB1bml0IHJlcHJlc2VudHMgdGhlIGJ1bmRsZSwgd2hpbGUgdGhlIGNoYW5uZWxzCityZXByZXNlbnQgdGhlIGluZGl2aWR1YWwgcGh5c2ljYWwgbGlua3MuICBUaHVzLCBhIFBQUCBmcmFtZSBzZW50IGJ5IGEKK3dyaXRlIHRvIHRoZSB1bml0IChpLmUuLCB0byBhbiBpbnN0YW5jZSBvZiAvZGV2L3BwcCBhdHRhY2hlZCB0byB0aGUKK3VuaXQpIHdpbGwgYmUgc3ViamVjdCB0byBidW5kbGUtbGV2ZWwgY29tcHJlc3Npb24gYW5kIHRvIGZyYWdtZW50YXRpb24KK2Fjcm9zcyB0aGUgaW5kaXZpZHVhbCBsaW5rcyAoaWYgbXVsdGlsaW5rIGlzIGluIHVzZSkuICBJbiBjb250cmFzdCwgYQorUFBQIGZyYW1lIHNlbnQgYnkgYSB3cml0ZSB0byB0aGUgY2hhbm5lbCB3aWxsIGJlIHNlbnQgYXMtaXMgb24gdGhhdAorY2hhbm5lbCwgd2l0aG91dCBhbnkgbXVsdGlsaW5rIGhlYWRlci4KKworQSBjaGFubmVsIGlzIG5vdCBpbml0aWFsbHkgYXR0YWNoZWQgdG8gYW55IHVuaXQuICBJbiB0aGlzIHN0YXRlIGl0IGNhbgorYmUgdXNlZCBmb3IgUFBQIG5lZ290aWF0aW9uIGJ1dCBub3QgZm9yIHRoZSB0cmFuc2ZlciBvZiBkYXRhIHBhY2tldHMuCitJdCBjYW4gdGhlbiBiZSBjb25uZWN0ZWQgdG8gYSBQUFAgdW5pdCB3aXRoIGFuIGlvY3RsIGNhbGwsIHdoaWNoCittYWtlcyBpdCBhdmFpbGFibGUgdG8gc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIHBhY2tldHMgZm9yIHRoYXQgdW5pdC4KKworVGhlIGlvY3RsIGNhbGxzIHdoaWNoIGFyZSBhdmFpbGFibGUgb24gYW4gaW5zdGFuY2Ugb2YgL2Rldi9wcHAgZGVwZW5kCitvbiB3aGV0aGVyIGl0IGlzIHVuYXR0YWNoZWQsIGF0dGFjaGVkIHRvIGEgUFBQIGludGVyZmFjZSwgb3IgYXR0YWNoZWQKK3RvIGEgUFBQIGNoYW5uZWwuICBUaGUgaW9jdGwgY2FsbHMgd2hpY2ggYXJlIGF2YWlsYWJsZSBvbiBhbgordW5hdHRhY2hlZCBpbnN0YW5jZSBhcmU6CisKKyogUFBQSU9DTkVXVU5JVCBjcmVhdGVzIGEgbmV3IFBQUCBpbnRlcmZhY2UgYW5kIG1ha2VzIHRoaXMgL2Rldi9wcHAKKyAgaW5zdGFuY2UgdGhlICJvd25lciIgb2YgdGhlIGludGVyZmFjZS4gIFRoZSBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8KKyAgYW4gaW50IHdoaWNoIGlzIHRoZSBkZXNpcmVkIHVuaXQgbnVtYmVyIGlmID49IDAsIG9yIC0xIHRvIGFzc2lnbiB0aGUKKyAgbG93ZXN0IHVudXNlZCB1bml0IG51bWJlci4gIEJlaW5nIHRoZSBvd25lciBvZiB0aGUgaW50ZXJmYWNlIG1lYW5zCisgIHRoYXQgdGhlIGludGVyZmFjZSB3aWxsIGJlIHNodXQgZG93biBpZiB0aGlzIGluc3RhbmNlIG9mIC9kZXYvcHBwIGlzCisgIGNsb3NlZC4KKworKiBQUFBJT0NBVFRBQ0ggYXR0YWNoZXMgdGhpcyBpbnN0YW5jZSB0byBhbiBleGlzdGluZyBQUFAgaW50ZXJmYWNlLgorICBUaGUgYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvIGFuIGludCBjb250YWluaW5nIHRoZSB1bml0IG51bWJlci4KKyAgVGhpcyBkb2VzIG5vdCBtYWtlIHRoaXMgaW5zdGFuY2UgdGhlIG93bmVyIG9mIHRoZSBQUFAgaW50ZXJmYWNlLgorCisqIFBQUElPQ0FUVENIQU4gYXR0YWNoZXMgdGhpcyBpbnN0YW5jZSB0byBhbiBleGlzdGluZyBQUFAgY2hhbm5lbC4KKyAgVGhlIGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhbiBpbnQgY29udGFpbmluZyB0aGUgY2hhbm5lbCBudW1iZXIuCisKK1RoZSBpb2N0bCBjYWxscyBhdmFpbGFibGUgb24gYW4gaW5zdGFuY2Ugb2YgL2Rldi9wcHAgYXR0YWNoZWQgdG8gYQorY2hhbm5lbCBhcmU6CisKKyogUFBQSU9DREVUQUNIIGRldGFjaGVzIHRoZSBpbnN0YW5jZSBmcm9tIHRoZSBjaGFubmVsLiAgVGhpcyBpb2N0bCBpcworICBkZXByZWNhdGVkIHNpbmNlIHRoZSBzYW1lIGVmZmVjdCBjYW4gYmUgYWNoaWV2ZWQgYnkgY2xvc2luZyB0aGUKKyAgaW5zdGFuY2UuICBJbiBvcmRlciB0byBwcmV2ZW50IHBvc3NpYmxlIHJhY2VzIHRoaXMgaW9jdGwgd2lsbCBmYWlsCisgIHdpdGggYW4gRUlOVkFMIGVycm9yIGlmIG1vcmUgdGhhbiBvbmUgZmlsZSBkZXNjcmlwdG9yIHJlZmVycyB0byB0aGlzCisgIGluc3RhbmNlIChpLmUuIGFzIGEgcmVzdWx0IG9mIGR1cCgpLCBkdXAyKCkgb3IgZm9yaygpKS4KKworKiBQUFBJT0NDT05ORUNUIGNvbm5lY3RzIHRoaXMgY2hhbm5lbCB0byBhIFBQUCBpbnRlcmZhY2UuICBUaGUKKyAgYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvIGFuIGludCBjb250YWluaW5nIHRoZSBpbnRlcmZhY2UgdW5pdAorICBudW1iZXIuICBJdCB3aWxsIHJldHVybiBhbiBFSU5WQUwgZXJyb3IgaWYgdGhlIGNoYW5uZWwgaXMgYWxyZWFkeQorICBjb25uZWN0ZWQgdG8gYW4gaW50ZXJmYWNlLCBvciBFTlhJTyBpZiB0aGUgcmVxdWVzdGVkIGludGVyZmFjZSBkb2VzCisgIG5vdCBleGlzdC4KKworKiBQUFBJT0NESVNDT05OIGRpc2Nvbm5lY3RzIHRoaXMgY2hhbm5lbCBmcm9tIHRoZSBQUFAgaW50ZXJmYWNlIHRoYXQKKyAgaXQgaXMgY29ubmVjdGVkIHRvLiAgSXQgd2lsbCByZXR1cm4gYW4gRUlOVkFMIGVycm9yIGlmIHRoZSBjaGFubmVsCisgIGlzIG5vdCBjb25uZWN0ZWQgdG8gYW4gaW50ZXJmYWNlLgorCisqIEFsbCBvdGhlciBpb2N0bCBjb21tYW5kcyBhcmUgcGFzc2VkIHRvIHRoZSBjaGFubmVsIGlvY3RsKCkgZnVuY3Rpb24uCisKK1RoZSBpb2N0bCBjYWxscyB0aGF0IGFyZSBhdmFpbGFibGUgb24gYW4gaW5zdGFuY2UgdGhhdCBpcyBhdHRhY2hlZCB0bworYW4gaW50ZXJmYWNlIHVuaXQgYXJlOgorCisqIFBQUElPQ1NNUlUgc2V0cyB0aGUgTVJVIChtYXhpbXVtIHJlY2VpdmUgdW5pdCkgZm9yIHRoZSBpbnRlcmZhY2UuCisgIFRoZSBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYW4gaW50IGNvbnRhaW5pbmcgdGhlIG5ldyBNUlUgdmFsdWUuCisKKyogUFBQSU9DU0ZMQUdTIHNldHMgZmxhZ3Mgd2hpY2ggY29udHJvbCB0aGUgb3BlcmF0aW9uIG9mIHRoZQorICBpbnRlcmZhY2UuICBUaGUgYXJndW1lbnQgc2hvdWxkIGJlIGEgcG9pbnRlciB0byBhbiBpbnQgY29udGFpbmluZworICB0aGUgbmV3IGZsYWdzIHZhbHVlLiAgVGhlIGJpdHMgaW4gdGhlIGZsYWdzIHZhbHVlIHRoYXQgY2FuIGJlIHNldAorICBhcmU6CisJU0NfQ09NUF9UQ1AJCWVuYWJsZSB0cmFuc21pdCBUQ1AgaGVhZGVyIGNvbXByZXNzaW9uCisJU0NfTk9fVENQX0NDSUQJCWRpc2FibGUgY29ubmVjdGlvbi1pZCBjb21wcmVzc2lvbiBmb3IKKwkJCQlUQ1AgaGVhZGVyIGNvbXByZXNzaW9uCisJU0NfUkVKX0NPTVBfVENQCQlkaXNhYmxlIHJlY2VpdmUgVENQIGhlYWRlciBkZWNvbXByZXNzaW9uCisJU0NfQ0NQX09QRU4JCUNvbXByZXNzaW9uIENvbnRyb2wgUHJvdG9jb2wgKENDUCkgaXMKKwkJCQlvcGVuLCBzbyBpbnNwZWN0IENDUCBwYWNrZXRzCisJU0NfQ0NQX1VQCQlDQ1AgaXMgdXAsIG1heSAoZGUpY29tcHJlc3MgcGFja2V0cworCVNDX0xPT1BfVFJBRkZJQwkJc2VuZCBJUCB0cmFmZmljIHRvIHBwcGQKKwlTQ19NVUxUSUxJTksJCWVuYWJsZSBQUFAgbXVsdGlsaW5rIGZyYWdtZW50YXRpb24gb24KKwkJCQl0cmFuc21pdHRlZCBwYWNrZXRzCisJU0NfTVBfU0hPUlRTRVEJCWV4cGVjdCBzaG9ydCBtdWx0aWxpbmsgc2VxdWVuY2UKKwkJCQludW1iZXJzIG9uIHJlY2VpdmVkIG11bHRpbGluayBmcmFnbWVudHMKKwlTQ19NUF9YU0hPUlRTRVEJCXRyYW5zbWl0IHNob3J0IG11bHRpbGluayBzZXF1ZW5jZSBub3MuCisKKyAgVGhlIHZhbHVlcyBvZiB0aGVzZSBmbGFncyBhcmUgZGVmaW5lZCBpbiA8bGludXgvaWZfcHBwLmg+LiAgTm90ZQorICB0aGF0IHRoZSB2YWx1ZXMgb2YgdGhlIFNDX01VTFRJTElOSywgU0NfTVBfU0hPUlRTRVEgYW5kCisgIFNDX01QX1hTSE9SVFNFUSBiaXRzIGFyZSBpZ25vcmVkIGlmIHRoZSBDT05GSUdfUFBQX01VTFRJTElOSyBvcHRpb24KKyAgaXMgbm90IHNlbGVjdGVkLgorCisqIFBQUElPQ0dGTEFHUyByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgc3RhdHVzL2NvbnRyb2wgZmxhZ3MgZm9yIHRoZQorICBpbnRlcmZhY2UgdW5pdC4gIFRoZSBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYW4gaW50IHdoZXJlIHRoZSBpb2N0bAorICB3aWxsIHN0b3JlIHRoZSBmbGFncyB2YWx1ZS4gIEFzIHdlbGwgYXMgdGhlIHZhbHVlcyBsaXN0ZWQgYWJvdmUgZm9yCisgIFBQUElPQ1NGTEFHUywgdGhlIGZvbGxvd2luZyBiaXRzIG1heSBiZSBzZXQgaW4gdGhlIHJldHVybmVkIHZhbHVlOgorCVNDX0NPTVBfUlVOCQlDQ1AgY29tcHJlc3NvciBpcyBydW5uaW5nCisJU0NfREVDT01QX1JVTgkJQ0NQIGRlY29tcHJlc3NvciBpcyBydW5uaW5nCisJU0NfRENfRVJST1IJCUNDUCBkZWNvbXByZXNzb3IgZGV0ZWN0ZWQgbm9uLWZhdGFsIGVycm9yCisJU0NfRENfRkVSUk9SCQlDQ1AgZGVjb21wcmVzc29yIGRldGVjdGVkIGZhdGFsIGVycm9yCisKKyogUFBQSU9DU0NPTVBSRVNTIHNldHMgdGhlIHBhcmFtZXRlcnMgZm9yIHBhY2tldCBjb21wcmVzc2lvbiBvcgorICBkZWNvbXByZXNzaW9uLiAgVGhlIGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhIHBwcF9vcHRpb25fZGF0YQorICBzdHJ1Y3R1cmUgKGRlZmluZWQgaW4gPGxpbnV4L2lmX3BwcC5oPiksIHdoaWNoIGNvbnRhaW5zIGEKKyAgcG9pbnRlci9sZW5ndGggcGFpciB3aGljaCBzaG91bGQgZGVzY3JpYmUgYSBibG9jayBvZiBtZW1vcnkKKyAgY29udGFpbmluZyBhIENDUCBvcHRpb24gc3BlY2lmeWluZyBhIGNvbXByZXNzaW9uIG1ldGhvZCBhbmQgaXRzCisgIHBhcmFtZXRlcnMuICBUaGUgcHBwX29wdGlvbl9kYXRhIHN0cnVjdCBhbHNvIGNvbnRhaW5zIGEgYHRyYW5zbWl0JworICBmaWVsZC4gIElmIHRoaXMgaXMgMCwgdGhlIGlvY3RsIHdpbGwgYWZmZWN0IHRoZSByZWNlaXZlIHBhdGgsCisgIG90aGVyd2lzZSB0aGUgdHJhbnNtaXQgcGF0aC4KKworKiBQUFBJT0NHVU5JVCByZXR1cm5zLCBpbiB0aGUgaW50IHBvaW50ZWQgdG8gYnkgdGhlIGFyZ3VtZW50LCB0aGUgdW5pdAorICBudW1iZXIgb2YgdGhpcyBpbnRlcmZhY2UgdW5pdC4KKworKiBQUFBJT0NTREVCVUcgc2V0cyB0aGUgZGVidWcgZmxhZ3MgZm9yIHRoZSBpbnRlcmZhY2UgdG8gdGhlIHZhbHVlIGluCisgIHRoZSBpbnQgcG9pbnRlZCB0byBieSB0aGUgYXJndW1lbnQuICBPbmx5IHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQKKyAgaXMgdXNlZDsgaWYgdGhpcyBpcyAxIHRoZSBnZW5lcmljIGxheWVyIHdpbGwgcHJpbnQgc29tZSBkZWJ1ZworICBtZXNzYWdlcyBkdXJpbmcgaXRzIG9wZXJhdGlvbi4gIFRoaXMgaXMgb25seSBpbnRlbmRlZCBmb3IgZGVidWdnaW5nCisgIHRoZSBnZW5lcmljIFBQUCBsYXllciBjb2RlOyBpdCBpcyBnZW5lcmFsbHkgbm90IGhlbHBmdWwgZm9yIHdvcmtpbmcKKyAgb3V0IHdoeSBhIFBQUCBjb25uZWN0aW9uIGlzIGZhaWxpbmcuCisKKyogUFBQSU9DR0RFQlVHIHJldHVybnMgdGhlIGRlYnVnIGZsYWdzIGZvciB0aGUgaW50ZXJmYWNlIGluIHRoZSBpbnQKKyAgcG9pbnRlZCB0byBieSB0aGUgYXJndW1lbnQuCisKKyogUFBQSU9DR0lETEUgcmV0dXJucyB0aGUgdGltZSwgaW4gc2Vjb25kcywgc2luY2UgdGhlIGxhc3QgZGF0YQorICBwYWNrZXRzIHdlcmUgc2VudCBhbmQgcmVjZWl2ZWQuICBUaGUgYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvIGEKKyAgcHBwX2lkbGUgc3RydWN0dXJlIChkZWZpbmVkIGluIDxsaW51eC9wcHBfZGVmcy5oPikuICBJZiB0aGUKKyAgQ09ORklHX1BQUF9GSUxURVIgb3B0aW9uIGlzIGVuYWJsZWQsIHRoZSBzZXQgb2YgcGFja2V0cyB3aGljaCByZXNldAorICB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgaWRsZSB0aW1lcnMgaXMgcmVzdHJpY3RlZCB0byB0aG9zZSB3aGljaAorICBwYXNzIHRoZSBgYWN0aXZlJyBwYWNrZXQgZmlsdGVyLgorCisqIFBQUElPQ1NNQVhDSUQgc2V0cyB0aGUgbWF4aW11bSBjb25uZWN0aW9uLUlEIHBhcmFtZXRlciAoYW5kIHRodXMgdGhlCisgIG51bWJlciBvZiBjb25uZWN0aW9uIHNsb3RzKSBmb3IgdGhlIFRDUCBoZWFkZXIgY29tcHJlc3NvciBhbmQKKyAgZGVjb21wcmVzc29yLiAgVGhlIGxvd2VyIDE2IGJpdHMgb2YgdGhlIGludCBwb2ludGVkIHRvIGJ5IHRoZQorICBhcmd1bWVudCBzcGVjaWZ5IHRoZSBtYXhpbXVtIGNvbm5lY3Rpb24tSUQgZm9yIHRoZSBjb21wcmVzc29yLiAgSWYKKyAgdGhlIHVwcGVyIDE2IGJpdHMgb2YgdGhhdCBpbnQgYXJlIG5vbi16ZXJvLCB0aGV5IHNwZWNpZnkgdGhlIG1heGltdW0KKyAgY29ubmVjdGlvbi1JRCBmb3IgdGhlIGRlY29tcHJlc3Nvciwgb3RoZXJ3aXNlIHRoZSBkZWNvbXByZXNzb3IncworICBtYXhpbXVtIGNvbm5lY3Rpb24tSUQgaXMgc2V0IHRvIDE1LgorCisqIFBQUElPQ1NOUE1PREUgc2V0cyB0aGUgbmV0d29yay1wcm90b2NvbCBtb2RlIGZvciBhIGdpdmVuIG5ldHdvcmsKKyAgcHJvdG9jb2wuICBUaGUgYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvIGFuIG5waW9jdGwgc3RydWN0IChkZWZpbmVkCisgIGluIDxsaW51eC9pZl9wcHAuaD4pLiAgVGhlIGBwcm90b2NvbCcgZmllbGQgZ2l2ZXMgdGhlIFBQUCBwcm90b2NvbAorICBudW1iZXIgZm9yIHRoZSBwcm90b2NvbCB0byBiZSBhZmZlY3RlZCwgYW5kIHRoZSBgbW9kZScgZmllbGQKKyAgc3BlY2lmaWVzIHdoYXQgdG8gZG8gd2l0aCBwYWNrZXRzIGZvciB0aGF0IHByb3RvY29sOgorCisJTlBNT0RFX1BBU1MJbm9ybWFsIG9wZXJhdGlvbiwgdHJhbnNtaXQgYW5kIHJlY2VpdmUgcGFja2V0cworCU5QTU9ERV9EUk9QCXNpbGVudGx5IGRyb3AgcGFja2V0cyBmb3IgdGhpcyBwcm90b2NvbAorCU5QTU9ERV9FUlJPUglkcm9wIHBhY2tldHMgYW5kIHJldHVybiBhbiBlcnJvciBvbiB0cmFuc21pdAorCU5QTU9ERV9RVUVVRQlxdWV1ZSB1cCBwYWNrZXRzIGZvciB0cmFuc21pdCwgZHJvcCByZWNlaXZlZAorCQkJcGFja2V0cworCisgIEF0IHByZXNlbnQgTlBNT0RFX0VSUk9SIGFuZCBOUE1PREVfUVVFVUUgaGF2ZSB0aGUgc2FtZSBlZmZlY3QgYXMKKyAgTlBNT0RFX0RST1AuCisKKyogUFBQSU9DR05QTU9ERSByZXR1cm5zIHRoZSBuZXR3b3JrLXByb3RvY29sIG1vZGUgZm9yIGEgZ2l2ZW4KKyAgcHJvdG9jb2wuICBUaGUgYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvIGFuIG5waW9jdGwgc3RydWN0IHdpdGggdGhlCisgIGBwcm90b2NvbCcgZmllbGQgc2V0IHRvIHRoZSBQUFAgcHJvdG9jb2wgbnVtYmVyIGZvciB0aGUgcHJvdG9jb2wgb2YKKyAgaW50ZXJlc3QuICBPbiByZXR1cm4gdGhlIGBtb2RlJyBmaWVsZCB3aWxsIGJlIHNldCB0byB0aGUgbmV0d29yay0KKyAgcHJvdG9jb2wgbW9kZSBmb3IgdGhhdCBwcm90b2NvbC4KKworKiBQUFBJT0NTUEFTUyBhbmQgUFBQSU9DU0FDVElWRSBzZXQgdGhlIGBwYXNzJyBhbmQgYGFjdGl2ZScgcGFja2V0CisgIGZpbHRlcnMuICBUaGVzZSBpb2N0bHMgYXJlIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSBDT05GSUdfUFBQX0ZJTFRFUgorICBvcHRpb24gaXMgc2VsZWN0ZWQuICBUaGUgYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvIGEgc29ja19mcHJvZworICBzdHJ1Y3R1cmUgKGRlZmluZWQgaW4gPGxpbnV4L2ZpbHRlci5oPikgY29udGFpbmluZyB0aGUgY29tcGlsZWQgQlBGCisgIGluc3RydWN0aW9ucyBmb3IgdGhlIGZpbHRlci4gIFBhY2tldHMgYXJlIGRyb3BwZWQgaWYgdGhleSBmYWlsIHRoZQorICBgcGFzcycgZmlsdGVyOyBvdGhlcndpc2UsIGlmIHRoZXkgZmFpbCB0aGUgYGFjdGl2ZScgZmlsdGVyIHRoZXkgYXJlCisgIHBhc3NlZCBidXQgdGhleSBkbyBub3QgcmVzZXQgdGhlIHRyYW5zbWl0IG9yIHJlY2VpdmUgaWRsZSB0aW1lci4KKworKiBQUFBJT0NTTVJSVSBlbmFibGVzIG9yIGRpc2FibGVzIG11bHRpbGluayBwcm9jZXNzaW5nIGZvciByZWNlaXZlZAorICBwYWNrZXRzIGFuZCBzZXRzIHRoZSBtdWx0aWxpbmsgTVJSVSAobWF4aW11bSByZWNvbnN0cnVjdGVkIHJlY2VpdmUKKyAgdW5pdCkuICBUaGUgYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvIGFuIGludCBjb250YWluaW5nIHRoZSBuZXcgTVJSVQorICB2YWx1ZS4gIElmIHRoZSBNUlJVIHZhbHVlIGlzIDAsIHByb2Nlc3Npbmcgb2YgcmVjZWl2ZWQgbXVsdGlsaW5rCisgIGZyYWdtZW50cyBpcyBkaXNhYmxlZC4gIFRoaXMgaW9jdGwgaXMgb25seSBhdmFpbGFibGUgaWYgdGhlCisgIENPTkZJR19QUFBfTVVMVElMSU5LIG9wdGlvbiBpcyBzZWxlY3RlZC4KKworTGFzdCBtb2RpZmllZDogNy1mZWItMjAwMgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3Byb2NfbmV0X3RjcC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHJvY19uZXRfdGNwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWNiOTE1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3Byb2NfbmV0X3RjcC50eHQKQEAgLTAsMCArMSw0NyBAQAorVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIGludGVyZmFjZXMgL3Byb2MvbmV0L3RjcCBhbmQgL3Byb2MvbmV0L3RjcDYuCisKK1RoZXNlIC9wcm9jIGludGVyZmFjZXMgcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50bHkgYWN0aXZlIFRDUCAKK2Nvbm5lY3Rpb25zLCBhbmQgYXJlIGltcGxlbWVudGVkIGJ5IHRjcF9nZXRfaW5mbygpIGluIG5ldC9pcHY0L3RjcF9pcHY0LmMgYW5kCit0Y3A2X2dldF9pbmZvKCkgaW4gbmV0L2lwdjYvdGNwX2lwdjYuYywgcmVzcGVjdGl2ZWx5LgorCitJdCB3aWxsIGZpcnN0IGxpc3QgYWxsIGxpc3RlbmluZyBUQ1Agc29ja2V0cywgYW5kIG5leHQgbGlzdCBhbGwgZXN0YWJsaXNoZWQKK1RDUCBjb25uZWN0aW9ucy4gQSB0eXBpY2FsIGVudHJ5IG9mIC9wcm9jL25ldC90Y3Agd291bGQgbG9vayBsaWtlIHRoaXMgKHNwbGl0IAordXAgaW50byAzIHBhcnRzIGJlY2F1c2Ugb2YgdGhlIGxlbmd0aCBvZiB0aGUgbGluZSk6CisKKyAgIDQ2OiAwMTAzMTBBQzo5QzRDIDAzMDMxMEFDOjE3NzAgMDEgCisgICB8ICAgICAgfCAgICAgIHwgICAgICB8ICAgICAgfCAgIHwtLT4gY29ubmVjdGlvbiBzdGF0ZQorICAgfCAgICAgIHwgICAgICB8ICAgICAgfCAgICAgIHwtLS0tLS0+IHJlbW90ZSBUQ1AgcG9ydCBudW1iZXIKKyAgIHwgICAgICB8ICAgICAgfCAgICAgIHwtLS0tLS0tLS0tLS0tPiByZW1vdGUgSVB2NCBhZGRyZXNzCisgICB8ICAgICAgfCAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLT4gbG9jYWwgVENQIHBvcnQgbnVtYmVyCisgICB8ICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gbG9jYWwgSVB2NCBhZGRyZXNzCisgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gbnVtYmVyIG9mIGVudHJ5CisKKyAgIDAwMDAwMTUwOjAwMDAwMDAwIDAxOjAwMDAwMDE5IDAwMDAwMDAwICAKKyAgICAgIHwgICAgICAgIHwgICAgIHwgICAgIHwgICAgICAgfC0tPiBudW1iZXIgb2YgdW5yZWNvdmVyZWQgUlRPIHRpbWVvdXRzCisgICAgICB8ICAgICAgICB8ICAgICB8ICAgICB8LS0tLS0tLS0tLT4gbnVtYmVyIG9mIGppZmZpZXMgdW50aWwgdGltZXIgZXhwaXJlcworICAgICAgfCAgICAgICAgfCAgICAgfC0tLS0tLS0tLS0tLS0tLS0+IHRpbWVyX2FjdGl2ZSAoc2VlIGJlbG93KQorICAgICAgfCAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+IHJlY2VpdmUtcXVldWUKKyAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiB0cmFuc21pdC1xdWV1ZQorCisgICAxMDAwICAgICAgICAwIDU0MTY1Nzg1IDQgY2QxZTYwNDAgMjUgNCAyNyAzIC0xCisgICAgfCAgICAgICAgICB8ICAgIHwgICAgIHwgICAgfCAgICAgfCAgfCB8ICB8IHwtLT4gc2xvdyBzdGFydCBzaXplIHRocmVzaG9sZCwgCisgICAgfCAgICAgICAgICB8ICAgIHwgICAgIHwgICAgfCAgICAgfCAgfCB8ICB8ICAgICAgb3IgLTEgaWYgdGhlIHRyZXNob2xkCisgICAgfCAgICAgICAgICB8ICAgIHwgICAgIHwgICAgfCAgICAgfCAgfCB8ICB8ICAgICAgaXMgPj0gMHhGRkZGCisgICAgfCAgICAgICAgICB8ICAgIHwgICAgIHwgICAgfCAgICAgfCAgfCB8ICB8LS0tLT4gc2VuZGluZyBjb25nZXN0aW9uIHdpbmRvdworICAgIHwgICAgICAgICAgfCAgICB8ICAgICB8ICAgIHwgICAgIHwgIHwgfC0tLS0tLS0+IChhY2sucXVpY2s8PDEpfGFjay5waW5ncG9uZworICAgIHwgICAgICAgICAgfCAgICB8ICAgICB8ICAgIHwgICAgIHwgIHwtLS0tLS0tLS0+IFByZWRpY3RlZCB0aWNrIG9mIHNvZnQgY2xvY2sKKyAgICB8ICAgICAgICAgIHwgICAgfCAgICAgfCAgICB8ICAgICB8ICAgICAgICAgICAgICAoZGVsYXllZCBBQ0sgY29udHJvbCBkYXRhKQorICAgIHwgICAgICAgICAgfCAgICB8ICAgICB8ICAgIHwgICAgIHwtLS0tLS0tLS0tLS0+IHJldHJhbnNtaXQgdGltZW91dAorICAgIHwgICAgICAgICAgfCAgICB8ICAgICB8ICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0+IGxvY2F0aW9uIG9mIHNvY2tldCBpbiBtZW1vcnkKKyAgICB8ICAgICAgICAgIHwgICAgfCAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiBzb2NrZXQgcmVmZXJlbmNlIGNvdW50CisgICAgfCAgICAgICAgICB8ICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gaW5vZGUKKyAgICB8ICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiB1bmFuc3dlcmVkIDAtd2luZG93IHByb2JlcworICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+IHVpZAorCit0aW1lcl9hY3RpdmU6CisgIDAgIG5vIHRpbWVyIGlzIHBlbmRpbmcKKyAgMSAgcmV0cmFuc21pdC10aW1lciBpcyBwZW5kaW5nCisgIDIgIGFub3RoZXIgdGltZXIgKGUuZy4gZGVsYXllZCBhY2sgb3Iga2VlcGFsaXZlKSBpcyBwZW5kaW5nCisgIDMgIHRoaXMgaXMgYSBzb2NrZXQgaW4gVElNRV9XQUlUIHN0YXRlLiBOb3QgYWxsIGZpZWxkcyB3aWxsIGNvbnRhaW4gCisgICAgIGRhdGEgKG9yIGV2ZW4gZXhpc3QpCisgIDQgIHplcm8gd2luZG93IHByb2JlIHRpbWVyIGlzIHBlbmRpbmcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wdC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZTg4OGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcHQudHh0CkBAIC0wLDAgKzEsNTggQEAKK1RoaXMgaXMgdGhlIFJFQURNRSBmb3IgdGhlIEdyYWNpbGlzIFBhY2tldHdpbiBkZXZpY2UgZHJpdmVyLCB2ZXJzaW9uIDAuNQorQUxQSEEgZm9yIExpbnV4IDEuMy40My4KKworVGhlc2UgZmlsZXMgd2lsbCBhbGxvdyB5b3UgdG8gdGFsayB0byB0aGUgUGFja2VUd2luIChub3cga25vdyBhcyBQVCkgYW5kCitjb25uZWN0IHRocm91Z2ggaXQganVzdCBsaWtlIGEgcGFpciBvZiBUTkNzLiAgVG8gZG8gdGhpcyB5b3Ugd2lsbCBhbHNvCityZXF1aXJlIHRoZSBBWC4yNSBjb2RlIGluIHRoZSBrZXJuZWwgZW5hYmxlZC4KKworVGhlcmUgYXJlIGZvdXIgZmlsZXMgaW4gdGhpcyBhcmNoaXZlOyB0aGlzIHJlYWRtZSwgYSBwYXRjaCBmaWxlLCBhIC5jIGZpbGUKK2FuZCBmaW5hbGx5IGEgLmggZmlsZS4gIFRoZSB0d28gcHJvZ3JhbSBmaWxlcyBuZWVkIHRvIGJlIHB1dCBpbnRvIHRoZQorZHJpdmVycy9uZXQgZGlyZWN0b3J5IGluIHRoZSBMaW51eCBzb3VyY2UgdHJlZSwgZm9yIG1lIHRoaXMgaXMgdGhlCitkaXJlY3RvcnkgL3Vzci9zcmMvbGludXgvZHJpdmVycy9uZXQuICBUaGUgcGF0Y2ggZmlsZSBuZWVkcyB0byBiZSBwYXRjaGVkIGluCithdCB0aGUgdG9wIG9mIHRoZSBMaW51eCBzb3VyY2UgdHJlZSAoL3Vzci9zcmMvbGludXggaW4gbXkgY2FzZSkuCisKK1lvdSB3aWxsIG1vc3QgcHJvYmFibHkgaGF2ZSB0byBlZGl0IHRoZSBwdC5jIGZpbGUgdG8gc3VpdCB5b3VyIG93biBzZXR1cCwKK3RoaXMgc2hvdWxkIGp1c3QgaW52b2x2ZSBjaGFuZ2luZyBzb21lIG9mIHRoZSBkZWZpbmVzIGF0IHRoZSB0b3Agb2YgdGhlIGZpbGUuIAorUGxlYXNlIG5vdGUgdGhhdCBpZiB5b3UgcnVuIGFuIGV4dGVybmFsIG1vZGVtIHlvdSBtdXN0IHNwZWNpZnkgYSBzcGVlZCBvZiAwLgorCitUaGUgcHJvZ3JhbSBpcyBjdXJyZW50bHkgc2V0dXAgdG8gcnVuIGEgNDgwMCBiYXVkIGV4dGVybmFsIG1vZGVtIG9uIHBvcnQgQQorYW5kIGEgS2FudHJvbmljcyBERS05NjAwIGRhdWdodGVyIGJvYXJkIG9uIHBvcnQgQiBzbyBpZiB5b3UgaGF2ZSB0aGlzIChvcgorc29tZXRoaW5nIHNpbWlsYXIpIHRoZW4geW91J3JlIHJpZ2h0LgorCitUbyBjb21waWxlIGluIHRoZSBkcml2ZXIsIHB1dCB0aGUgZmlsZXMgaW4gdGhlIGNvcnJlY3QgcGxhY2UgYW5kIHBhdGNoIGluCit0aGUgZGlmZi4gIFlvdSB3aWxsIGhhdmUgdG8gcmUtY29uZmlndXJlIHRoZSBrZXJuZWwgYWdhaW4gYmVmb3JlIHlvdQorcmVjb21waWxlIGl0LiAKKworVGhlIGRyaXZlciBpcyBub3QgcmVhbCBnb29kIGF0IHRoZSBtb21lbnQgZm9yIGZpbmRpbmcgdGhlIGNhcmQuICBZb3UgY2FuCisnaGVscCcgaXQgYnkgY2hhbmdpbmcgdGhlIG9yZGVyIG9mIHRoZSBwb3RlbnRpYWwgYWRkcmVzc2VzIGluIHRoZSBzdHJ1Y3R1cmUKK2ZvdW5kIGluIHRoZSBwdF9pbml0KCkgZnVuY3Rpb24gc28gdGhlIGFkZHJlc3Mgb2Ygd2hlcmUgdGhlIGNhcmQgaXMgaXMgcHV0CitmaXJzdC4KKworQWZ0ZXIgY29tcGlsaW5nLCB5b3UgaGF2ZSB0byBnZXQgdGhlbSBnb2luZywgdGhleSBhcmUgcHJldHR5IHdlbGwgbGlrZSBhbnkKK290aGVyIG5ldCBkZXZpY2UgYW5kIGp1c3QgbmVlZCBpZmNvbmZpZyB0byBnZXQgdGhlbSBnb2luZy4KK0FzIGFuIGV4YW1wbGUsIGhlcmUgaXMgbXkgL2V0Yy9yYy5uZXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMKKyMgQ29uZmlndXJlIHRoZSBQYWNrZVR3aW4sIHBvcnQgQS4KKy9zYmluL2lmY29uZmlnIHB0MGEgNDQuMTM2LjguODcgaHcgYXgyNSB2azJ4bHogbXR1IDUxMiAKKy9zYmluL2lmY29uZmlnIHB0MGEgNDQuMTM2LjguODcgYnJvYWRjYXN0IDQ0LjEzNi44LjI1NSBuZXRtYXNrIDI1NS4yNTUuMjU1LjAKKy9zYmluL3JvdXRlIGFkZCAtbmV0IDQ0LjEzNi44LjAgbmV0bWFzayAyNTUuMjU1LjI1NS4wIGRldiBwdDBhCisvc2Jpbi9yb3V0ZSBhZGQgLW5ldCA0NC4wLjAuMCBuZXRtYXNrIDI1NS4wLjAuMCBndyA0NC4xMzYuOC42OCBkZXYgcHQwYQorL3NiaW4vcm91dGUgYWRkIC1uZXQgMTM4LjI1LjE2LjAgbmV0bWFzayAyNTUuMjU1LjI0MC4wIGRldiBwdDBhCisvc2Jpbi9yb3V0ZSBhZGQgLWhvc3QgNDQuMTM2LjguMjU1IGRldiBwdDBhCisjCisjIENvbmZpZ3VyZSB0aGUgUGFja2VUd2luLCBwb3J0IEIuCisvc2Jpbi9pZmNvbmZpZyBwdDBiIDQ0LjEzNi44Ljg3IGh3IGF4MjUgdmsyeGx6LTEgbXR1IDUxMgorL3NiaW4vaWZjb25maWcgcHQwYiA0NC4xMzYuOC44NyBicm9hZGNhc3QgNDQuMjU1LjI1NS4yNTUgbmV0bWFzayAyNTUuMC4wLjAKKy9zYmluL3JvdXRlIGFkZCAtaG9zdCA0NC4xMzYuOC4yMTYgZGV2IHB0MGIKKy9zYmluL3JvdXRlIGFkZCAtaG9zdCA0NC4xMzYuOC45NSAgZGV2IHB0MGIKKy9zYmluL3JvdXRlIGFkZCAtaG9zdCA0NC4yNTUuMjU1LjI1NSBkZXYgcHQwYgorCitUaGlzIHZlcnNpb24gb2YgdGhlIGRyaXZlciBjb21lcyB1bmRlciB0aGUgR05VIEdQTC4gIElmIHlvdSBoYXZlIG9uZSBvZiBteQorcHJldmlvdXMgKG5vbi1HUEwpIHZlcnNpb25zIG9mIHRoZSBkcml2ZXIsIHBsZWFzZSB1cGRhdGUgdG8gdGhpcyBvbmUuCisKK0kgaG9wZSB0aGF0IHRoaXMgYWxsIHdvcmtzIHdlbGwgZm9yIHlvdS4gIEkgd291bGQgYmUgcGxlYXNlZCB0byBoZWFyIGhvdworbWFueSBwZW9wbGUgdXNlIHRoZSBkcml2ZXIgYW5kIGlmIGl0IGRvZXMgaXRzIGpvYi4KKworICAtIENyYWlnIHZrMnhseiA8Y3NtYWxsQHNtYWxsLmRyb3BiZWFyLmlkLmF1PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3JheV9jcy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcmF5X2NzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWRlZjAwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3JheV9jcy50eHQKQEAgLTAsMCArMSwxNTEgQEAKK1NlcHRlbWJlciAyMSwgMTk5OQorCitDb3B5cmlnaHQgKGMpIDE5OTggIENvcmV5IFRob21hcyAoY29yZXlAd29ybGQuc3RkLmNvbSkKKworVGhpcyBmaWxlIGlzIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgUmF5bGluayBXaXJlbGVzcyBMQU4gY2FyZCBkcml2ZXIgZm9yCitMaW51eC4gIFRoZSBSYXlsaW5rIHdpcmVsZXNzIExBTiBjYXJkIGlzIGEgUENNQ0lBIGNhcmQgd2hpY2ggcHJvdmlkZXMgSUVFRQorODAyLjExIGNvbXBhdGlibGUgd2lyZWxlc3MgbmV0d29yayBjb25uZWN0aXZpdHkgYXQgMSBhbmQgMiBtZWdhYml0cy9zZWNvbmQuCitTZWUgaHR0cDovL3d3dy5yYXl0aGVvbi5jb20vbWljcm8vcmF5bGluay8gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIFJheWxpbmsKK2NhcmQuICBUaGlzIGRyaXZlciBpcyBpbiBlYXJseSBkZXZlbG9wbWVudCBhbmQgZG9lcyBoYXZlIGJ1Z3MuICBTZWUgdGhlIGtub3duCitidWdzIGFuZCBsaW1pdGF0aW9ucyBhdCB0aGUgZW5kIG9mIHRoaXMgZG9jdW1lbnQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCitUaGlzIGRyaXZlciBhbHNvIHdvcmtzIHdpdGggV2ViR2VhcidzIEF2aWF0b3IgMi40IGFuZCBBdmlhdG9yIFBybword2lyZWxlc3MgTEFOIGNhcmRzLgorCitBcyBvZiBrZXJuZWwgMi4zLjE4LCB0aGUgcmF5X2NzIGRyaXZlciBpcyBwYXJ0IG9mIHRoZSBMaW51eCBrZXJuZWwKK3NvdXJjZS4gIE15IHdlYiBwYWdlIGZvciB0aGUgZGV2ZWxvcG1lbnQgb2YgcmF5X2NzIGlzIGF0CitodHRwOi8vd29ybGQuc3RkLmNvbS9+Y29yZXkvcmF5bGluay5odG1sIGFuZCBJIGNhbiBiZSBlbWFpbGVkIGF0Citjb3JleUB3b3JsZC5zdGQuY29tCisKK1RoZSBrZXJuZWwgZHJpdmVyIGlzIGJhc2VkIG9uIHJheV9jcy0xLjYyLnRnegorCitUaGUgZHJpdmVyIGF0IG15IHdlYiBwYWdlIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYXMgYW4gYWRkIG9uIHRvCitEYXZpZCBIaW5kcyBwY21jaWEgcGFja2FnZS4gIEFsbCB0aGUgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMgYXJlCithdmFpbGFibGUgd2hlbiBjb21waWxlZCBhcyBhIG1vZHVsZS4gIFdoZW4gYnVpbHQgaW50byB0aGUga2VybmVsLCBvbmx5Cit0aGUgZXNzaWQ9IHN0cmluZyBwYXJhbWV0ZXIgaXMgYXZhaWxhYmxlIHZpYSB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4KK1RoaXMgd2lsbCBjaGFuZ2UgYWZ0ZXIgdGhlIG1ldGhvZCBvZiBzb3J0aW5nIG91dCBwYXJhbWV0ZXJzIGZvciBhbGwKK3RoZSBQQ01DSUEgZHJpdmVycyBpcyBhZ3JlZWQgdXBvbi4gIElmIHlvdSBtdXN0IGhhdmUgYSBidWlsdCBpbiBkcml2ZXIKK3dpdGggbm9uZGVmYXVsdCBwYXJhbWV0ZXJzLCB0aGV5IGNhbiBiZSBlZGl0ZWQgaW4KKy91c3Ivc3JjL2xpbnV4L2RyaXZlcnMvbmV0L3BjbWNpYS9yYXlfY3MuYy4gIFNlYXJjaGluZyBmb3IgTU9EVUxFX1BBUk0KK3dpbGwgZmluZCB0aGVtIGFsbC4KKworSW5mb3JtYXRpb24gb24gY2FyZCBzZXJ2aWNlcyBpcyBhdmFpbGFibGUgYXQ6CisJZnRwOi8vaHlwZXIuc3RhbmZvcmQuZWR1L3B1Yi9wY21jaWEvZG9jCisgICAgICAgIGh0dHA6Ly9oeXBlci5zdGFuZm9yZC5lZHUvSHlwZXJOZXdzL2dldC9wY21jaWEvaG9tZS5odG1sCisKKworQ2FyZCBzZXJ2aWNlcyB1c2VyIHByb2dyYW1zIGFyZSBzdGlsbCByZXF1aXJlZCBmb3IgUENNQ0lBIGRldmljZXMuCitwY21jaWEtY3MtMy4xLjEgb3IgZ3JlYXRlciBpcyByZXF1aXJlZCBmb3IgdGhlIGtlcm5lbCB2ZXJzaW9uIG9mCit0aGUgZHJpdmVyLgorCitDdXJyZW50bHksIHJheV9jcyBpcyBub3QgcGFydCBvZiBEYXZpZCBIaW5kcyBjYXJkIHNlcnZpY2VzIHBhY2thZ2UsCitzbyB0aGUgZm9sbG93aW5nIG1hZ2ljIGlzIHJlcXVpcmVkLgorCitBdCB0aGUgZW5kIG9mIHRoZSAvZXRjL3BjbWNpYS9jb25maWcub3B0cyBmaWxlLCBhZGQgdGhlIGxpbmU6IAorc291cmNlIC4vcmF5X2NzLm9wdHMgCitUaGlzIHdpbGwgbWFrZSBjYXJkIHNlcnZpY2VzIHJlYWQgdGhlIHJheV9jcy5vcHRzIGZpbGUKK3doZW4gc3RhcnRpbmcuICBDcmVhdGUgdGhlIGZpbGUgL2V0Yy9wY21jaWEvcmF5X2NzLm9wdHMgY29udGFpbmluZyB0aGUKK2ZvbGxvd2luZzoKKworIyMjIyBzdGFydCBvZiAvZXRjL3BjbWNpYS9yYXlfY3Mub3B0cyAjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgUmF5bGluayBXaXJlbGVzcyBMQU4gUENNQ0lBIGNhcmQKK2RldmljZSAicmF5X2NzIgorICBjbGFzcyAibmV0d29yayIgbW9kdWxlICJtaXNjL3JheV9jcyIKKworY2FyZCAiUmF5TGluayBQQyBDYXJkIFdMQU4gQWRhcHRlciIKKyAgbWFuZmlkIDB4MDFhNiwgMHgwMDAwCisgIGJpbmQgInJheV9jcyIKKworbW9kdWxlICJtaXNjL3JheV9jcyIgb3B0cyAiIgorIyMjIyBlbmQgb2YgL2V0Yy9wY21jaWEvcmF5X2NzLm9wdHMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKworVG8gam9pbiBhbiBleGlzdGluZyBuZXR3b3JrIHdpdGgKK2RpZmZlcmVudCBwYXJhbWV0ZXJzLCBjb250YWN0IHRoZSBuZXR3b3JrIGFkbWluaXN0cmF0b3IgZm9yIHRoZSAKK2NvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24sIGFuZCBlZGl0IC9ldGMvcGNtY2lhL3JheV9jcy5vcHRzLgorQWRkIHRoZSBwYXJhbWV0ZXJzIGJlbG93IGJldHdlZW4gdGhlIGVtcHR5IHF1b3Rlcy4KKworUGFyYW1ldGVycyBmb3IgcmF5X2NzIGRyaXZlciB3aGljaCBtYXkgYmUgc3BlY2lmaWVkIGluIHJheV9jcy5vcHRzOgorCitiYyAgICAgICAgICAgICAgaW50ZWdlciAgICAgICAgIDAgPSBub3JtYWwgbW9kZSAoODAyLjExIHRpbWluZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9IHNsb3cgZG93biBpbnRlciBmcmFtZSB0aW1pbmcgdG8gYWxsb3cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiB3aXRoIG9sZGVyIGJyZWV6ZWNvbSBhY2Nlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy4KKworYmVhY29uX3BlcmlvZAlpbnRlZ2VyICAgICAgICAgYmVhY29uIHBlcmlvZCBpbiBLaWxvLW1pY3Jvc2Vjb25kcworCQkJCWxlZ2FsIHZhbHVlcyA9IG11c3QgYmUgaW50ZWdlciBtdWx0aXBsZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgaG9wIGR3ZWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgPSAyNTYKKworY291bnRyeSAgICAgICAgIGludGVnZXIgICAgICAgICAxID0gVVNBIChkZWZhdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyID0gRXVyb3BlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgPSBKYXBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ID0gS29yZWEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNSA9IFNwYWluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYgPSBGcmFuY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNyA9IElzcmFlbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ID0gQXVzdHJhbGlhCisKK2Vzc2lkCQlzdHJpbmcJCUVTUyBJRCAtIG5ldHdvcmsgbmFtZSB0byBqb2luCisJCQkJc3RyaW5nIHdpdGggbWF4aW11bSBsZW5ndGggb2YgMzIgY2hhcnMKKwkJCQlkZWZhdWx0IHZhbHVlID0gIkFESE9DX0VTU0lEIgorCitob3BfZHdlbGwJaW50ZWdlciAgICAgICAgIGhvcCBkd2VsbCB0aW1lIGluIEtpbG8tbWljcm9zZWNvbmRzIAorCQkJCWxlZ2FsIHZhbHVlcyA9IDE2LDMyLDY0LDEyOChkZWZhdWx0KSwyNTYKKworaXJxX21hc2sJaW50ZWdlciAgICAgICAgIGxpbnV4IHN0YW5kYXJkIDE2IGJpdCB2YWx1ZSAxYml0L0lSUQorCQkJCWxzYiBpcyBJUlEgMCwgYml0IDEgaXMgSVJRIDEgZXRjLgorCQkJCVVzZWQgdG8gcmVzdHJpY3QgY2hvaWNlIG9mIElSUSdzIHRvIHVzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVjb21tZW5kZWQgbWV0aG9kIGZvciBjb250cm9sbGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHRzIGlzIGluIC9ldGMvcGNtY2lhL2NvbmZpZy5vcHRzCisKK25ldF90eXBlCWludGVnZXIJCTAgKGRlZmF1bHQpID0gYWRob2MgbmV0d29yaywgCisJCQkJMSA9IGluZnJhc3RydWN0dXJlCisKK3BoeV9hZGRyCXN0cmluZyAgICAgICAgICBzdHJpbmcgY29udGFpbmluZyBuZXcgTUFDIGFkZHJlc3MgaW4KKwkJCQloZXgsIG11c3Qgc3RhcnQgd2l0aCB4IGVnCisJCQkJeDAwMDA4ZjEyMzQ1NgorCitwc20JCWludGVnZXIgICAgICAgICAwID0gY29udGludW91c2x5IGFjdGl2ZQorCQkJCTEgPSBwb3dlciBzYXZlIG1vZGUgKG5vdCB1c2VmdWwgeWV0KQorCitwY19kZWJ1ZwlpbnRlZ2VyCQkoMC01KSBsYXJnZXIgdmFsdWVzIGZvciBtb3JlIHZlcmJvc2UKKwkJCQlsb2dnaW5nLiAgUmVwbGFjZXMgcmF5X2RlYnVnLgorCityYXlfZGVidWcJaW50ZWdlcgkJUmVwbGFjZWQgd2l0aCBwY19kZWJ1ZworCityYXlfbWVtX3NwZWVkICAgaW50ZWdlciAgICAgICAgIGRlZmF1bHRzIHRvIDUwMAorCitzbmlmZmVyICAgICAgICAgaW50ZWdlciAgICAgICAgIDAgPSBub3Qgc25pZmZlciAoZGVmYXVsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA9IHNuaWZmZXIgd2hpY2ggY2FuIGJlIHVzZWQgdG8gcmVjb3JkIGFsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29yayB0cmFmZmljIHVzaW5nIHRjcGR1bXAgb3Igc2ltaWxhciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXQgbm8gbm9ybWFsIG5ldHdvcmsgdXNlIGlzIGFsbG93ZWQuCisKK3RyYW5zbGF0ZQlpbnRlZ2VyCQkwID0gbm8gdHJhbnNsYXRpb24gKGVuY2Fwc3VsYXRlIGZyYW1lcykKKwkJCQkxID0gdHJhbnNsYXRpb24gICAgKFJGQzEwNDIvODAyLjEpCisKKworTW9yZSBvbiBzbmlmZmVyIG1vZGU6CisKK3RjcGR1bXAgZG9lcyBub3QgdW5kZXJzdGFuZCA4MDIuMTEgaGVhZGVycywgc28gaXQgY2FuJ3QKK2ludGVycHJldCB0aGUgY29udGVudHMsIGJ1dCBpdCBjYW4gcmVjb3JkIHRvIGEgZmlsZS4gIFRoaXMgaXMgb25seQordXNlZnVsIGZvciBkZWJ1Z2dpbmcgODAyLjExIGxvd2xldmVsIHByb3RvY29scyB0aGF0IGFyZSBub3QgdmlzaWJsZSB0bworbGludXguICBJZiB5b3Ugd2FudCB0byB3YXRjaCBmdHAgeGZlcnMsIG9yIGRvIHNpbWlsYXIgdGhpbmdzLCB5b3UKK2Rvbid0IG5lZWQgdG8gdXNlIHNuaWZmZXIgbW9kZS4gIEFsc28sIHNvbWUgcGFja2V0IHR5cGVzIGFyZSBuZXZlcgorc2VudCB1cCBieSB0aGUgY2FyZCwgc28geW91IHdpbGwgbmV2ZXIgc2VlIHRoZW0gKGFjaywgcnRzLCBjdHMsIHByb2JlCitldGMuKSAgVGhlcmUgaXMgYSBzaW1wbGUgcHJvZ3JhbSAoc2hvd2NhcCkgaW5jbHVkZWQgaW4gdGhlIHJheV9jcworcGFja2FnZSB3aGljaCBwYXJzZXMgdGhlIDgwMi4xMSBoZWFkZXJzLgorCitLbm93biBQcm9ibGVtcyBhbmQgbWlzc2luZyBmZWF0dXJlcworCisgICAgICAgIERvZXMgbm90IHdvcmsgd2l0aCBub24geDg2CisKKwlEb2VzIG5vdCB3b3JrIHdpdGggU01QCisKKwlTdXBwb3J0IGZvciBkZWZyYWdtZW50aW5nIGZyYW1lcyBpcyBub3QgeWV0IGRlYnVnZ2VkLCBhbmQgaW4KKwlmYWN0IGlzIGtub3duIHRvIG5vdCB3b3JrLiAgSSBoYXZlIG5ldmVyIGVuY291bnRlcmVkIGEgbmV0IHNldAorCXVwIHRvIGZyYWdtZW50LCBidXQgc3RpbGwsIGl0IHNob3VsZCBiZSBmaXhlZC4KKworCVRoZSBpb2N0bCBzdXBwb3J0IGlzIGluY29tcGxldGUuICBUaGUgaGFyZHdhcmUgYWRkcmVzcyBjYW5ub3QgYmUgc2V0CisJdXNpbmcgaWZjb25maWcgeWV0LiAgSWYgYSBkaWZmZXJlbnQgaGFyZHdhcmUgYWRkcmVzcyBpcyBuZWVkZWQsIGl0IG1heQorCWJlIHNldCB1c2luZyB0aGUgcGh5X2FkZHIgcGFyYW1ldGVyIGluIHJheV9jcy5vcHRzLiAgVGhpcyByZXF1aXJlcworCWEgY2FyZCBpbnNlcnRpb24gdG8gdGFrZSBlZmZlY3QuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcm91dGluZy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcm91dGluZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI2ODM4YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yb3V0aW5nLnR4dApAQCAtMCwwICsxLDQ2IEBACitUaGUgZGlyZWN0b3J5IGZ0cC5pbnIuYWMucnU6L2lwLXJvdXRpbmcgY29udGFpbnM6CisKKy0gaXByb3V0ZS5jIC0gInByb2Zlc3Npb25hbCIgcm91dGluZyB0YWJsZSBtYWludGVuYW5jZSB1dGlsaXR5LgorCistIHJkaXNjLnRhci5neiAtIHJkaXNjIGRhZW1vbiwgcG9ydGVkIGZyb20gU3VuLgorCVNUUk9OR0xZIFJFQ09NTUVOREVEIEZPUiBBTEwgSE9TVFMuCisKKy0gcm91dGluZy50Z3ogLSBvcmlnaW5hbCBNaWtlIE1jTGFnYW4ncyByb3V0ZSBieSBzb3VyY2UgcGF0Y2guCisJCUN1cnJlbnRseSBpdCBpcyBvYnNvbGV0ZS4KKworLSBnYXRlZC5kaWYtc3M8TkVXRVNUPi5neiAtIGdhdGVkLVIzXzZBbHBoYV8yIGZpeGVzLgorCSAgICAgICAgTG9vayBhdCBSRUFETUUuZ2F0ZWQKKworLSBtcm91dGVkLTMuOC5kaWYuZ3ogLSBtcm91dGVkLTMuOCBmaXhlcy4KKworLSBydG1vbi5jIC0gdHJpdmlhbCBkZWJ1Z2dpbmcgdXRpbGl0eTogcmVhZHMgYW5kIHN0b3JlcyBuZXRsaW5rLgorCisKK05FV1MgZm9yIHVzZXIuCisKKy0gUG9saWN5IGJhc2VkIHJvdXRpbmcuIFJvdXRpbmcgZGVjaXNpb25zIGFyZSBtYWRlIG9uIHRoZSBiYXNpcworICBub3Qgb25seSBvZiBkZXN0aW5hdGlvbiBhZGRyZXNzLCBidXQgYWxzbyBzb3VyY2UgYWRkcmVzcywKKyAgVE9TIGFuZCBpbmNvbWluZyBpbnRlcmZhY2UuCistIENvbXBsZXRlIHNldCBvZiBJUCBsZXZlbCBjb250cm9sIG1lc3NhZ2VzLgorICBOb3cgTGludXggaXMgdGhlIG9ubHkgT1MgaW4gdGhlIHdvcmxkIGNvbXBseWluZyB0byBSRkMgcmVxdWlyZW1lbnRzLgorICBHcmVhdCB3aW4gOCkKKy0gTmV3IGludGVyZmFjZSBhZGRyZXNzaW5nIHBhcmFkaWdtLgorICBBc3NpZ25tZW50IG9mIGFkZHJlc3MgcmFuZ2VzIHRvIGludGVyZmFjZSwKKyAgbXVsdGlwbGUgcHJlZml4ZXMgZXRjLiBldGMuCisgIERvIG5vdCBib3RoZXIsIGl0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgb2xkIG9uZS4gTW9yZW92ZXI6CistIFlvdSBkb24ndCBuZWVkIHRvIGRvICJyb3V0ZSBhZGQgYWFhLmJiYi5jY2MuLi4gZXRoMCIgYW55bW9yZSwKKyAgaXQgaXMgZG9uZSBhdXRvbWF0aWNhbGx5LgorLSAiQWJzdHJhY3QiIFVOSVggc29ja2V0cyBhbmQgc2VjdXJpdHkgZW5oYW5jZW1lbnRzLgorICBUaGlzIGlzIG5lY2Vzc2FyeSB0byB1c2UgVElSUEMgYW5kIFRMSSBlbXVsYXRpb24gbGlicmFyeS4KKworTkVXUyBmb3IgaGFja2VyLgorCistIE5ldyBkZXN0aW5hdGlvbiBjYWNoZS4gRmxleGlibGUsIHJvYnVzdCBhbmQganVzdCBiZWF1dGlmdWwuCistIE5ldHdvcmsgc3RhY2sgaXMgcmVvcmRlcmVkLCBzaW1wbGlmaWVkLCBvcHRpbWl6ZWQsIGEgbG90IG9mIGJ1Z3MgZml4ZWQuCisgICh3ZWxsLCBhbmQgbmV3IGJ1Z3Mgd2VyZSBpbnRyb2R1Y2VkLCBidXQgSSBoYXZlbid0IHNlZW4gdGhlbSB5ZXQgOCkpCisgIEl0IGlzIGRpZmZpY3VsdCB0byBkZXNjcmliZSBhbGwgdGhlIGNoYW5nZXMsIGxvb2sgaW50byBzb3VyY2UuCisKK0lmIHlvdSBzZWUgdGhpcyBmaWxlLCB0aGVuIHRoaXMgcGF0Y2ggd29ya3MgOCkKKworQWxleGV5IEt1em5ldHNvdi4KK2t1em5ldEBtczIuaW5yLmFjLnJ1CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvczJpby50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvczJpby50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcyNmI1MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zMmlvLnR4dApAQCAtMCwwICsxLDQ4IEBACitTMklPIFRlY2hub2xvZ2llcyBYRnJhbWUgMTAgR2lnIGFkYXB0ZXIuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0kuIE1vZHVsZSBsb2FkYWJsZSBwYXJhbWV0ZXJzLgorV2hlbiBsb2FkZWQgYXMgYSBtb2R1bGUsIHRoZSBkcml2ZXIgcHJvdmlkZXMgYSBob3N0IG9mIE1vZHVsZSBsb2FkYWJsZQorcGFyYW1ldGVycywgc28gdGhlIGRldmljZSBjYW4gYmUgdHVuZWQgYXMgcGVyIHRoZSB1c2VycyBuZWVkcy4KK0EgbGlzdCBvZiB0aGUgTW9kdWxlIHBhcmFtcyBpcyBnaXZlbiBiZWxvdy4KKyhpKQlyaW5nX251bTogVGhpcyBjYW4gYmUgdXNlZCB0byBwcm9ncmFtIHRoZSBudW1iZXIgb2YKKwkJIHJlY2VpdmUgcmluZ3MgdXNlZCBpbiB0aGUgZHJpdmVyLgorKGlpKQlyaW5nX2xlbjogVGhpcyBkZWZpbmVzIHRoZSBudW1iZXIgb2YgZGVzY3JpcHRvcnMgZWFjaCByaW5nCisJCSBjYW4gaGF2ZS4gVGhlcmUgY2FuIGJlIGEgbWF4aW11bSBvZiA4IHJpbmdzLgorKGlpaSkJZnJhbWVfbGVuOiBUaGlzIGlzIGFuIGFycmF5IG9mIHNpemUgOC4gVXNpbmcgdGhpcyB3ZSBjYW4gCisJCSBzZXQgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgcmVjZWl2ZWQgZnJhbWUgdGhhdCBjYW4KKwkJIGJlIHN0ZWVyZWQgaW50byB0aGUgY29ycnNwb25kaW5nIHJlY2VpdmUgcmluZy4JCisoaXYpCWZpZm9fbnVtOiBUaGlzIGRlZmluZXMgdGhlIG51bWJlciBvZiBUeCBGSUZPcyB0aGF0cyB1c2VkIGluCisJCSB0aGUgZHJpdmVyLiAKKyh2KQlmaWZvX2xlbjogRWFjaCBlbGVtZW50IGRlZmluZXMgdGhlIG51bWJlciBvZiAKKyAJCSBUeCBkZXNjcmlwdG9ycyB0aGF0IGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggZWFjaCAKKwkJIGNvcnJlc3BvbmRpbmcgRklGTy4gVGhlcmUgYXJlIGEgbWF4aW11bSBvZiA4IEZJRk9zLgorKHZpKQl0eF9wcmlvOiBUaGlzIGlzIGEgYm9vbCwgaWYgbW9kdWxlIGlzIGxvYWRlZCB3aXRoIGEgbm9uLXplcm8KKwkJdmFsdWUgZm9yIHR4X3ByaW8gbXVsdGkgRklGTyBzY2hlbWUgaXMgYWN0aXZhdGVkLgorKHZpaSkJcnhfcHJpbzogVGhpcyBpcyBhIGJvb2wsIGlmIG1vZHVsZSBpcyBsb2FkZWQgd2l0aCBhIG5vbi16ZXJvCisJCXZhbHVlIGZvciB0eF9wcmlvIG11bHRpIFJJTkcgc2NoZW1lIGlzIGFjdGl2YXRlZC4KKyh2aWlpKQlsYXRlbmN5X3RpbWVyOiBUaGUgdmFsdWUgZ2l2ZW4gYWdhaW5zdCB0aGlzIHBhcmFtIHdpbGwgYmUKKwkJIGxvYWRlZAlpbnRvIHRoZSBsYXRlbmN5IHRpbWVyIHJlZ2lzdGVyIGluIFBDSSBDb25maWcKKwkJIHNwYWNlLCBlbHNlIHRoZSByZWdpc3RlciBpcyBsZWZ0IHdpdGggaXRzIHJlc2V0IHZhbHVlLgorCitJSS4gUGVyZm9ybWFuY2UgdHVuaW5nLgorIEJ5IGNoYW5naW5nIGEgZmV3IHN5c2N0bCBwYXJhbWV0ZXJzLgorCUNvcHkgdGhlIGZvbGxvd2luZyBsaW5lcyBpbnRvIGEgZmlsZSBhbmQgcnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZCwKKwkic3lzY3RsIC1wIDxmaWxlX25hbWU+IgorIyMjIElQVjQgc3BlY2lmaWMgc2V0dGluZ3MKK25ldC5pcHY0LnRjcF90aW1lc3RhbXBzID0gMCAjIHR1cm5zIFRDUCB0aW1lc3RhbXAgc3VwcG9ydCBvZmYsIGRlZmF1bHQgMSwgcmVkdWNlcyBDUFUgdXNlCituZXQuaXB2NC50Y3Bfc2FjayA9IDAgIyB0dXJuIFNBQ0sgc3VwcG9ydCBvZmYsIGRlZmF1bHQgb24KKyMgb24gc3lzdGVtcyB3aXRoIGEgVkVSWSBmYXN0IGJ1cyAtPiBtZW1vcnkgaW50ZXJmYWNlIHRoaXMgaXMgdGhlIGJpZyBnYWluZXIKK25ldC5pcHY0LnRjcF9ybWVtID0gMTAwMDAwMDAgMTAwMDAwMDAgMTAwMDAwMDAgIyBzZXRzIG1pbi9kZWZhdWx0L21heCBUQ1AgcmVhZCBidWZmZXIsIGRlZmF1bHQgNDA5NiA4NzM4MCAxNzQ3NjAKK25ldC5pcHY0LnRjcF93bWVtID0gMTAwMDAwMDAgMTAwMDAwMDAgMTAwMDAwMDAgIyBzZXRzIG1pbi9wcmVzc3VyZS9tYXggVENQIHdyaXRlIGJ1ZmZlciwgZGVmYXVsdCA0MDk2IDE2Mzg0IDEzMTA3MgorbmV0LmlwdjQudGNwX21lbSA9IDEwMDAwMDAwIDEwMDAwMDAwIDEwMDAwMDAwICMgc2V0cyBtaW4vcHJlc3N1cmUvbWF4IFRDUCBidWZmZXIgc3BhY2UsIGRlZmF1bHQgMzE3NDQgMzIyNTYgMzI3NjgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjIyMgQ09SRSBzZXR0aW5ncyAobW9zdGx5IGZvciBzb2NrZXQgYW5kIFVEUCBlZmZlY3QpCituZXQuY29yZS5ybWVtX21heCA9IDUyNDI4NyAjIG1heGltdW0gcmVjZWl2ZSBzb2NrZXQgYnVmZmVyIHNpemUsIGRlZmF1bHQgMTMxMDcxCituZXQuY29yZS53bWVtX21heCA9IDUyNDI4NyAjIG1heGltdW0gc2VuZCBzb2NrZXQgYnVmZmVyIHNpemUsIGRlZmF1bHQgMTMxMDcxCituZXQuY29yZS5ybWVtX2RlZmF1bHQgPSA1MjQyODcgIyBkZWZhdWx0IHJlY2VpdmUgc29ja2V0IGJ1ZmZlciBzaXplLCBkZWZhdWx0IDY1NTM1CituZXQuY29yZS53bWVtX2RlZmF1bHQgPSA1MjQyODcgIyBkZWZhdWx0IHNlbmQgc29ja2V0IGJ1ZmZlciBzaXplLCBkZWZhdWx0IDY1NTM1CituZXQuY29yZS5vcHRtZW1fbWF4ID0gNTI0Mjg3ICMgbWF4aW11bSBhbW91bnQgb2Ygb3B0aW9uIG1lbW9yeSBidWZmZXJzLCBkZWZhdWx0IDEwMjQwCituZXQuY29yZS5uZXRkZXZfbWF4X2JhY2tsb2cgPSAzMDAwMDAgIyBudW1iZXIgb2YgdW5wcm9jZXNzZWQgaW5wdXQgcGFja2V0cyBiZWZvcmUga2VybmVsIHN0YXJ0cyBkcm9wcGluZyB0aGVtLCBkZWZhdWx0IDMwMAorLS0tRW5kIG9mIHBlcmZvcm1hbmNlIHR1bmluZyBmaWxlLS0tCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zY3RwLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zY3RwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzc5MGE3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NjdHAudHh0CkBAIC0wLDAgKzEsMzggQEAKK0xpbnV4IEtlcm5lbCBTQ1RQIAorCitUaGlzIGlzIHRoZSBjdXJyZW50IEJFVEEgcmVsZWFzZSBvZiB0aGUgTGludXggS2VybmVsIFNDVFAgcmVmZXJlbmNlCitpbXBsZW1lbnRhdGlvbi4gIAorCitTQ1RQIChTdHJlYW0gQ29udHJvbCBUcmFuc21pc3Npb24gUHJvdG9jb2wpIGlzIGEgSVAgYmFzZWQsIG1lc3NhZ2Ugb3JpZW50ZWQsCityZWxpYWJsZSB0cmFuc3BvcnQgcHJvdG9jb2wsIHdpdGggY29uZ2VzdGlvbiBjb250cm9sLCBzdXBwb3J0IGZvcgordHJhbnNwYXJlbnQgbXVsdGktaG9taW5nLCBhbmQgbXVsdGlwbGUgb3JkZXJlZCBzdHJlYW1zIG9mIG1lc3NhZ2VzLgorUkZDMjk2MCBkZWZpbmVzIHRoZSBjb3JlIHByb3RvY29sLiAgVGhlIElFVEYgU0lHVFJBTiB3b3JraW5nIGdyb3VwIG9yaWdpbmFsbHkKK2RldmVsb3BlZCB0aGUgU0NUUCBwcm90b2NvbCBhbmQgbGF0ZXIgaGFuZGVkIHRoZSBwcm90b2NvbCBvdmVyIHRvIHRoZSAKK1RyYW5zcG9ydCBBcmVhIChUU1ZXRykgd29ya2luZyBncm91cCBmb3IgdGhlIGNvbnRpbnVlZCBldm9sdmVtZW50IG9mIFNDVFAgYXMgYSAKK2dlbmVyYWwgcHVycG9zZSB0cmFuc3BvcnQuICAKKworU2VlIHRoZSBJRVRGIHdlYnNpdGUgKGh0dHA6Ly93d3cuaWV0Zi5vcmcpIGZvciBmdXJ0aGVyIGRvY3VtZW50cyBvbiBTQ1RQLiAKK1NlZSBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyOTYwLnR4dCAKKworVGhlIGluaXRpYWwgcHJvamVjdCBnb2FsIGlzIHRvIGNyZWF0ZSBhbiBMaW51eCBrZXJuZWwgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uCitvZiBTQ1RQIHRoYXQgaXMgUkZDIDI5NjAgY29tcGxpYW50IGFuZCBwcm92aWRlcyBhbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgCityZWZlcnJlZCB0byBhcyB0aGUgIFVEUC1zdHlsZSBBUEkgb2YgdGhlIFNvY2tldHMgRXh0ZW5zaW9ucyBmb3IgU0NUUCwgYXMgCitwcm9wb3NlZCBpbiBJRVRGIEludGVybmV0LURyYWZ0cy4gICAgCisKKworQ2F2ZWF0czogIAorCistbGtzY3RwIGNhbiBiZSBidWlsdCBhcyBzdGF0aWNhbGx5IG9yIGFzIGEgbW9kdWxlLiAgSG93ZXZlciwgYmUgYXdhcmUgdGhhdCAKK21vZHVsZSByZW1vdmFsIG9mIGxrc2N0cCBpcyBub3QgeWV0IGEgc2FmZSBhY3Rpdml0eS4gICAKKworLVRoZXJlIGlzIHRlbnRhdGl2ZSBzdXBwb3J0IGZvciBJUHY2LCBidXQgbW9zdCB3b3JrIGhhcyBnb25lIHRvd2FyZHMgCitpbXBsZW1lbnRhdGlvbiBhbmQgdGVzdGluZyBsa3NjdHAgb24gSVB2NC4gICAKKworCitGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpc2l0IHRoZSBsa3NjdHAgcHJvamVjdCB3ZWJzaXRlOgorICAgaHR0cDovL3d3dy5zZi5uZXQvcHJvamVjdHMvbGtzY3RwCisKK09yIGNvbnRhY3QgdGhlIGxrc2N0cCBkZXZlbG9wZXJzIHRocm91Z2ggdGhlIG1haWxpbmcgbGlzdDoKKyAgIDxsa3NjdHAtZGV2ZWxvcGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+IAorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zaGFwZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NoYXBlci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM0ZWJiNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zaGFwZXIudHh0CkBAIC0wLDAgKzEsNDggQEAKK1RyYWZmaWMgU2hhcGVyIEZvciBMaW51eAorCitUaGlzIGlzIHRoZSBjdXJyZW50IEJFVEEgcmVsZWFzZSBvZiB0aGUgdHJhZmZpYyBzaGFwZXIgZm9yIExpbnV4LiBJdCB3b3Jrcword2l0aGluIHRoZSBmb2xsb3dpbmcgbGltaXRzOgorCitvCU1pbmltdW0gc2hhcGluZyBzcGVlZCBpcyBjdXJyZW50bHkgYWJvdXQgOTYwMCBiYXVkIChpdCBjYW4gb25seQorc2hhcGUgZG93biB0byAxIGJ5dGUgcGVyIGNsb2NrIHRpY2spCisKK28JTWF4aW11bSBpcyBhYm91dCAyNTZLLCBpdCB3aWxsIGdvIGFib3ZlIHRoaXMgYnV0IGdldCBhIGJpdCBibG9ja3kuCisKK28JSWYgeW91IGlmY29uZmlnIHRoZSBtYXN0ZXIgZGV2aWNlIHRoYXQgYSBzaGFwZXIgaXMgYXR0YWNoZWQgdG8gZG93bgordGhlbiB5b3VyIG1hY2hpbmUgd2lsbCBmb2xsb3cuCisKK28JVGhlIHNoYXBlciBtdXN0IGJlIGEgbW9kdWxlLgorCisKK1NldHVwOgorCisJQSBzaGFwZXIgZGV2aWNlIGlzIGNvbmZpZ3VyZWQgdXNpbmcgdGhlIHNoYXBlY29uZmlnIHByb2dyYW0uCitUeXBpY2FsbHkgeW91IHdpbGwgZG8gc29tZXRoaW5nIGxpa2UgdGhpcworCitzaGFwZWNmZyBhdHRhY2ggc2hhcGVyMCBldGgxCitzaGFwZWNmZyBzcGVlZCBzaGFwZXIwIDY0MDAwCitpZmNvbmZpZyBzaGFwZXIwIG15aG9zdCBuZXRtYXNrIDI1NS4yNTUuMjU1LjI0MCBicm9hZGNhc3QgMS4yLjMuNC4yNTUgdXAKK3JvdXRlIGFkZCAtbmV0IHNvbWUubmV0d29yayBuZXRtYXNrIGEuYi5jLmQgZGV2IHNoYXBlcjAKKworVGhlIHNoYXBlciBzaG91bGQgaGF2ZSB0aGUgc2FtZSBJUCBhZGRyZXNzIGFzIHRoZSBkZXZpY2UgaXQgaXMgYXR0YWNoZWQgdG8KK2ZvciBub3JtYWwgdXNlLgorCitHb3RjaGFzOgorCisJVGhlIHNoYXBlciBzaGFwZXMgdHJhbnNtaXR0ZWQgdHJhZmZpYy4gSXQncyByYXRoZXIgaW1wb3NzaWJsZSB0bworc2hhcGUgcmVjZWl2ZWQgdHJhZmZpYyBleGNlcHQgYXQgdGhlIGVuZCAob3IgYSByb3V0ZXIpIHRyYW5zbWl0dGluZyBpdC4KKworCUdhdGVkL3JvdXRlZC9yd2hvZC9tcm91dGVkIGFsbCBzZWUgdGhlIHNoYXBlciBhcyBhbiBhZGRpdGlvbmFsIGRldmljZQorYW5kIHdpbGwgdHJlYXQgaXQgYXMgc3VjaCB1bmxlc3MgcGF0Y2hlZC4gTm90ZSB0aGF0IGZvciBtcm91dGVkIHlvdSBjYW4gcnVuCittcm91dGVkIHR1bm5lbHMgdmlhIGEgdHJhZmZpYyBzaGFwZXIgdG8gY29udHJvbCBiYW5kd2lkdGggdXNhZ2UuCisKKwlUaGUgc2hhcGVyIGlzIGRldmljZS9yb3V0ZSBiYXNlZC4gVGhpcyBtYWtlcyBpdCB2ZXJ5IGVhc3kgdG8gdXNlCit3aXRoIGFueSBzZXR1cCBCVVQgbGVzcyBmbGV4aWJsZS4gWW91IG1heSBuZWVkIHRvIHVzZSBpcHJvdXRlMiB0byBzZXQgdXAKK211bHRpcGxlIHJvdXRlIHRhYmxlcyB0byBnZXQgdGhlIGZsZXhpYmlsaXR5LgorCisJVGhlcmUgaXMgbm8gImJvcnJvd2luZyIgb3IgInNoYXJpbmciIHNjaGVtZS4gVGhpcyBpcyBhIHNpbXBsZQordHJhZmZpYyBsaW1pdGVyLiBXZSBpbXBsZW1lbnQgVmFuIEphY29ic29uIGFuZCBTYWxseSBGbG95ZCdzIENCUQorYXJjaGl0ZWN0dXJlIGludG8gTGludXggMi4yLiBUaGlzIGlzIHRoZSBwcmVmZXJyZWQgc29sdXRpb24uIFNoYXBlciBpcworZm9yIHNpbXBsZSBvciBiYWNrIGNvbXBhdGlibGUgc2V0dXBzLgorCitBbGFuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2lzOTAwLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zaXM5MDAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZGZmZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2lzOTAwLnR4dApAQCAtMCwwICsxLDI1NyBAQAorCitTaVMgOTAwLzcwMTYgRmFzdCBFdGhlcm5ldCBEZXZpY2UgRHJpdmVyCisKK09sbGllIExobworCitMZWkgQ2h1biBDaGFuZworCisgICBDb3B5cmlnaHQgqSAxOTk5IGJ5IFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW0gQ29ycC4KKyAgIAorICAgVGhpcyBkb2N1bWVudCBnaXZlcyBzb21lIGluZm9ybWF0aW9uIG9uIGluc3RhbGxhdGlvbiBhbmQgdXNhZ2Ugb2YgU2lTCisgICA5MDAvNzAxNiBkZXZpY2UgZHJpdmVyIHVuZGVyIExpbnV4LgorICAgCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAorICAgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAgCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgICAKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworICAgVVNBCisgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICAKKyAgIFRhYmxlIG9mIENvbnRlbnRzCisgICAxLiBJbnRyb2R1Y3Rpb24KKyAgIDIuIENoYW5nZXMKKyAgIDMuIFRlc3RlZCBFbnZpcm9ubWVudAorICAgNC4gRmlsZXMgaW4gVGhpcyBQYWNrYWdlCisgICA1LiBJbnN0YWxsYXRpb24KKyAgICAgICAgICAKKyAgICAgICAgQnVpbGRpbmcgdGhlIGRyaXZlciBhcyBsb2FkYWJsZSBtb2R1bGUKKyAgICAgICAgQnVpbGRpbmcgdGhlIGRyaXZlciBpbnRvIGtlcm5lbAorICAgICAgICAgICAgICAgIAorICAgNi4gS25vd24gUHJvYmxlbXMgYW5kIEJ1Z3MKKyAgIDcuIFJldmlzaW9uIEhpc3RvcnkKKyAgIDguIEFja25vd2xlZGdlbWVudHMKKyAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgIAorQ2hhcHRlciAxLiBJbnRyb2R1Y3Rpb24KKworICAgVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIHJldmlzaW9uIDEuMDYgYW5kIDEuMDcgb2YgU2lTIDkwMC83MDE2CisgICBGYXN0IEV0aGVybmV0IGRldmljZSBkcml2ZXIgdW5kZXIgTGludXguIFRoZSBkcml2ZXIgaXMgZGV2ZWxvcGVkIGJ5CisgICBTaWxpY29uIEludGVncmF0ZWQgU3lzdGVtIENvcnAuIGFuZCBkaXN0cmlidXRlZCBmcmVlbHkgdW5kZXIgdGhlIEdOVQorICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKS4gVGhlIGRyaXZlciBjYW4gYmUgY29tcGlsZWQgYXMgYSBsb2FkYWJsZQorICAgbW9kdWxlIGFuZCB1c2VkIHVuZGVyIExpbnV4IGtlcm5lbCB2ZXJzaW9uIDIuMi54LiAocmV2LiAxLjA2KSBXaXRoCisgICBtaW5pbWFsIGNoYW5nZXMsIHRoZSBkcml2ZXIgY2FuIGFsc28gYmUgdXNlZCB1bmRlciAyLjMueCBhbmQgMi40LngKKyAgIGtlcm5lbCAocmV2LiAxLjA3KSwgcGxlYXNlIHNlZSBDaGFwdGVyIDUuIElmIHlvdSBhcmUgaW50ZW5kZWQgdG8gdXNlCisgICB0aGUgZHJpdmVyIGZvciBlYXJsaWVyIGtlcm5lbHMsIHlvdSBhcmUgb24geW91ciBvd24uCisgICAKKyAgIFRoZSBkcml2ZXIgaXMgdGVzdGVkIHdpdGggdXN1YWwgVENQL0lQIGFwcGxpY2F0aW9ucyBpbmNsdWRpbmcgRlRQLAorICAgVGVsbmV0LCBOZXRzY2FwZSBldGMuIGFuZCBpcyB1c2VkIGNvbnN0YW50bHkgYnkgdGhlIGRldmVsb3BlcnMuCisgICAKKyAgIFBsZWFzZSBzZW5kIGFsbCBjb21tZW50cy9maXhlcy9xdWVzdGlvbnMgdG8gTGVpLUNodW4gQ2hhbmcuCisgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICAKK0NoYXB0ZXIgMi4gQ2hhbmdlcworCisgICBDaGFuZ2VzIG1hZGUgaW4gUmV2aXNpb24gMS4wNworICAgCisgICAgMS4gU2VwYXJhdGlvbiBvZiBzaXM5MDAuYyBhbmQgc2lzOTAwLmggaW4gb3JkZXIgdG8gbW92ZSBtb3N0IGNvbnN0YW50CisgICAgICAgZGVmaW5pdGlvbiB0byBzaXM5MDAuaCAobWFueSBvZiB0aG9zZSBjb25zdGFudHMgd2VyZSBjb3JyZWN0ZWQpCisgICAgMi4gQ2xlYW4gdXAgUENJIGRldGVjdGlvbiwgdGhlIHBjaS1zY2FuIGZyb20gRG9uYWxkIEJlY2tlciB3ZXJlIG5vdAorICAgICAgIHVzZWQsIGp1c3Qgc2ltcGxlIHBjaV9maW5kXyouCisgICAgMy4gTUlJIGRldGVjdGlvbiBpcyBtb2RpZmllZCB0byBzdXBwb3J0IG11bHRpcGxlIG1paSB0cmFuc2NlaXZlci4KKyAgICA0LiBCdWdzIGluIHJlYWRfZWVwcm9tLCBtZGlvXyogd2VyZSByZW1vdmVkLgorICAgIDUuIExvdCBvZiBzaXM5MDAgaXJyZWxldmFudCBjb21tZW50cyB3ZXJlIHJlbW92ZWQvY2hhbmdlZCBhbmQgbW9yZQorICAgICAgIGNvbW1lbnRzIHdlcmUgYWRkZWQgdG8gcmVmbGVjdCB0aGUgcmVhbCBzaXR1YXRpb24uCisgICAgNi4gQ2xlYW4gdXAgb2YgcGh5c2ljYWwvdmlydHVhbCBhZGRyZXNzIHNwYWNlIG1lc3MgaW4gYnVmZmVyCisgICAgICAgZGVzY3JpcHRvcnMuCisgICAgNy4gQmV0dGVyIHRyYW5zbWl0L3JlY2VpdmUgZXJyb3IgaGFuZGxpbmcuCisgICAgOC4gVGhlIGRyaXZlciBub3cgdXNlcyB6ZXJvLWNvcHkgc2luZ2xlIGJ1ZmZlciBtYW5hZ2VtZW50IHNjaGVtZSB0bworICAgICAgIGltcHJvdmUgcGVyZm9ybWFuY2UuCisgICAgOS4gTmFtZXMgb2YgdmFyaWFibGVzIHdlcmUgY2hhbmdlZCB0byBiZSBtb3JlIGNvbnNpc3RlbnQuCisgICAxMC4gQ2xlYW4gdXAgb2YgYXVvLW5lZ290aWF0aW9uIGFuZCB0aW1lciBjb2RlLgorICAgMTEuIEF1dG9tYXRpYyBkZXRlY3Rpb24gYW5kIGNoYW5nZSBvZiBQSFkgb24gdGhlIGZseS4KKyAgIDEyLiBCdWcgaW4gbWFjIHByb2JpbmcgZml4ZWQuCisgICAxMy4gRml4IDYzMEUgZXF1YWxpZXIgcHJvYmxlbSBieSBtb2RpZnlpbmcgdGhlIGVxdWFsaXplciB3b3JrYXJvdW5kCisgICAgICAgcnVsZS4KKyAgIDE0LiBTdXBwb3J0IGZvciBJQ1MxODkzIDEwLzEwMCBJbnRlcmF0ZWQgUEhZY2VpdmVyLgorICAgMTUuIFN1cHBvcnQgZm9yIG1lZGlhIHNlbGVjdCBieSBpZmNvbmZpZy4KKyAgIDE2LiBBZGRlZCBrZXJuZWwtZG9jIGV4dHJhdGFibGUgZG9jdW1lbnRhdGlvbi4KKyAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgIAorQ2hhcHRlciAzLiBUZXN0ZWQgRW52aXJvbm1lbnQKKworICAgVGhpcyBkcml2ZXIgaXMgZGV2ZWxvcGVkIG9uIHRoZSBmb2xsb3dpbmcgaGFyZHdhcmUKKyAgIAorICAgICAqIEludGVsIENlbGVyb24gNTAwIHdpdGggU2lTIDYzMCAocmV2IDAyKSBjaGlwc2V0CisgICAgICogU2lTIDkwMCAocmV2IDAxKSBhbmQgU2lTIDcwMTYvNzAxNCBGYXN0IEV0aGVybmV0IENhcmQKKyAgICAgICAKKyAgIGFuZCB0ZXN0ZWQgd2l0aCB0aGVzZSBzb2Z0d2FyZSBlbnZpcm9ubWVudHMKKyAgIAorICAgICAqIFJlZCBIYXQgTGludXggdmVyc2lvbiA2LjIKKyAgICAgKiBMaW51eCBrZXJuZWwgdmVyc2lvbiAyLjQuMAorICAgICAqIE5ldHNjYXBlIHZlcnNpb24gNC42CisgICAgICogTmNGVFAgMy4wLjAgYmV0YSAxOAorICAgICAqIFNhbWJhIHZlcnNpb24gMi4wLjMKKyAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKyAgIAorQ2hhcHRlciA0LiBGaWxlcyBpbiBUaGlzIFBhY2thZ2UKKworICAgSW4gdGhlIHBhY2thZ2UgeW91IGNhbiBmaW5kIHRoZXNlIGZpbGVzOgorICAgCisgICBzaXM5MDAuYworICAgICAgICAgIERyaXZlciBzb3VyY2UgZmlsZSBpbiBDCisgICAgICAgICAgCisgICBzaXM5MDAuaAorICAgICAgICAgIEhlYWRlciBmaWxlIGZvciBzaXM5MDAuYworICAgICAgICAgIAorICAgc2lzOTAwLnNnbWwKKyAgICAgICAgICBEb2NCb29rIFNHTUwgc291cmNlIG9mIHRoZSBkb2N1bWVudAorICAgICAgICAgIAorICAgc2lzOTAwLnR4dAorICAgICAgICAgIERyaXZlciBkb2N1bWVudCBpbiBwbGFpbiB0ZXh0CisgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICAKK0NoYXB0ZXIgNS4gSW5zdGFsbGF0aW9uCisKKyAgIFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW0gQ29ycC4gaXMgY29vcGVyYXRpbmcgY2xvc2VseSB3aXRoIGNvcmUgTGludXgKKyAgIEtlcm5lbCBkZXZlbG9wZXJzLiBUaGUgcmV2aXNpb25zIG9mIFNpUyA5MDAgZHJpdmVyIGFyZSBkaXN0cmlidXRlZCBieQorICAgdGhlIHVzdWFsbCBjaGFubmVscyBmb3Iga2VybmVsIHRhciBmaWxlcyBhbmQgcGF0Y2hlcy4gVGhvc2Uga2VybmVsIHRhcgorICAgZmlsZXMgZm9yIG9mZmljaWFsIGtlcm5lbCBhbmQgcGF0Y2hlcyBmb3Iga2VybmVsIHByZS1yZWxlYXNlIGNhbiBiZQorICAgZG93bmxvYWQgYXQgb2ZmaWNpYWwga2VybmVsIGZ0cCBzaXRlIGFuZCBpdHMgbWlycm9ycy4gVGhlIDEuMDYKKyAgIHJldmlzaW9uIGNhbiBiZSBmb3VuZCBpbiBrZXJuZWwgdmVyc2lvbiBsYXRlciB0aGFuIDIuMy4xNSBhbmQKKyAgIHByZS0yLjIuMTQsIGFuZCAxLjA3IHJldmlzaW9uIGNhbiBiZSBmb3VuZCBpbiBrZXJuZWwgdmVyc2lvbiAyLjQuMC4gSWYKKyAgIHlvdSBoYXZlIG5vIHByaW9yIGV4cGVyaWVuY2UgaW4gbmV0d29ya2luZyB1bmRlciBMaW51eCwgcGxlYXNlIHJlYWQKKyAgIEV0aGVybmV0IEhPV1RPIGFuZCBOZXR3b3JraW5nIEhPV1RPIGF2YWlsYWJsZSBmcm9tIExpbnV4IERvY3VtZW50YXRpb24KKyAgIFByb2plY3QgKExEUCkuCisgICAKKyAgIFRoZSBkcml2ZXIgaXMgYnVuZGxlZCBpbiByZWxlYXNlIGxhdGVyIHRoYW4gMi4yLjExIGFuZCAyLjMuMTUgc28gdGhpcworICAgaXMgdGhlIG1vc3QgZWFzeSBjYXNlLiBCZSBzdXJlIHlvdSBoYXZlIHRoZSBhcHByb3ByaWF0ZSBwYWNrYWdlcyBmb3IKKyAgIGNvbXBpbGluZyBrZXJuZWwgc291cmNlLiBUaG9zZSBwYWNrYWdlcyBhcmUgbGlzdGVkIGluIERvY3VtZW50L0NoYW5nZXMKKyAgIGluIGtlcm5lbCBzb3VyY2UgZGlzdHJpYnV0aW9uLiBJZiB5b3UgaGF2ZSB0byBpbnN0YWxsIHRoZSBkcml2ZXIgb3RoZXIKKyAgIHRoYW4gdGhvc2UgYnVuZGxlZCBpbiBrZXJuZWwgcmVsZWFzZSwgeW91IHNob3VsZCBoYXZlIHlvdXIgZHJpdmVyIGZpbGUKKyAgIHNpczkwMC5jIGFuZCBzaXM5MDAuaCBjb3BpZWQgaW50byAvdXNyL3NyYy9saW51eC9kcml2ZXJzL25ldC8gZmlyc3QuCisgICBUaGVyZSBhcmUgdHdvIGFsdGVybmF0aXZlIHdheXMgdG8gaW5zdGFsbCB0aGUgZHJpdmVyCisgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICAKK0J1aWxkaW5nIHRoZSBkcml2ZXIgYXMgbG9hZGFibGUgbW9kdWxlCisKKyAgIFRvIGJ1aWxkIHRoZSBkcml2ZXIgYXMgYSBsb2FkYWJsZSBrZXJuZWwgbW9kdWxlIHlvdSBoYXZlIHRvCisgICByZWNvbmZpZ3VyZSB0aGUga2VybmVsIHRvIGFjdGl2YXRlIG5ldHdvcmsgc3VwcG9ydCBieQorICAgCittYWtlIG1lbnVjb25maWcKKworICAgQ2hvb3NlICJMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydCAtLS0+IiwgdGhlbiBzZWxlY3QgIkVuYWJsZSBsb2FkYWJsZQorICAgbW9kdWxlIHN1cHBvcnQiLgorICAgCisgICBDaG9vc2UgIk5ldHdvcmsgRGV2aWNlIFN1cHBvcnQgLS0tPiIsIHNlbGVjdCAiRXRoZXJuZXQgKDEwIG9yCisgICAxMDBNYml0KSIuIFRoZW4gc2VsZWN0ICJFSVNBLCBWTEIsIFBDSSBhbmQgb24gYm9hcmQgY29udHJvbGxlcnMiLCBhbmQKKyAgIGNob29zZSAiU2lTIDkwMC83MDE2IFBDSSBGYXN0IEV0aGVybmV0IEFkYXB0ZXIgc3VwcG9ydCIgdG8gIk0iLgorICAgCisgICBBZnRlciByZWNvbmZpZ3VyaW5nIHRoZSBrZXJuZWwsIHlvdSBjYW4gbWFrZSB0aGUgZHJpdmVyIG1vZHVsZSBieQorICAgCittYWtlIG1vZHVsZXMKKworICAgVGhlIGRyaXZlciBzaG91bGQgYmUgY29tcGlsZWQgd2l0aCBubyBlcnJvcnMuIEFmdGVyIGNvbXBpbGluZyB0aGUKKyAgIGRyaXZlciwgdGhlIGRyaXZlciBjYW4gYmUgaW5zdGFsbGVkIHRvIHByb3BlciBwbGFjZSBieQorICAgCittYWtlIG1vZHVsZXNfaW5zdGFsbAorCisgICBMb2FkIHRoZSBkcml2ZXIgaW50byBrZXJuZWwgYnkKKyAgIAoraW5zbW9kIHNpczkwMAorCisgICBXaGVuIGxvYWRpbmcgdGhlIGRyaXZlciBpbnRvIG1lbW9yeSwgc29tZSBpbmZvcm1hdGlvbiBtZXNzYWdlIGNhbiBiZQorICAgdmlldyBieQorICAgCitkbWVzZworCisgICBvcgorY2F0IC92YXIvbG9nL21lc3NhZ2UKKworICAgSWYgdGhlIGRyaXZlciBpcyBsb2FkZWQgcHJvcGVybHkgeW91IHdpbGwgaGF2ZSBtZXNzYWdlcyBzaW1pbGFyIHRvCisgICB0aGlzOgorICAgCitzaXM5MDAuYzogdjEuMDcuMDYgIDExLzA3LzIwMDAKK2V0aDA6IFNpUyA5MDAgUENJIEZhc3QgRXRoZXJuZXQgYXQgMHhkMDAwLCBJUlEgMTAsIDAwOjAwOmU4OjgzOjdmOmE0LgorZXRoMDogU2lTIDkwMCBJbnRlcm5hbCBNSUkgUEhZIHRyYW5zY2VpdmVyIGZvdW5kIGF0IGFkZHJlc3MgMS4KK2V0aDA6IFVzaW5nIFNpUyA5MDAgSW50ZXJuYWwgTUlJIFBIWSBhcyBkZWZhdWx0CisKKyAgIHNob3dpbmcgdGhlIHZlcnNpb24gb2YgdGhlIGRyaXZlciBhbmQgdGhlIHJlc3VsdHMgb2YgcHJvYmluZyByb3V0aW5lLgorICAgCisgICBPbmNlIHRoZSBkcml2ZXIgaXMgbG9hZGVkLCBuZXR3b3JrIGNhbiBiZSBicm91Z2h0IHVwIGJ5CisgICAKKy9zYmluL2lmY29uZmlnIGV0aDAgSVBBRERSIGJyb2FkY2FzdCBCUk9BRENBU1QgbmV0bWFzayBORVRNQVNLIG1lZGlhIFRZUEUKKworICAgd2hlcmUgSVBBRERSLCBCUk9BRENBU1QsIE5FVE1BU0sgYXJlIHlvdXIgSVAgYWRkcmVzcywgYnJvYWRjYXN0CisgICBhZGRyZXNzIGFuZCBuZXRtYXNrIHJlc3BlY3RpdmVseS4gVFlQRSBpcyB1c2VkIHRvIHNldCBtZWRpdW0gdHlwZSB1c2VkCisgICBieSB0aGUgZGV2aWNlLiBUeXBpY2FsIHZhbHVlcyBhcmUgIjEwYmFzZVQiKHR3aXN0ZWQtcGFpciAxME1icHMKKyAgIEV0aGVybmV0KSBvciAiMTAwYmFzZVQiICh0d2lzdGVkLXBhaXIgMTAwTWJwcyBFdGhlcm5ldCkuIEZvciBtb3JlCisgICBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29uZmlndXJlIG5ldHdvcmsgaW50ZXJmYWNlLCBwbGVhc2UgcmVmZXIgdG8KKyAgIE5ldHdvcmtpbmcgSE9XVE8uCisgICAKKyAgIFRoZSBsaW5rIHN0YXR1cyBpcyBhbHNvIHNob3duIGJ5IGtlcm5lbCBtZXNzYWdlcy4gRm9yIGV4YW1wbGUsIGFmdGVyCisgICB0aGUgbmV0d29yayBpbnRlcmZhY2UgaXMgYWN0aXZhdGVkLCB5b3UgbWF5IGhhdmUgdGhlIG1lc3NhZ2U6CisgICAKK2V0aDA6IE1lZGlhIExpbmsgT24gMTAwbWJwcyBmdWxsLWR1cGxleAorCisgICBJZiB5b3UgdHJ5IHRvIHVucGx1ZyB0aGUgdHdpc3QgcGFpciAoVFApIGNhYmxlIHlvdSB3aWxsIGdldAorICAgCitldGgwOiBNZWRpYSBMaW5rIE9mZgorCisgICBpbmRpY2F0aW5nIHRoYXQgdGhlIGxpbmsgaXMgZmFpbGVkLgorICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgCitCdWlsZGluZyB0aGUgZHJpdmVyIGludG8ga2VybmVsCisKKyAgIElmIHlvdSB3YW50IHRvIG1ha2UgdGhlIGRyaXZlciBpbnRvIGtlcm5lbCwgY2hvb3NlICJZIiByYXRoZXIgdGhhbiAiTSIKKyAgIG9uICJTaVMgOTAwLzcwMTYgUENJIEZhc3QgRXRoZXJuZXQgQWRhcHRlciBzdXBwb3J0IiB3aGVuIGNvbmZpZ3VyaW5nCisgICB0aGUga2VybmVsLiBCdWlsZCB0aGUga2VybmVsIGltYWdlIGluIHRoZSB1c3VhbCB3YXkKKyAgIAorbWFrZSBjbGVhbgorCittYWtlIGJ6bGlsbworCisgICBOZXh0IHRpbWUgdGhlIHN5c3RlbSByZWJvb3QsIHlvdSBoYXZlIHRoZSBkcml2ZXIgaW4gbWVtb3J5LgorICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworICAgCitDaGFwdGVyIDYuIEtub3duIFByb2JsZW1zIGFuZCBCdWdzCisKKyAgIFRoZXJlIGFyZSBzb21lIGtub3duIHByb2JsZW1zIGFuZCBidWdzLiBJZiB5b3UgZmluZCBhbnkgb3RoZXIgYnVncworICAgcGxlYXNlIG1haWwgdG8gbGNjaGFuZ0BzaXMuY29tLnR3CisgICAKKyAgICAxLiBBTTc5QzkwMSBIb21lUE5BIFBIWSBpcyBub3QgdGhvcm91Z2hseSB0ZXN0ZWQsIHRoZXJlIG1heSBiZSBzb21lCisgICAgICAgYnVncyBpbiB0aGUgIm9uIHRoZSBmbHkiIGNoYW5nZSBvZiB0cmFuc2NlaXZlci4KKyAgICAyLiBBIGJ1ZyBpcyBoaWRkZW4gc29tZXdoZXJlIGluIHRoZSByZWNlaXZlIGJ1ZmZlciBtYW5hZ2VtZW50IGNvZGUsCisgICAgICAgdGhlIGJ1ZyBjYXVzZXMgTlVMTCBwb2ludGVyIHJlZmVyZW5jZSBpbiB0aGUga2VybmVsLiBUaGlzIGZhdWx0IGlzCisgICAgICAgY2F1Z2h0IGJlZm9yZSBiYWQgdGhpbmdzIGhhcHBlbiBhbmQgcmVwb3J0ZWQgd2l0aCB0aGUgbWVzc2FnZToKKyAgICAgICBldGgwOiBOVUxMIHBvaW50ZXIgZW5jb3VudGVyZWQgaW4gUnggcmluZywgc2tpcHBpbmcgd2hpY2ggY2FuIGJlCisgICAgICAgdmlld2VkIHdpdGggZG1lc2cgb3IgY2F0IC92YXIvbG9nL21lc3NhZ2UuCisgICAgMy4gVGhlIG1lZGlhIHR5cGUgY2hhbmdlIGZyb20gMTBNYnBzIHRvIDEwME1icHMgdHdpc3RlZC1wYWlyIGV0aGVybmV0CisgICAgICAgYnkgaWZjb25maWcgY2F1c2VzIHRoZSBtZWRpYSBsaW5rIGRvd24uCisgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICAKK0NoYXB0ZXIgNy4gUmV2aXNpb24gSGlzdG9yeQorCisgICAgICogTm92ZW1iZXIgMTMsIDIwMDAsIFJldmlzaW9uIDEuMDcsIHNldmVudGggcmVsZWFzZSwgNjMwRSBwcm9ibGVtCisgICAgICAgZml4ZWQgYW5kIGZ1cnRoZXIgY2xlYW4gdXAuCisgICAgICogTm92ZW1iZXIgNCwgMTk5OSwgUmV2aXNpb24gMS4wNiwgU2Vjb25kIHJlbGVhc2UsIGxvdHMgb2YgY2xlYW4gdXAKKyAgICAgICBhbmQgb3B0aW1pemF0aW9uLgorICAgICAqIEF1Z3VzdCA4LCAxOTk5LCBSZXZpc2lvbiAxLjA1LCBJbml0aWFsIFB1YmxpYyBSZWxlYXNlCisgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgICAKK0NoYXB0ZXIgOC4gQWNrbm93bGVkZ2VtZW50cworCisgICBUaGlzIGRyaXZlciB3YXMgb3JpZ2luYWxseSBkZXJpdmVkIGZvcm0gRG9uYWxkIEJlY2tlcidzIHBjaS1za2VsZXRvbgorICAgYW5kIHJ0bDgxMzkgZHJpdmVycy4gRG9uYWxkIGFsc28gcHJvdmlkZWQgdmFyaW91cyBzdWdnZXN0aW9uIHJlZ2FyZGVkCisgICB3aXRoIGltcHJvdmVtZW50cyBtYWRlIGluIHJldmlzaW9uIDEuMDYuCisgICAKKyAgIFRoZSAxLjA1IHJldmlzaW9uIHdhcyBjcmVhdGVkIGJ5IEppbSBIdWFuZywgQU1EIDc5YzkwMSBzdXBwb3J0IHdhcworICAgYWRkZWQgYnkgQ2hpbi1TaGFuIExpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NrOThsaW4udHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NrOThsaW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MWZjOTcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2s5OGxpbi50eHQKQEAgLTAsMCArMSw1NjggQEAKKyhDKUNvcHlyaWdodCAxOTk5LTIwMDQgTWFydmVsbChSKS4KK0FsbCByaWdodHMgcmVzZXJ2ZWQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitzazk4bGluLnR4dCBjcmVhdGVkIDEzLUZlYi0yMDA0CisKK1JlYWRtZSBGaWxlIGZvciBzazk4bGluIHY2LjIzCitNYXJ2ZWxsIFl1a29uL1N5c0tvbm5lY3QgU0stOTh4eCBHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXIgZmFtaWx5IGRyaXZlciBmb3IgTElOVVgKKworVGhpcyBmaWxlIGNvbnRhaW5zCisgMSAgT3ZlcnZpZXcKKyAyICBSZXF1aXJlZCBGaWxlcworIDMgIEluc3RhbGxhdGlvbgorICAgIDMuMSAgRHJpdmVyIEluc3RhbGxhdGlvbgorICAgIDMuMiAgSW5jbHVzaW9uIG9mIGFkYXB0ZXIgYXQgc3lzdGVtIHN0YXJ0CisgNCAgRHJpdmVyIFBhcmFtZXRlcnMKKyAgICA0LjEgIFBlci1Qb3J0IFBhcmFtZXRlcnMKKyAgICA0LjIgIEFkYXB0ZXIgUGFyYW1ldGVycworIDUgIExhcmdlIEZyYW1lIFN1cHBvcnQKKyA2ICBWTEFOIGFuZCBMaW5rIEFnZ3JlZ2F0aW9uIFN1cHBvcnQgKElFRUUgODAyLjEsIDgwMi4xcSwgODAyLjNhZCkKKyA3ICBUcm91Ymxlc2hvb3RpbmcKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworMSAgT3ZlcnZpZXcKKz09PT09PT09PT09CisKK1RoZSBzazk4bGluIGRyaXZlciBzdXBwb3J0cyB0aGUgTWFydmVsbCBZdWtvbiBhbmQgU3lzS29ubmVjdCAKK1NLLTk4eHgvU0stOTV4eCBjb21wbGlhbnQgR2lnYWJpdCBFdGhlcm5ldCBBZGFwdGVyIG9uIExpbnV4LiBJdCBoYXMgCitiZWVuIHRlc3RlZCB3aXRoIExpbnV4IG9uIEludGVsL3g4NiBtYWNoaW5lcy4KKyoqKgorCisKKzIgIFJlcXVpcmVkIEZpbGVzCis9PT09PT09PT09PT09PT09PQorCitUaGUgbGludXgga2VybmVsIHNvdXJjZS4KK05vIGFkZGl0aW9uYWwgZmlsZXMgcmVxdWlyZWQuCisqKioKKworCiszICBJbnN0YWxsYXRpb24KKz09PT09PT09PT09PT09PQorCitJdCBpcyByZWNvbW1lbmRlZCB0byBkb3dubG9hZCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIGRyaXZlciBmcm9tIHRoZSAKK1N5c0tvbm5lY3Qgd2ViIHNpdGUgd3d3LnN5c2tvbm5lY3QuY29tLiBJZiB5b3UgaGF2ZSBkb3dubG9hZGVkIHRoZSBsYXRlc3QKK2RyaXZlciwgdGhlIExpbnV4IGtlcm5lbCBoYXMgdG8gYmUgcGF0Y2hlZCBiZWZvcmUgdGhlIGRyaXZlciBjYW4gYmUgCitpbnN0YWxsZWQuIEZvciBkZXRhaWxzIG9uIGhvdyB0byBwYXRjaCBhIExpbnV4IGtlcm5lbCwgcmVmZXIgdG8gdGhlIAorcGF0Y2gudHh0IGZpbGUuCisKKzMuMSAgRHJpdmVyIEluc3RhbGxhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgc3RlcHMgZGVzY3JpYmUgdGhlIGFjdGlvbnMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gaW5zdGFsbAordGhlIGRyaXZlciBhbmQgdG8gc3RhcnQgaXQgbWFudWFsbHkuIFRoZXNlIHN0ZXBzIHNob3VsZCBiZSBjYXJyaWVkCitvdXQgZm9yIHRoZSBpbml0aWFsIGRyaXZlciBzZXR1cC4gT25jZSBjb25maXJtZWQgdG8gYmUgb2ssIHRoZXkgY2FuCitiZSBpbmNsdWRlZCBpbiB0aGUgc3lzdGVtIHN0YXJ0LgorCitOT1RFIDE6IFRvIHBlcmZvcm0gdGhlIGZvbGxvd2luZyB0YXNrcyB5b3UgbmVlZCAncm9vdCcgYWNjZXNzLgorCitOT1RFIDI6IEluIGNhc2Ugb2YgcHJvYmxlbXMsIHBsZWFzZSByZWFkIHRoZSBzZWN0aW9uICJUcm91Ymxlc2hvb3RpbmciIAorICAgICAgICBiZWxvdy4KKworVGhlIGRyaXZlciBjYW4gZWl0aGVyIGJlIGludGVncmF0ZWQgaW50byB0aGUga2VybmVsIG9yIGl0IGNhbiBiZSBjb21waWxlZCAKK2FzIGEgbW9kdWxlLiBTZWxlY3QgdGhlIGFwcHJvcHJpYXRlIG9wdGlvbiBkdXJpbmcgdGhlIGtlcm5lbCAKK2NvbmZpZ3VyYXRpb24uCisKK0NvbXBpbGUvdXNlIHRoZSBkcml2ZXIgYXMgYSBtb2R1bGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvIGNvbXBpbGUgdGhlIGRyaXZlciwgZ28gdG8gdGhlIGRpcmVjdG9yeSAvdXNyL3NyYy9saW51eCBhbmQKK2V4ZWN1dGUgdGhlIGNvbW1hbmQgIm1ha2UgbWVudWNvbmZpZyIgb3IgIm1ha2UgeGNvbmZpZyIgYW5kIHByb2NlZWQgYXMgCitmb2xsb3dzOgorCitUbyBpbnRlZ3JhdGUgdGhlIGRyaXZlciBwZXJtYW5lbnRseSBpbnRvIHRoZSBrZXJuZWwsIHByb2NlZWQgYXMgZm9sbG93czoKKworMS4gU2VsZWN0IHRoZSBtZW51ICJOZXR3b3JrIGRldmljZSBzdXBwb3J0IiBhbmQgdGhlbiAiRXRoZXJuZXQoMTAwME1iaXQpIgorMi4gTWFyayAiTWFydmVsbCBZdWtvbiBDaGlwc2V0IC8gU3lzS29ubmVjdCBTSy05OHh4IGZhbWlseSBzdXBwb3J0IiAKKyAgIHdpdGggKCopIAorMy4gQnVpbGQgYSBuZXcga2VybmVsIHdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGFib3ZlIG9wdGlvbnMgaXMgCisgICBmaW5pc2hlZC4KKzQuIEluc3RhbGwgdGhlIG5ldyBrZXJuZWwuCis1LiBSZWJvb3QgeW91ciBzeXN0ZW0uCisKK1RvIHVzZSB0aGUgZHJpdmVyIGFzIGEgbW9kdWxlLCBwcm9jZWVkIGFzIGZvbGxvd3M6CisKKzEuIEVuYWJsZSAnbG9hZGFibGUgbW9kdWxlIHN1cHBvcnQnIGluIHRoZSBrZXJuZWwuCisyLiBGb3IgYXV0b21hdGljIGRyaXZlciBzdGFydCwgZW5hYmxlIHRoZSAnS2VybmVsIG1vZHVsZSBsb2FkZXInLgorMy4gU2VsZWN0IHRoZSBtZW51ICJOZXR3b3JrIGRldmljZSBzdXBwb3J0IiBhbmQgdGhlbiAiRXRoZXJuZXQoMTAwME1iaXQpIgorNC4gTWFyayAiTWFydmVsbCBZdWtvbiBDaGlwc2V0IC8gU3lzS29ubmVjdCBTSy05OHh4IGZhbWlseSBzdXBwb3J0IiAKKyAgIHdpdGggKE0pCis1LiBFeGVjdXRlIHRoZSBjb21tYW5kICJtYWtlIG1vZHVsZXMiLgorNi4gRXhlY3V0ZSB0aGUgY29tbWFuZCAibWFrZSBtb2R1bGVzX2luc3RhbGwiLgorICAgVGhlIGFwcHJvcGlhdGUgbW9kdWxlcyB3aWxsIGJlIGluc3RhbGxlZC4KKzcuIFJlYm9vdCB5b3VyIHN5c3RlbS4KKworCitMb2FkIHRoZSBtb2R1bGUgbWFudWFsbHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVG8gbG9hZCB0aGUgbW9kdWxlIG1hbnVhbGx5LCBwcm9jZWVkIGFzIGZvbGxvd3M6CisKKzEuIEVudGVyICJtb2Rwcm9iZSBzazk4bGluIi4KKzIuIElmIGEgTWFydmVsbCBZdWtvbiBvciBTeXNLb25uZWN0IFNLLTk4eHggYWRhcHRlciBpcyBpbnN0YWxsZWQgaW4gCisgICB5b3VyIGNvbXB1dGVyIGFuZCB5b3UgaGF2ZSBhIC9wcm9jIGZpbGUgc3lzdGVtLCBleGVjdXRlIHRoZSBjb21tYW5kOgorICAgImxzIC9wcm9jL25ldC9zazk4bGluLyIgCisgICBUaGlzIHNob3VsZCBwcm9kdWNlIGFuIG91dHB1dCBjb250YWluaW5nIGEgbGluZSB3aXRoIHRoZSBmb2xsb3dpbmcgCisgICBmb3JtYXQ6CisgICBldGgwICAgZXRoMSAgLi4uCisgICB3aGljaCBpbmRpY2F0ZXMgdGhhdCB5b3VyIGFkYXB0ZXIgaGFzIGJlZW4gZm91bmQgYW5kIGluaXRpYWxpemVkLgorICAgCisgICBOT1RFIDE6IElmIHlvdSBoYXZlIG1vcmUgdGhhbiBvbmUgTWFydmVsbCBZdWtvbiBvciBTeXNLb25uZWN0IFNLLTk4eHggCisgICAgICAgICAgIGFkYXB0ZXIgaW5zdGFsbGVkLCB0aGUgYWRhcHRlcnMgd2lsbCBiZSBsaXN0ZWQgYXMgJ2V0aDAnLCAKKyAgICAgICAgICAgICAgICAgICAnZXRoMScsICdldGgyJywgZXRjLgorICAgICAgICAgICAgICAgICAgIEZvciBlYWNoIGFkYXB0ZXIsIHJlcGVhdCBzdGVwcyAzIGFuZCA0IGJlbG93LgorCisgICBOT1RFIDI6IElmIHlvdSBoYXZlIG90aGVyIEV0aGVybmV0IGFkYXB0ZXJzIGluc3RhbGxlZCwgeW91ciBNYXJ2ZWxsCisgICAgICAgICAgIFl1a29uIG9yIFN5c0tvbm5lY3QgU0stOTh4eCBhZGFwdGVyIHdpbGwgYmUgbWFwcGVkIHRvIHRoZSAKKyAgICAgICAgICAgICAgICAgICBuZXh0IGF2YWlsYWJsZSBudW1iZXIsIGUuZy4gJ2V0aDEnLiBUaGUgbWFwcGluZyBpcyBleGVjdXRlZCAKKyAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5LgorICAgICAgICAgICBUaGUgbW9kdWxlIGluc3RhbGxhdGlvbiBtZXNzYWdlIChkaXNwbGF5ZWQgZWl0aGVyIGluIGEgc3lzdGVtCisgICAgICAgICAgIGxvZyBmaWxlIG9yIG9uIHRoZSBjb25zb2xlKSBwcmludHMgYSBsaW5lIGZvciBlYWNoIGFkYXB0ZXIgCisgICAgICAgICAgIGZvdW5kIGNvbnRhaW5pbmcgdGhlIGNvcnJlc3BvbmRpbmcgJ2V0aFgnLgorCiszLiBTZWxlY3QgYW4gSVAgYWRkcmVzcyBhbmQgYXNzaWduIGl0IHRvIHRoZSByZXNwZWN0aXZlIGFkYXB0ZXIgYnkgCisgICBlbnRlcmluZzoKKyAgIGlmY29uZmlnIGV0aDAgPGlwLWFkZHJlc3M+CisgICBXaXRoIHRoaXMgY29tbWFuZCwgdGhlIGFkYXB0ZXIgaXMgY29ubmVjdGVkIHRvIHRoZSBFdGhlcm5ldC4gCisgICAKKyAgIFNLLTk4eHggR2lnYWJpdCBFdGhlcm5ldCBTZXJ2ZXIgQWRhcHRlcnM6IFRoZSB5ZWxsb3cgTEVEIG9uIHRoZSBhZGFwdGVyIAorICAgaXMgbm93IGFjdGl2ZSwgdGhlIGxpbmsgc3RhdHVzIExFRCBvZiB0aGUgcHJpbWFyeSBwb3J0IGlzIGFjdGl2ZSBhbmQgCisgICB0aGUgbGluayBzdGF0dXMgTEVEIG9mIHRoZSBzZWNvbmRhcnkgcG9ydCAob24gZHVhbCBwb3J0IGFkYXB0ZXJzKSBpcyAKKyAgIGJsaW5raW5nIChpZiB0aGUgcG9ydHMgYXJlIGNvbm5lY3RlZCB0byBhIHN3aXRjaCBvciBodWIpLgorICAgU0stOTh4eCBWMi4wIEdpZ2FiaXQgRXRoZXJuZXQgQWRhcHRlcnM6IFRoZSBsaW5rIHN0YXR1cyBMRUQgaXMgYWN0aXZlLgorICAgSW4gYWRkaXRpb24sIHlvdSB3aWxsIHJlY2VpdmUgYSBzdGF0dXMgbWVzc2FnZSBvbiB0aGUgY29uc29sZSBzdGF0aW5nCisgICAiZXRoWDogbmV0d29yayBjb25uZWN0aW9uIHVwIHVzaW5nIHBvcnQgWSIgYW5kIHNob3dpbmcgdGhlIHNlbGVjdGVkIAorICAgY29ubmVjdGlvbiBwYXJhbWV0ZXJzICh4IHN0YW5kcyBmb3IgdGhlIGV0aGVybmV0IGRldmljZSBudW1iZXIgCisgICAoMCwxLDIsIGV0YyksIHkgc3RhbmRzIGZvciB0aGUgcG9ydCBuYW1lIChBIG9yIEIpKS4KKworICAgTk9URTogSWYgeW91IGFyZSBpbiBkb3VidCBhYm91dCBJUCBhZGRyZXNzZXMsIGFzayB5b3VyIG5ldHdvcmsKKyAgICAgICAgIGFkbWluaXN0cmF0b3IgZm9yIGFzc2lzdGFuY2UuCisgIAorNC4gWW91ciBhZGFwdGVyIHNob3VsZCBub3cgYmUgZnVsbHkgb3BlcmF0aW9uYWwuCisgICBVc2UgJ3BpbmcgPG90aGVyc3RhdGlvbj4nIHRvIHZlcmlmeSB0aGUgY29ubmVjdGlvbiB0byBvdGhlciBjb21wdXRlcnMgCisgICBvbiB5b3VyIG5ldHdvcmsuCis1LiBUbyBjaGVjayB0aGUgYWRhcHRlciBjb25maWd1cmF0aW9uIHZpZXcgL3Byb2MvbmV0L3NrOThsaW4vW2RldmljZW5hbWVdLgorICAgRm9yIGV4YW1wbGUgYnkgZXhlY3V0aW5nOiAgICAKKyAgICJjYXQgL3Byb2MvbmV0L3NrOThsaW4vZXRoMCIgCisKK1VubG9hZCB0aGUgbW9kdWxlCistLS0tLS0tLS0tLS0tLS0tLQorVG8gc3RvcCBhbmQgdW5sb2FkIHRoZSBkcml2ZXIgbW9kdWxlcywgcHJvY2VlZCBhcyBmb2xsb3dzOgorCisxLiBFeGVjdXRlIHRoZSBjb21tYW5kICJpZmNvbmZpZyBldGgwIGRvd24iLgorMi4gRXhlY3V0ZSB0aGUgY29tbWFuZCAicm1tb2Qgc2s5OGxpbiIuCisKKzMuMiAgSW5jbHVzaW9uIG9mIGFkYXB0ZXIgYXQgc3lzdGVtIHN0YXJ0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTaW5jZSBhIGxhcmdlIG51bWJlciBvZiBkaWZmZXJlbnQgTGludXggZGlzdHJpYnV0aW9ucyBhcmUgCithdmFpbGFibGUsIHdlIGFyZSB1bmFibGUgdG8gZGVzY3JpYmUgYSBnZW5lcmFsIGluc3RhbGxhdGlvbiBwcm9jZWR1cmUKK2ZvciB0aGUgZHJpdmVyIG1vZHVsZS4KK0JlY2F1c2UgdGhlIGRyaXZlciBpcyBub3cgaW50ZWdyYXRlZCBpbiB0aGUga2VybmVsLCBpbnN0YWxsYXRpb24gc2hvdWxkCitiZSBlYXN5LCB1c2luZyB0aGUgc3RhbmRhcmQgbWVjaGFuaXNtIG9mIHlvdXIgZGlzdHJpYnV0aW9uLgorUmVmZXIgdG8gdGhlIGRpc3RyaWJ1dGlvbidzIG1hbnVhbCBmb3IgaW5zdGFsbGF0aW9uIG9mIGV0aGVybmV0IGFkYXB0ZXJzLgorCisqKioKKworNCAgRHJpdmVyIFBhcmFtZXRlcnMKKz09PT09PT09PT09PT09PT09PT09CisKK1BhcmFtZXRlcnMgY2FuIGJlIHNldCBhdCB0aGUgY29tbWFuZCBsaW5lIGFmdGVyIHRoZSBtb2R1bGUgaGFzIGJlZW4gCitsb2FkZWQgd2l0aCB0aGUgY29tbWFuZCAnbW9kcHJvYmUnLgorSW4gc29tZSBkaXN0cmlidXRpb25zLCB0aGUgY29uZmlndXJhdGlvbiB0b29scyBhcmUgYWJsZSB0byBwYXNzIHBhcmFtZXRlcnMKK3RvIHRoZSBkcml2ZXIgbW9kdWxlLgorCitJZiB5b3UgdXNlIHRoZSBrZXJuZWwgbW9kdWxlIGxvYWRlciwgeW91IGNhbiBzZXQgZHJpdmVyIHBhcmFtZXRlcnMKK2luIHRoZSBmaWxlIC9ldGMvbW9kcHJvYmUuY29uZiAob3IgL2V0Yy9tb2R1bGVzLmNvbmYgaW4gMi40IG9yIGVhcmxpZXIpLgorVG8gc2V0IHRoZSBkcml2ZXIgcGFyYW1ldGVycyBpbiB0aGlzIGZpbGUsIHByb2NlZWQgYXMgZm9sbG93czoKKworMS4gSW5zZXJ0IGEgbGluZSBvZiB0aGUgZm9ybSA6CisgICBvcHRpb25zIHNrOThsaW4gLi4uCisgICBGb3IgIi4uLiIsIHRoZSBzYW1lIHN5bnRheCBpcyByZXF1aXJlZCBhcyBkZXNjcmliZWQgZm9yIHRoZSBjb21tYW5kCisgICBsaW5lIHBhcmFtYXRlcnMgb2YgbW9kcHJvYmUgYmVsb3cuCisyLiBUbyBhY3RpdmF0ZSB0aGUgbmV3IHBhcmFtZXRlcnMsIGVpdGhlciByZWJvb3QgeW91ciBjb21wdXRlcgorICAgb3IgCisgICB1bmxvYWQgYW5kIHJlbG9hZCB0aGUgZHJpdmVyLgorICAgVGhlIHN5bnRheCBvZiB0aGUgZHJpdmVyIHBhcmFtZXRlcnMgaXM6CisKKyAgICAgICAgbW9kcHJvYmUgc2s5OGxpbiBwYXJhbWV0ZXI9dmFsdWUxWyx2YWx1ZTJbLHZhbHVlMy4uLl1dCisKKyAgIHdoZXJlIHZhbHVlMSByZWZlcnMgdG8gdGhlIGZpcnN0IGFkYXB0ZXIsIHZhbHVlMiB0byB0aGUgc2Vjb25kIGV0Yy4KKworTk9URTogQWxsIHBhcmFtZXRlcnMgYXJlIGNhc2Ugc2Vuc2l0aXZlLiBXcml0ZSB0aGVtIGV4YWN0bHkgYXMgc2hvd24gCisgICAgICBiZWxvdy4KKworRXhhbXBsZToKK1N1cHBvc2UgeW91IGhhdmUgdHdvIGFkYXB0ZXJzLiBZb3Ugd2FudCB0byBzZXQgYXV0by1uZWdvdGlhdGlvbgorb24gdGhlIGZpcnN0IGFkYXB0ZXIgdG8gT04gYW5kIG9uIHRoZSBzZWNvbmQgYWRhcHRlciB0byBPRkYuCitZb3UgYWxzbyB3YW50IHRvIHNldCBEdXBsZXhDYXBhYmlsaXRpZXMgb24gdGhlIGZpcnN0IGFkYXB0ZXIKK3RvIEZVTEwsIGFuZCBvbiB0aGUgc2Vjb25kIGFkYXB0ZXIgdG8gSEFMRi4KK1RoZW4sIHlvdSBtdXN0IGVudGVyOgorCisgICAgICAgIG1vZHByb2JlIHNrOThsaW4gQXV0b05lZ19BPU9uLE9mZiBEdXBDYXBfQT1GdWxsLEhhbGYKKworTk9URTogVGhlIG51bWJlciBvZiBhZGFwdGVycyB0aGF0IGNhbiBiZSBjb25maWd1cmVkIHRoaXMgd2F5IGlzCisgICAgICBsaW1pdGVkIGluIHRoZSBkcml2ZXIgKGZpbGUgc2tnZS5jLCBjb25zdGFudCBTS19NQVhfQ0FSRF9QQVJBTSkuCisgICAgICBUaGUgY3VycmVudCBsaW1pdCBpcyAxNi4gSWYgeW91IGhhcHBlbiB0byBpbnN0YWxsCisgICAgICBtb3JlIGFkYXB0ZXJzLCBhZGp1c3QgdGhpcyBhbmQgcmVjb21waWxlLgorCisKKzQuMSAgUGVyLVBvcnQgUGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIHNldHRpbmdzIGFyZSBhdmFpbGFibGUgZm9yIGVhY2ggcG9ydCBvbiB0aGUgYWRhcHRlci4KK0luIHRoZSBmb2xsb3dpbmcgZGVzY3JpcHRpb24sICc/JyBzdGFuZHMgZm9yIHRoZSBwb3J0IGZvcgord2hpY2ggeW91IHNldCB0aGUgcGFyYW1ldGVyIChBIG9yIEIpLgorCitTcGVlZAorLS0tLS0KK1BhcmFtZXRlcjogICAgU3BlZWRfPworVmFsdWVzOiAgICAgICAxMCwgMTAwLCAxMDAwLCBBdXRvCitEZWZhdWx0OiAgICAgIEF1dG8KKworVGhpcyBwYXJhbWV0ZXIgaXMgdXNlZCB0byBzZXQgdGhlIHNwZWVkIGNhcGFiaWxpdGllcy4gSXQgaXMgb25seSB2YWxpZCAKK2ZvciB0aGUgU0stOTh4eCBWMi4wIGNvcHBlciBhZGFwdGVycy4KK1VzdWFsbHksIHRoZSBzcGVlZCBpcyBuZWdvdGlhdGVkIGJldHdlZW4gdGhlIHR3byBwb3J0cyBkdXJpbmcgbGluayAKK2VzdGFibGlzaG1lbnQuIElmIHRoaXMgZmFpbHMsIGEgcG9ydCBjYW4gYmUgZm9yY2VkIHRvIGEgc3BlY2lmaWMgc2V0dGluZword2l0aCB0aGlzIHBhcmFtZXRlci4KKworQXV0by1OZWdvdGlhdGlvbgorLS0tLS0tLS0tLS0tLS0tLQorUGFyYW1ldGVyOiAgICBBdXRvTmVnXz8KK1ZhbHVlczogICAgICAgT24sIE9mZiwgU2Vuc2UKK0RlZmF1bHQ6ICAgICAgT24KKyAgCitUaGUgIlNlbnNlIi1tb2RlIGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyB3aGV0aGVyIHRoZSBsaW5rIHBhcnRuZXIgc3VwcG9ydHMKK2F1dG8tbmVnb3RpYXRpb24gb3Igbm90LgorCitEdXBsZXggQ2FwYWJpbGl0aWVzCistLS0tLS0tLS0tLS0tLS0tLS0tCitQYXJhbWV0ZXI6ICAgIER1cENhcF8/CitWYWx1ZXM6ICAgICAgIEhhbGYsIEZ1bGwsIEJvdGgKK0RlZmF1bHQ6ICAgICAgQm90aAorCitUaGlzIHBhcmFtZXRlcnMgaXMgb25seSByZWxldmFudCBpZiBhdXRvLW5lZ290aWF0aW9uIGZvciB0aGlzIHBvcnQgaXMgCitub3Qgc2V0IHRvICJTZW5zZSIuIElmIGF1dG8tbmVnb3RpYXRpb24gaXMgc2V0IHRvICJPbiIsIGFsbCB0aHJlZSB2YWx1ZXMKK2FyZSBwb3NzaWJsZS4gSWYgaXQgaXMgc2V0IHRvICJPZmYiLCBvbmx5ICJGdWxsIiBhbmQgIkhhbGYiIGFyZSBhbGxvd2VkLgorVGhpcyBwYXJhbWV0ZXIgaXMgdXNlZnVsbCBpZiB5b3VyIGxpbmsgcGFydG5lciBkb2VzIG5vdCBzdXBwb3J0IGFsbAorcG9zc2libGUgY29tYmluYXRpb25zLgorCitGbG93IENvbnRyb2wKKy0tLS0tLS0tLS0tLQorUGFyYW1ldGVyOiAgICBGbG93Q3RybF8/CitWYWx1ZXM6ICAgICAgIFN5bSwgU3ltT3JSZW0sIExvY1NlbmQsIE5vbmUKK0RlZmF1bHQ6ICAgICAgU3ltT3JSZW0KKworVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBmbG93IGNvbnRyb2wgY2FwYWJpbGl0aWVzIHRoZSAKK3BvcnQgcmVwb3J0cyBkdXJpbmcgYXV0by1uZWdvdGlhdGlvbi4gSXQgY2FuIGJlIHNldCBmb3IgZWFjaCBwb3J0IAoraW5kaXZpZHVhbGx5LgorUG9zc2libGUgbW9kZXM6CisgICAtLSBTeW0gICAgICA9IFN5bW1ldHJpYzogYm90aCBsaW5rIHBhcnRuZXJzIGFyZSBhbGxvd2VkIHRvIHNlbmQgCisgICAgICAgICAgICAgICAgICBQQVVTRSBmcmFtZXMKKyAgIC0tIFN5bU9yUmVtID0gU3ltbWV0cmljT3JSZW1vdGU6IGJvdGggb3Igb25seSByZW1vdGUgcGFydG5lciAKKyAgICAgICAgICAgICAgICAgIGFyZSBhbGxvd2VkIHRvIHNlbmQgUEFVU0UgZnJhbWVzCisgICAtLSBMb2NTZW5kICA9IExvY2FsU2VuZDogb25seSBsb2NhbCBsaW5rIHBhcnRuZXIgaXMgYWxsb3dlZCAKKyAgICAgICAgICAgICAgICAgIHRvIHNlbmQgUEFVU0UgZnJhbWVzCisgICAtLSBOb25lICAgICA9IG5vIGxpbmsgcGFydG5lciBpcyBhbGxvd2VkIHRvIHNlbmQgUEFVU0UgZnJhbWVzCisgIAorTk9URTogVGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZCBpZiBhdXRvLW5lZ290aWF0aW9uIGlzIHNldCB0byAiT2ZmIi4KKworUm9sZSBpbiBNYXN0ZXItU2xhdmUtTmVnb3RpYXRpb24gKDEwMDBCYXNlLVQgb25seSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQYXJhbWV0ZXI6ICAgIFJvbGVfPworVmFsdWVzOiAgICAgICBBdXRvLCBNYXN0ZXIsIFNsYXZlCitEZWZhdWx0OiAgICAgIEF1dG8KKworVGhpcyBwYXJhbWV0ZXIgaXMgb25seSB2YWxpZCBmb3IgdGhlIFNLLTk4MjEgYW5kIFNLLTk4MjIgYWRhcHRlcnMuCitGb3IgdHdvIDEwMDBCYXNlLVQgcG9ydHMgdG8gY29tbXVuaWNhdGUsIG9uZSBtdXN0IHRha2UgdGhlIHJvbGUgb2YgdGhlCittYXN0ZXIgKHByb3ZpZGluZyB0aW1pbmcgaW5mb3JtYXRpb24pLCB3aGlsZSB0aGUgb3RoZXIgbXVzdCBiZSB0aGUgCitzbGF2ZS4gVXN1YWxseSwgdGhpcyBpcyBuZWdvdGlhdGVkIGJldHdlZW4gdGhlIHR3byBwb3J0cyBkdXJpbmcgbGluayAKK2VzdGFibGlzaG1lbnQuIElmIHRoaXMgZmFpbHMsIGEgcG9ydCBjYW4gYmUgZm9yY2VkIHRvIGEgc3BlY2lmaWMgc2V0dGluZword2l0aCB0aGlzIHBhcmFtZXRlci4KKworCis0LjIgIEFkYXB0ZXIgUGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29ubmVjdGlvbiBUeXBlIChTSy05OHh4IFYyLjAgY29wcGVyIGFkYXB0ZXJzIG9ubHkpCistLS0tLS0tLS0tLS0tLS0KK1BhcmFtZXRlcjogICAgQ29uVHlwZQorVmFsdWVzOiAgICAgICBBdXRvLCAxMDBGRCwgMTAwSEQsIDEwRkQsIDEwSEQKK0RlZmF1bHQ6ICAgICAgQXV0bworCitUaGUgcGFyYW1ldGVyICdDb25UeXBlJyBpcyBhIGNvbWJpbmF0aW9uIG9mIGFsbCBmaXZlIHBlci1wb3J0IHBhcmFtZXRlcnMKK3dpdGhpbiBvbmUgc2luZ2xlIHBhcmFtZXRlci4gVGhpcyBzaW1wbGlmaWVzIHRoZSBjb25maWd1cmF0aW9uIG9mIGJvdGggcG9ydHMKK29mIGFuIGFkYXB0ZXIgY2FyZCEgVGhlIGRpZmZlcmVudCB2YWx1ZXMgb2YgdGhpcyB2YXJpYWJsZSByZWZsZWN0IHRoZSBtb3N0IAorbWVhbmluZ2Z1bCBjb21iaW5hdGlvbnMgb2YgcG9ydCBwYXJhbWV0ZXJzLgorCitUaGUgZm9sbG93aW5nIHRhYmxlIHNob3dzIHRoZSB2YWx1ZXMgb2YgJ0NvblR5cGUnIGFuZCB0aGUgY29ycmVzcG9uZGluZworY29tYmluYXRpb25zIG9mIHRoZSBwZXItcG9ydCBwYXJhbWV0ZXJzOgorCisgICAgQ29uVHlwZSAgIHwgIER1cENhcCAgIEF1dG9OZWcgICBGbG93Q3RybCAgIFJvbGUgICAgICAgICAgICAgU3BlZWQKKyAgICAtLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIEF1dG8gICAgICB8ICBCb3RoICAgICBPbiAgICAgICAgU3ltT3JSZW0gICBBdXRvICAgICAgICAgICAgIEF1dG8KKyAgICAxMDBGRCAgICAgfCAgRnVsbCAgICAgT2ZmICAgICAgIE5vbmUgICAgICAgQXV0byAoaWdub3JlZCkgICAxMDAKKyAgICAxMDBIRCAgICAgfCAgSGFsZiAgICAgT2ZmICAgICAgIE5vbmUgICAgICAgQXV0byAoaWdub3JlZCkgICAxMDAKKyAgICAxMEZEICAgICAgfCAgRnVsbCAgICAgT2ZmICAgICAgIE5vbmUgICAgICAgQXV0byAoaWdub3JlZCkgICAxMAorICAgIDEwSEQgICAgICB8ICBIYWxmICAgICBPZmYgICAgICAgTm9uZSAgICAgICBBdXRvIChpZ25vcmVkKSAgIDEwCisKK1N0YXRpbmcgYW55IG90aGVyIHBvcnQgcGFyYW1ldGVyIHRvZ2V0aGVyIHdpdGggdGhpcyAnQ29uVHlwZScgdmFyaWFibGUKK3dpbGwgcmVzdWx0IGluIGEgbWVyZ2VkIGNvbmZpZ3VyYXRpb24gb2YgdGhvc2Ugc2V0dGluZ3MuIFRoaXMgZHVlIHRvIAordGhlIGZhY3QsIHRoYXQgdGhlIHBlci1wb3J0IHBhcmFtZXRlcnMgKGUuZy4gU3BlZWRfPyApIGhhdmUgYSBoaWdoZXIKK3ByaW9yaXR5IHRoYW4gdGhlIGNvbWJpbmVkIHZhcmlhYmxlICdDb25UeXBlJy4KKworTk9URTogVGhpcyBwYXJhbWV0ZXIgaXMgYWx3YXlzIHVzZWQgb24gYm90aCBwb3J0cyBvZiB0aGUgYWRhcHRlciBjYXJkLgorCitJbnRlcnJ1cHQgTW9kZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1BhcmFtZXRlcjogICAgTW9kZXJhdGlvbgorVmFsdWVzOiAgICAgICBOb25lLCBTdGF0aWMsIER5bmFtaWMKK0RlZmF1bHQ6ICAgICAgTm9uZQorCitJbnRlcnJ1cHQgbW9kZXJhdGlvbiBpcyBlbXBsb3llZCB0byBsaW1pdCB0aGUgbWF4bWltdW0gbnVtYmVyIG9mIGludGVycnVwdHMKK3RoZSBkcml2ZXIgaGFzIHRvIHNlcnZlLiBUaGF0IGlzLCBvbmUgb3IgbW9yZSBpbnRlcnJ1cHRzICh3aGljaCBpbmRpY2F0ZSBhbnkKK3RyYW5zbWl0IG9yIHJlY2VpdmUgcGFja2V0IHRvIGJlIHByb2Nlc3NlZCkgYXJlIHF1ZXVlZCB1bnRpbCB0aGUgZHJpdmVyIAorcHJvY2Vzc2VzIHRoZW0uIFdoZW4gcXVldWVkIGludGVycnVwdHMgYXJlIHRvIGJlIHNlcnZlZCwgaXMgZGV0ZXJtaW5lZCBieSB0aGUKKydJbnRzUGVyU2VjJyBwYXJhbWV0ZXIsIHdoaWNoIGlzIGV4cGxhaW5lZCBsYXRlciBiZWxvdy4KKworUG9zc2libGUgbW9kZXM6CisKKyAgIC0tIE5vbmUgLSBObyBpbnRlcnJ1cHQgbW9kZXJhdGlvbiBpcyBhcHBsaWVkIG9uIHRoZSBhZGFwdGVyIGNhcmQuIAorICAgICAgVGhlcmVmb3JlLCBlYWNoIHRyYW5zbWl0IG9yIHJlY2VpdmUgaW50ZXJydXB0IGlzIHNlcnZlZCBpbW1lZGlhdGVseQorICAgICAgYXMgc29vbiBhcyBpdCBhcHBlYXJzIG9uIHRoZSBpbnRlcnJ1cHQgbGluZSBvZiB0aGUgYWRhcHRlciBjYXJkLgorCisgICAtLSBTdGF0aWMgLSBJbnRlcnJ1cHQgbW9kZXJhdGlvbiBpcyBhcHBsaWVkIG9uIHRoZSBhZGFwdGVyIGNhcmQuIAorICAgICAgQWxsIHRyYW5zbWl0IGFuZCByZWNlaXZlIGludGVycnVwdHMgYXJlIHF1ZXVlZCB1bnRpbCBhIGNvbXBsZXRlCisgICAgICBtb2RlcmF0aW9uIGludGVydmFsIGVuZHMuIElmIHN1Y2ggYSBtb2RlcmF0aW9uIGludGVydmFsIGVuZHMsIGFsbAorICAgICAgcXVldWVkIGludGVycnVwdHMgYXJlIHByb2Nlc3NlZCBpbiBvbmUgYmlnIGJ1bmNoIHdpdGhvdXQgYW55IGRlbGF5LgorICAgICAgVGhlIHRlcm0gJ3N0YXRpYycgcmVmbGVjdHMgdGhlIGZhY3QsIHRoYXQgaW50ZXJydXB0IG1vZGVyYXRpb24gaXMKKyAgICAgIGFsd2F5cyBlbmFibGVkLCByZWdhcmRsZXNzIGhvdyBtdWNoIG5ldHdvcmsgbG9hZCBpcyBjdXJyZW50bHkgCisgICAgICBwYXNzaW5nIHZpYSBhIHBhcnRpY3VsYXIgaW50ZXJmYWNlLiBJbiBhZGRpdGlvbiwgdGhlIGR1cmF0aW9uIG9mCisgICAgICB0aGUgbW9kZXJhdGlvbiBpbnRlcnZhbCBoYXMgYSBmaXhlZCBsZW5ndGggdGhhdCBuZXZlciBjaGFuZ2VzIHdoaWxlCisgICAgICB0aGUgZHJpdmVyIGlzIG9wZXJhdGlvbmFsLgorCisgICAtLSBEeW5hbWljIC0gSW50ZXJydXB0IG1vZGVyYXRpb24gbWlnaHQgYmUgYXBwbGllZCBvbiB0aGUgYWRhcHRlciBjYXJkLAorICAgICAgZGVwZW5kaW5nIG9uIHRoZSBsb2FkIG9mIHRoZSBzeXN0ZW0uIElmIHRoZSBkcml2ZXIgZGV0ZWN0cyB0aGF0IHRoZQorICAgICAgc3lzdGVtIGxvYWQgaXMgdG9vIGhpZ2gsIHRoZSBkcml2ZXIgdHJpZXMgdG8gc2hpZWxkIHRoZSBzeXN0ZW0gYWdhaW5zdCAKKyAgICAgIHRvbyBtdWNoIG5ldHdvcmsgbG9hZCBieSBlbmFibGluZyBpbnRlcnJ1cHQgbW9kZXJhdGlvbi4gSWYgLSBhdCBhIGxhdGVyCisgICAgICB0aW1lIC0gdGhlIENQVSB1dGlsaXphdG9uIGRlY3JlYXNlcyBhZ2FpbiAob3IgaWYgdGhlIG5ldHdvcmsgbG9hZCBpcyAKKyAgICAgIG5lZ2xpZ2libGUpIHRoZSBpbnRlcnJ1cHQgbW9kZXJhdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgZGlzYWJsZWQuCisKK0ludGVycnVwdCBtb2RlcmF0aW9uIHNob3VsZCBiZSB1c2VkIHdoZW4gdGhlIGRyaXZlciBoYXMgdG8gaGFuZGxlIG9uZSBvciBtb3JlCitpbnRlcmZhY2VzIHdpdGggYSBoaWdoIG5ldHdvcmsgbG9hZCwgd2hpY2ggLSBhcyBhIGNvbnNlcXVlbmNlIC0gbGVhZHMgYWxzbyB0byBhCitoaWdoIENQVSB1dGlsaXphdGlvbi4gV2hlbiBtb2RlcmF0aW9uIGlzIGFwcGxpZWQgaW4gc3VjaCBoaWdoIG5ldHdvcmsgbG9hZCAKK3NpdHVhdGlvbnMsIENQVSBsb2FkIG1pZ2h0IGJlIHJlZHVjZWQgYnkgMjAtMzAlLgorCitOT1RFOiBUaGUgZHJhd2JhY2sgb2YgdXNpbmcgaW50ZXJydXB0IG1vZGVyYXRpb24gaXMgYW4gaW5jcmVhc2Ugb2YgdGhlIHJvdW5kLQordHJpcC10aW1lIChSVFQpLCBkdWUgdG8gdGhlIHF1ZXVlaW5nIGFuZCBzZXJ2aW5nIG9mIGludGVycnVwdHMgYXQgZGVkaWNhdGVkCittb2RlcmF0aW9uIHRpbWVzLgorCitJbnRlcnJ1cHRzIHBlciBzZWNvbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUGFyYW1ldGVyOiAgICBJbnRzUGVyU2VjCitWYWx1ZXM6ICAgICAgIDMwLi4uNDAwMDAgKGludGVycnVwdHMgcGVyIHNlY29uZCkKK0RlZmF1bHQ6ICAgICAgMjAwMAorCitUaGlzIHBhcmFtZXRlciBpcyBvbmx5IHVzZWQsIGlmIGVpdGhlciBzdGF0aWMgb3IgZHluYW1pYyBpbnRlcnJ1cHQgbW9kZXJhdGlvbgoraXMgdXNlZCBvbiBhIG5ldHdvcmsgYWRhcHRlciBjYXJkLiBVc2luZyB0aGlzIHBhcmFtdGVyIGlmIG5vIG1vZGVyYXRpb24gaXMKK2FwcGxpZWQsIHdpbGwgbGVhZCB0byBubyBhY3Rpb24gcGVyZm9ybWVkLgorCitUaGlzIHBhcmFtZXRlciBkZXRlcm1pbmVzIHRoZSBsZW5ndGggb2YgYW55IGludGVycnVwdCBtb2RlcmF0aW9uIGludGVydmFsLiAKK0Fzc3VtaW5nIHRoYXQgc3RhdGljIGludGVycnVwdCBtb2RlcmF0aW9uIGlzIHRvIGJlIHVzZWQsIGFuICdJbnRzUGVyU2VjJyAKK3BhcmFtZXRlciB2YWx1ZSBvZiAyMDAwIHdpbGwgbGVhZCB0byBhbiBpbnRlcnJ1cHQgbW9kZXJhdGlvbiBpbnRlcnZhbCBvZgorNTAwIG1pY3Jvc2Vjb25kcy4gCisKK05PVEU6IFRoZSBkdXJhdGlvbiBvZiB0aGUgbW9kZXJhdGlvbiBpbnRlcnZhbCBpcyB0byBiZSBjaG9zZW4gd2l0aCBjYXJlLgorQXQgZmlyc3QgZ2xhbmNlLCBzZWxlY3RpbmcgYSB2ZXJ5IGxvbmcgZHVyYXRpb24gKGUuZy4gb25seSAxMDAgaW50ZXJydXB0cyBwZXIgCitzZWNvbmQpIHNlZW1zIHRvIGJlIG1lYW5pbmdmdWwsIGJ1dCB0aGUgaW5jcmVhc2Ugb2YgcGFja2V0LXByb2Nlc3NpbmcgZGVsYXkgCitpcyB0cmVtZW5kb3VzLiBPbiB0aGUgb3RoZXIgaGFuZCwgc2VsZWN0aW5nIGEgdmVyeSBzaG9ydCBtb2RlcmF0aW9uIHRpbWUgbWlnaHQKK2NvbXBlbnNhdGUgdGhlIHVzZSBvZiBhbnkgbW9kZXJhdGlvbiBiZWluZyBhcHBsaWVkLgorCisKK1ByZWZlcnJlZCBQb3J0CistLS0tLS0tLS0tLS0tLQorUGFyYW1ldGVyOiAgICBQcmVmUG9ydAorVmFsdWVzOiAgICAgICBBLCBCCitEZWZhdWx0OiAgICAgIEEKKworVGhpcyBpcyB1c2VkIHRvIGZvcmNlIHRoZSBwcmVmZXJyZWQgcG9ydCB0byBBIG9yIEIgKG9uIGR1YWwtcG9ydCBuZXR3b3JrIAorYWRhcHRlcnMpLiBUaGUgcHJlZmVycmVkIHBvcnQgaXMgdGhlIG9uZSB0aGF0IGlzIHVzZWQgaWYgYm90aCBhcmUgZGV0ZWN0ZWQKK2FzIGZ1bGx5IGZ1bmN0aW9uYWwuCisKK1JMTVQgTW9kZSAoUmVkdW5kYW50IExpbmsgTWFuYWdlbWVudCBUZWNobm9sb2d5KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQYXJhbWV0ZXI6ICAgIFJsbXRNb2RlCitWYWx1ZXM6ICAgICAgIENoZWNrTGlua1N0YXRlLENoZWNrTG9jYWxQb3J0LCBDaGVja1NlZywgRHVhbE5ldAorRGVmYXVsdDogICAgICBDaGVja0xpbmtTdGF0ZQorCitSTE1UIG1vbml0b3JzIHRoZSBzdGF0dXMgb2YgdGhlIHBvcnQuIElmIHRoZSBsaW5rIG9mIHRoZSBhY3RpdmUgcG9ydCAKK2ZhaWxzLCBSTE1UIHN3aXRjaGVzIGltbWVkaWF0ZWx5IHRvIHRoZSBzdGFuZGJ5IGxpbmsuIFRoZSB2aXJ0dWFsIGxpbmsgaXMgCittYWludGFpbmVkIGFzIGxvbmcgYXMgYXQgbGVhc3Qgb25lICdwaHlzaWNhbCcgbGluayBpcyB1cC4gCisKK1Bvc3NpYmxlIG1vZGVzOgorCisgICAtLSBDaGVja0xpbmtTdGF0ZSAtIENoZWNrIGxpbmsgc3RhdGUgb25seTogUkxNVCB1c2VzIHRoZSBsaW5rIHN0YXRlCisgICAgICByZXBvcnRlZCBieSB0aGUgYWRhcHRlciBoYXJkd2FyZSBmb3IgZWFjaCBpbmRpdmlkdWFsIHBvcnQgdG8gCisgICAgICBkZXRlcm1pbmUgd2hldGhlciBhIHBvcnQgY2FuIGJlIHVzZWQgZm9yIGFsbCBuZXR3b3JrIHRyYWZmaWMgb3IgCisgICAgICBub3QuCisKKyAgIC0tIENoZWNrTG9jYWxQb3J0IC0gSW4gdGhpcyBtb2RlLCBSTE1UIG1vbml0b3JzIHRoZSBuZXR3b3JrIHBhdGggCisgICAgICBiZXR3ZWVuIHRoZSB0d28gcG9ydHMgb2YgYW4gYWRhcHRlciBieSByZWd1bGFybHkgZXhjaGFuZ2luZyBwYWNrZXRzCisgICAgICBiZXR3ZWVuIHRoZW0uIFRoaXMgbW9kZSByZXF1aXJlcyBhIG5ldHdvcmsgY29uZmlndXJhdGlvbiBpbiB3aGljaCAKKyAgICAgIHRoZSB0d28gcG9ydHMgYXJlIGFibGUgdG8gInNlZSIgZWFjaCBvdGhlciAoaS5lLiB0aGVyZSBtdXN0IG5vdCBiZSAKKyAgICAgIGFueSByb3V0ZXIgYmV0d2VlbiB0aGUgcG9ydHMpLgorCisgICAtLSBDaGVja1NlZyAtIENoZWNrIGxvY2FsIHBvcnQgYW5kIHNlZ21lbnRhdGlvbjogVGhpcyBtb2RlIHN1cHBvcnRzIHRoZQorICAgICAgc2FtZSBmdW5jdGlvbnMgYXMgdGhlIENoZWNrTG9jYWxQb3J0IG1vZGUgYW5kIGFkZGl0aW9uYWxseSBjaGVja3MgCisgICAgICBuZXR3b3JrIHNlZ21lbnRhdGlvbiBiZXR3ZWVuIHRoZSBwb3J0cy4gVGhlcmVmb3JlLCB0aGlzIG1vZGUgaXMgb25seQorICAgICAgdG8gYmUgdXNlZCBpZiBHaWdhYml0IEV0aGVybmV0IHN3aXRjaGVzIGFyZSBpbnN0YWxsZWQgb24gdGhlIG5ldHdvcmsKKyAgICAgIHRoYXQgaGF2ZSBiZWVuIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBTcGFubmluZyBUcmVlIHByb3RvY29sLiAKKworICAgLS0gRHVhbE5ldCAtIEluIHRoaXMgbW9kZSwgcG9ydHMgQSBhbmQgQiBhcmUgdXNlZCBhcyBzZXBhcmF0ZSBkZXZpY2VzLiAKKyAgICAgIElmIHlvdSBoYXZlIGEgZHVhbCBwb3J0IGFkYXB0ZXIsIHBvcnQgQSB3aWxsIGJlIGNvbmZpZ3VyZWQgYXMgZXRoMCAKKyAgICAgIGFuZCBwb3J0IEIgYXMgZXRoMS4gQm90aCBwb3J0cyBjYW4gYmUgdXNlZCBpbmRlcGVuZGVudGx5IHdpdGggCisgICAgICBkaXN0aW5jdCBJUCBhZGRyZXNzZXMuIFRoZSBwcmVmZXJyZWQgcG9ydCBzZXR0aW5nIGlzIG5vdCB1c2VkLiAKKyAgICAgIFJMTVQgaXMgdHVybmVkIG9mZi4KKyAgIAorTk9URTogUkxNVCBtb2RlcyBDTFAgYW5kIENMUFNTIGFyZSBkZXNpZ25lZCB0byBvcGVyYXRlIGluIGNvbmZpZ3VyYXRpb25zIAorICAgICAgd2hlcmUgYSBuZXR3b3JrIHBhdGggYmV0d2VlbiB0aGUgcG9ydHMgb24gb25lIGFkYXB0ZXIgZXhpc3RzLiAKKyAgICAgIE1vcmVvdmVyLCB0aGV5IGFyZSBub3QgZGVzaWduZWQgdG8gd29yayB3aGVyZSBhZGFwdGVycyBhcmUgY29ubmVjdGVkCisgICAgICBiYWNrLXRvLWJhY2suCisqKioKKworCis1ICBMYXJnZSBGcmFtZSBTdXBwb3J0Cis9PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBkcml2ZXIgc3VwcG9ydHMgbGFyZ2UgZnJhbWVzIChhbHNvIGNhbGxlZCBqdW1ibyBmcmFtZXMpLiBVc2luZyBsYXJnZSAKK2ZyYW1lcyBjYW4gcmVzdWx0IGluIGFuIGltcHJvdmVkIHRocm91Z2hwdXQgaWYgdHJhbnNmZXJyaW5nIGxhcmdlIGFtb3VudHMgCitvZiBkYXRhLgorVG8gZW5hYmxlIGxhcmdlIGZyYW1lcywgc2V0IHRoZSBNVFUgKG1heGltdW0gdHJhbnNmZXIgdW5pdCkgb2YgdGhlIAoraW50ZXJmYWNlIHRvIHRoZSBkZXNpcmVkIHZhbHVlICh1cCB0byA5MDAwKSwgZXhlY3V0ZSB0aGUgZm9sbG93aW5nIAorY29tbWFuZDoKKyAgICAgIGlmY29uZmlnIGV0aDAgbXR1IDkwMDAKK1RoaXMgd2lsbCBvbmx5IHdvcmsgaWYgeW91IGhhdmUgdHdvIGFkYXB0ZXJzIGNvbm5lY3RlZCBiYWNrLXRvLWJhY2sKK29yIGlmIHlvdSB1c2UgYSBzd2l0Y2ggdGhhdCBzdXBwb3J0cyBsYXJnZSBmcmFtZXMuIFdoZW4gdXNpbmcgYSBzd2l0Y2gsIAoraXQgc2hvdWxkIGJlIGNvbmZpZ3VyZWQgdG8gYWxsb3cgbGFyZ2UgZnJhbWVzIGFuZCBhdXRvLW5lZ290aWF0aW9uIHNob3VsZCAgCitiZSBzZXQgdG8gT0ZGLiBUaGUgc2V0dGluZyBtdXN0IGJlIGNvbmZpZ3VyZWQgb24gYWxsIGFkYXB0ZXJzIHRoYXQgY2FuIGJlIAorcmVhY2hlZCBieSB0aGUgbGFyZ2UgZnJhbWVzLiBJZiBvbmUgYWRhcHRlciBpcyBub3Qgc2V0IHRvIHJlY2VpdmUgbGFyZ2UgCitmcmFtZXMsIGl0IHdpbGwgc2ltcGx5IGRyb3AgdGhlbS4KKworWW91IGNhbiBzd2l0Y2ggYmFjayB0byB0aGUgc3RhbmRhcmQgZXRoZXJuZXQgZnJhbWUgc2l6ZSBieSBleGVjdXRpbmcgdGhlIAorZm9sbG93aW5nIGNvbW1hbmQ6CisgICAgICBpZmNvbmZpZyBldGgwIG10dSAxNTAwCisKK1RvIHBlcm1hbmVudGx5IGNvbmZpZ3VyZSB0aGlzIHNldHRpbmcsIGFkZCBhIHNjcmlwdCB3aXRoIHRoZSAnaWZjb25maWcnIAorbGluZSB0byB0aGUgc3lzdGVtIHN0YXJ0dXAgc2VxdWVuY2UgKG5hbWVkIHNvbWV0aGluZyBsaWtlICJTOTlzazk4bGluIiAKK2luIC9ldGMvcmMuZC9yYzIuZCkuCisqKioKKworCis2ICBWTEFOIGFuZCBMaW5rIEFnZ3JlZ2F0aW9uIFN1cHBvcnQgKElFRUUgODAyLjEsIDgwMi4xcSwgODAyLjNhZCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgTWFydmVsbCBZdWtvbi9TeXNLb25uZWN0IExpbnV4IGRyaXZlcnMgYXJlIGFibGUgdG8gc3VwcG9ydCBWTEFOIGFuZCAKK0xpbmsgQWdncmVnYXRpb24gYWNjb3JkaW5nIHRvIElFRUUgc3RhbmRhcmRzIDgwMi4xLCA4MDIuMXEsIGFuZCA4MDIuM2FkLiAKK1RoZXNlIGZlYXR1cmVzIGFyZSBvbmx5IGF2YWlsYWJsZSBhZnRlciBpbnN0YWxsYXRpb24gb2Ygb3BlbiBzb3VyY2UgCittb2R1bGVzIGF2YWlsYWJsZSBvbiB0aGUgSW50ZXJuZXQ6CitGb3IgVkxBTiBnbyB0bzogaHR0cDovL3d3dy5jYW5kZWxhdGVjaC5jb20vfmdyZWVhci92bGFuLmh0bWwKK0ZvciBMaW5rIEFnZ3JlZ2F0aW9uIGdvIHRvOiBodHRwOi8vd3d3LnN0LnJpbS5vci5qcC9+eXVtbworCitOT1RFOiBTeXNLb25uZWN0IEdtYkggZG9lcyBub3Qgb2ZmZXIgYW55IHN1cHBvcnQgZm9yIHRoZXNlIG9wZW4gc291cmNlIAorICAgICAgbW9kdWxlcyBhbmQgZG9lcyBub3QgdGFrZSB0aGUgcmVzcG9uc2liaWxpdHkgZm9yIGFueSBraW5kIG9mIAorICAgICAgZmFpbHVyZXMgb3IgcHJvYmxlbXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHdpdGggdGhlc2UgbW9kdWxlcy4KKworTk9URTogQ29uZmlndXJpbmcgTGluayBBZ2dyZWdhdGlvbiBvbiBhIFN5c0tvbm5lY3QgZHVhbCBsaW5rIGFkYXB0ZXIgbWF5IAorICAgICAgY2F1c2UgcHJvYmxlbXMgd2hlbiB1bmxvYWRpbmcgdGhlIGRyaXZlci4KKworCis3ICBUcm91Ymxlc2hvb3RpbmcKKz09PT09PT09PT09PT09PT09PQorCitJZiBhbnkgcHJvYmxlbXMgb2NjdXIgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2VzcywgY2hlY2sgdGhlIAorZm9sbG93aW5nIGxpc3Q6CisKKworUHJvYmxlbTogIFRoZSBTSy05OHh4IGFkYXB0ZXIgY2FuIG5vdCBiZSBmb3VuZCBieSB0aGUgZHJpdmVyLgorU29sdXRpb246IEluIC9wcm9jL3BjaSBzZWFyY2ggZm9yIHRoZSBmb2xsb3dpbmcgZW50cnk6CisgICAgICAgICAgICAgJ0V0aGVybmV0IGNvbnRyb2xsZXI6IFN5c0tvbm5lY3QgU0stOTh4eCAuLi4nCisgICAgICAgICAgSWYgdGhpcyBlbnRyeSBleGlzdHMsIHRoZSBTSy05OHh4IG9yIFNLLTk4eHggVjIuMCBhZGFwdGVyIGhhcyAKKyAgICAgICAgICBiZWVuIGZvdW5kIGJ5IHRoZSBzeXN0ZW0gYW5kIHNob3VsZCBiZSBvcGVyYXRpb25hbC4KKyAgICAgICAgICBJZiB0aGlzIGVudHJ5IGRvZXMgbm90IGV4aXN0IG9yIGlmIHRoZSBmaWxlICcvcHJvYy9wY2knIGlzIG5vdCAKKyAgICAgICAgICBmb3VuZCwgdGhlcmUgbWF5IGJlIGEgaGFyZHdhcmUgcHJvYmxlbSBvciB0aGUgUENJIHN1cHBvcnQgbWF5IAorICAgICAgICAgIG5vdCBiZSBlbmFibGVkIGluIHlvdXIga2VybmVsLgorICAgICAgICAgIFRoZSBhZGFwdGVyIGNhbiBiZSBjaGVja2VkIHVzaW5nIHRoZSBkaWFnbm9zdGljcyBwcm9ncmFtIHdoaWNoIAorICAgICAgICAgIGlzIGF2YWlsYWJsZSBvbiB0aGUgU3lzS29ubmVjdCB3ZWIgc2l0ZToKKyAgICAgICAgICB3d3cuc3lza29ubmVjdC5jb20KKyAgICAgICAgICAKKyAgICAgICAgICBTb21lIENPTVBBUSBtYWNoaW5lcyBoYXZlIHByb2JsZW1zIGRlYWxpbmcgd2l0aCBQQ0kgdW5kZXIgTGludXguCisgICAgICAgICAgTGludXguIFRoaXMgcHJvYmxlbSBpcyBkZXNjcmliZWQgaW4gdGhlICdQQ0kgaG93dG8nIGRvY3VtZW50CisgICAgICAgICAgKGluY2x1ZGVkIGluIHNvbWUgZGlzdHJpYnV0aW9ucyBvciBhdmFpbGFibGUgZnJvbSB0aGUKKyAgICAgICAgICB3ZWIsIGUuZy4gYXQgJ3d3dy5saW51eC5vcmcnKS4gCisKKworUHJvYmxlbTogIFByb2dyYW1zIHN1Y2ggYXMgJ2lmY29uZmlnJyBvciAncm91dGUnIGNhbiBub3QgYmUgZm91bmQgb3IgdGhlIAorICAgICAgICAgIGVycm9yIG1lc3NhZ2UgJ09wZXJhdGlvbiBub3QgcGVybWl0dGVkJyBpcyBkaXNwbGF5ZWQuCitSZWFzb246ICAgWW91IGFyZSBub3QgbG9nZ2VkIGluIGFzIHVzZXIgJ3Jvb3QnLgorU29sdXRpb246IExvZ291dCBhbmQgbG9naW4gYXMgJ3Jvb3QnIG9yIGNoYW5nZSB0byAncm9vdCcgdmlhICdzdScuCisKKworUHJvYmxlbTogIFVwb24gdXNlIG9mIHRoZSBjb21tYW5kICdwaW5nIDxhZGRyZXNzPicgdGhlIG1lc3NhZ2UKKyAgICAgICAgICAicGluZzogc2VuZHRvOiBOZXR3b3JrIGlzIHVucmVhY2hhYmxlIiBpcyBkaXNwbGF5ZWQuCitSZWFzb246ICAgWW91ciByb3V0ZSBpcyBub3Qgc2V0IGNvcnJlY3RseS4KK1NvbHV0aW9uOiBJZiB5b3UgYXJlIHVzaW5nIFJlZEhhdCwgeW91IHByb2JhYmx5IGZvcmdvdCB0byBzZXQgdXAgdGhlIAorICAgICAgICAgIHJvdXRlIGluIHRoZSAnbmV0d29yayBjb25maWd1cmF0aW9uJy4KKyAgICAgICAgICBDaGVjayB0aGUgZXhpc3Rpbmcgcm91dGVzIHdpdGggdGhlICdyb3V0ZScgY29tbWFuZCBhbmQgY2hlY2sgCisgICAgICAgICAgaWYgYW4gZW50cnkgZm9yICdldGgwJyBleGlzdHMsIGFuZCBpZiBzbywgaWYgaXQgaXMgc2V0IGNvcnJlY3RseS4KKworCitQcm9ibGVtOiAgVGhlIGRyaXZlciBjYW4gYmUgc3RhcnRlZCwgdGhlIGFkYXB0ZXIgaXMgY29ubmVjdGVkIHRvIHRoZSAKKyAgICAgICAgICBuZXR3b3JrLCBidXQgeW91IGNhbm5vdCByZWNlaXZlIG9yIHRyYW5zbWl0IGFueSBwYWNrZXRzOyAKKyAgICAgICAgICBlLmcuICdwaW5nJyBkb2VzIG5vdCB3b3JrLgorUmVhc29uOiAgIFRoZXJlIGlzIGFuIGluY29ycmVjdCByb3V0ZSBpbiB5b3VyIHJvdXRpbmcgdGFibGUuCitTb2x1dGlvbjogQ2hlY2sgdGhlIHJvdXRpbmcgdGFibGUgd2l0aCB0aGUgY29tbWFuZCAncm91dGUnIGFuZCByZWFkIHRoZSAKKyAgICAgICAgICBtYW51YWwgaGVscCBwYWdlcyBkZWFsaW5nIHdpdGggcm91dGVzIChlbnRlciAnbWFuIHJvdXRlJykuCisKK05PVEU6IEFsdGhvdWdoIHRoZSAyLjIueCBrZXJuZWwgdmVyc2lvbnMgZ2VuZXJhdGUgdGhlIHJvdXRpbmcgZW50cnkgCisgICAgICBhdXRvbWF0aWNhbGx5LCBwcm9ibGVtcyBvZiB0aGlzIGtpbmQgbWF5IG9jY3VyIGhlcmUgYXMgd2VsbC4gV2UndmUgCisgICAgICBjb21lIGFjcm9zcyBhIHNpdHVhdGlvbiBpbiB3aGljaCB0aGUgZHJpdmVyIHN0YXJ0ZWQgY29ycmVjdGx5IGF0IAorICAgICAgc3lzdGVtIHN0YXJ0LCBidXQgYWZ0ZXIgdGhlIGRyaXZlciBoYXMgYmVlbiByZW1vdmVkIGFuZCByZWxvYWRlZCwKKyAgICAgIHRoZSByb3V0ZSBvZiB0aGUgYWRhcHRlcidzIG5ldHdvcmsgcG9pbnRlZCB0byB0aGUgJ2R1bW15MCdkZXZpY2UgCisgICAgICBhbmQgaGFkIHRvIGJlIGNvcnJlY3RlZCBtYW51YWxseS4KKworCitQcm9ibGVtOiAgWW91ciBjb21wdXRlciBzaG91bGQgYWN0IGFzIGEgcm91dGVyIGJldHdlZW4gbXVsdGlwbGUgCisgICAgICAgICAgSVAgc3VibmV0d29ya3MgKHVzaW5nIG11bHRpcGxlIGFkYXB0ZXJzKSwgYnV0IGNvbXB1dGVycyBpbiAKKyAgICAgICAgICBvdGhlciBzdWJuZXR3b3JrcyBjYW5ub3QgYmUgcmVhY2hlZC4KK1JlYXNvbjogICBFaXRoZXIgdGhlIHJvdXRlcidzIGtlcm5lbCBpcyBub3QgY29uZmlndXJlZCBmb3IgSVAgZm9yd2FyZGluZyAKKyAgICAgICAgICBvciB0aGUgcm91dGluZyB0YWJsZSBhbmQgZ2F0ZXdheSBjb25maWd1cmF0aW9uIG9mIGF0IGxlYXN0IG9uZSAKKyAgICAgICAgICBjb21wdXRlciBpcyBub3Qgd29ya2luZy4KKworUHJvYmxlbTogIFVwb24gZHJpdmVyIHN0YXJ0LCB0aGUgZm9sbG93aW5nIGVycm9yIG1lc3NhZ2UgaXMgZGlzcGxheWVkOgorICAgICAgICAgICJldGgwOiAtLSBFUlJPUiAtLQorICAgICAgICAgIENsYXNzOiBpbnRlcm5hbCBTb2Z0d2FyZSBlcnJvcgorICAgICAgICAgIE5yOiAgICAweGNjCisgICAgICAgICAgTXNnOiAgIFNrR2VJbml0UG9ydCgpIGNhbm5vdCBpbml0IHJ1bm5pbmcgcG9ydHMiCitSZWFzb246ICAgWW91IGFyZSB1c2luZyBhIGRyaXZlciBjb21waWxlZCBmb3Igc2luZ2xlIHByb2Nlc3NvciBtYWNoaW5lcyAKKyAgICAgICAgICBvbiBhIG11bHRpcHJvY2Vzc29yIG1hY2hpbmUgd2l0aCBTTVAgKFN5bW1ldHJpYyBNdWx0aVByb2Nlc3NvcikgCisgICAgICAgICAga2VybmVsLgorU29sdXRpb246IENvbmZpZ3VyZSB5b3VyIGtlcm5lbCBhcHByb3ByaWF0ZWx5IGFuZCByZWNvbXBpbGUgdGhlIGtlcm5lbCBvcgorICAgICAgICAgIHRoZSBtb2R1bGVzLgorCisKKworSWYgeW91ciBwcm9ibGVtIGlzIG5vdCBsaXN0ZWQgaGVyZSwgcGxlYXNlIGNvbnRhY3QgU3lzS29ubmVjdCdzIHRlY2huaWNhbAorc3VwcG9ydCBmb3IgaGVscCAobGludXhAc3lza29ubmVjdC5kZSkuCitXaGVuIGNvbnRhY3Rpbmcgb3VyIHRlY2huaWNhbCBzdXBwb3J0LCBwbGVhc2UgZW5zdXJlIHRoYXQgdGhlIGZvbGxvd2luZyAKK2luZm9ybWF0aW9uIGlzIGF2YWlsYWJsZToKKy0gU3lzdGVtIE1hbnVmYWN0dXJlciBhbmQgSFcgSW5mb3JtYXRpb25zIChDUFUsIE1lbW9yeS4uLiApCistIFBDSS1Cb2FyZHMgaW4geW91ciBzeXN0ZW0KKy0gRGlzdHJpYnV0aW9uCistIEtlcm5lbCB2ZXJzaW9uCistIERyaXZlciB2ZXJzaW9uCisqKioKKworCisKKyoqKkVuZCBvZiBSZWFkbWUgRmlsZSoqKgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NrZnAudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NrZnAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNDE5ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2tmcC50eHQKQEAgLTAsMCArMSwyMjAgQEAKKyhDKUNvcHlyaWdodCAxOTk4LTIwMDAgU3lzS29ubmVjdCwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitza2ZwLnR4dCBjcmVhdGVkIDExLU1heS0yMDAwCisKK1JlYWRtZSBGaWxlIGZvciBza2ZwLm8gdjIuMDYKKworCitUaGlzIGZpbGUgY29udGFpbnMKKygxKSBPVkVSVklFVworKDIpIFNVUFBPUlRFRCBBREFQVEVSUworKDMpIEdFTkVSQUwgSU5GT1JNQVRJT04KKyg0KSBJTlNUQUxMQVRJT04KKyg1KSBJTkNMVVNJT04gT0YgVEhFIEFEQVBURVIgSU4gU1lTVEVNIFNUQVJUCisoNikgVFJPVUJMRVNIT09USU5HCisoNykgRlVOQ1RJT04gT0YgVEhFIEFEQVBURVIgTEVEUworKDgpIEhJU1RPUlkKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworCisoMSkgT1ZFUlZJRVcKKz09PT09PT09PT09PQorCitUaGlzIFJFQURNRSBleHBsYWlucyBob3cgdG8gdXNlIHRoZSBkcml2ZXIgJ3NrZnAnIGZvciBMaW51eCB3aXRoIHlvdXIKK25ldHdvcmsgYWRhcHRlci4KKworQ2hhcHRlciAyOiBDb250YWlucyBhIGxpc3Qgb2YgYWxsIG5ldHdvcmsgYWRhcHRlcnMgdGhhdCBhcmUgc3VwcG9ydGVkIGJ5CisJICAgdGhpcyBkcml2ZXIuCisKK0NoYXB0ZXIgMzogR2l2ZXMgc29tZSBnZW5lcmFsIGluZm9ybWF0aW9uLgorCitDaGFwdGVyIDQ6IERlc2NyaWJlcyBjb21tb24gcHJvYmxlbXMgYW5kIHNvbHV0aW9ucy4KKworQ2hhcHRlciA1OiBTaG93cyB0aGUgY2hhbmdlZCBmdW5jdGlvbmFsaXR5IG9mIHRoZSBhZGFwdGVyIExFRHMuCisKK0NoYXB0ZXIgNjogSGlzdG9yeSBvZiBkZXZlbG9wbWVudC4KKworKioqCisKKworKDIpIFNVUFBPUlRFRCBBREFQVEVSUworPT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgbmV0d29yayBkcml2ZXIgJ3NrZnAnIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgbmV0d29yayBhZGFwdGVyczoKK1N5c0tvbm5lY3QgYWRhcHRlcnM6CisgIC0gU0stNTUyMSAoU0stTkVUIEZEREktVVApCisgIC0gU0stNTUyMiAoU0stTkVUIEZEREktVVAgREFTKQorICAtIFNLLTU1NDEgKFNLLU5FVCBGRERJLUZQKQorICAtIFNLLTU1NDMgKFNLLU5FVCBGRERJLUxQKQorICAtIFNLLTU1NDQgKFNLLU5FVCBGRERJLUxQIERBUykKKyAgLSBTSy01ODIxIChTSy1ORVQgRkRESS1VUDY0KQorICAtIFNLLTU4MjIgKFNLLU5FVCBGRERJLVVQNjQgREFTKQorICAtIFNLLTU4NDEgKFNLLU5FVCBGRERJLUZQNjQpCisgIC0gU0stNTg0MyAoU0stTkVUIEZEREktTFA2NCkKKyAgLSBTSy01ODQ0IChTSy1ORVQgRkRESS1MUDY0IERBUykKK0NvbXBhcSBhZGFwdGVycyAobm90IHRlc3RlZCk6CisgIC0gTmV0ZWxsaWdlbnQgMTAwIEZEREkgREFTIEZpYnJlIFNDCisgIC0gTmV0ZWxsaWdlbnQgMTAwIEZEREkgU0FTIEZpYnJlIFNDCisgIC0gTmV0ZWxsaWdlbnQgMTAwIEZEREkgREFTIFVUUAorICAtIE5ldGVsbGlnZW50IDEwMCBGRERJIFNBUyBVVFAKKyAgLSBOZXRlbGxpZ2VudCAxMDAgRkRESSBTQVMgRmlicmUgTUlDCisqKioKKworCisoMykgR0VORVJBTCBJTkZPUk1BVElPTgorPT09PT09PT09PT09PT09PT09PT09PT0KKworRnJvbSB2Mi4wMSBvbiwgdGhlIGRyaXZlciBpcyBpbnRlZ3JhdGVkIGluIHRoZSBsaW51eCBrZXJuZWwgc291cmNlcy4KK1RoZXJlZm9yLCB0aGUgaW5zdGFsbGF0aW9uIGlzIHRoZSBzYW1lIGFzIGZvciBhbnkgb3RoZXIgYWRhcHRlcgorc3VwcG9ydGVkIGJ5IHRoZSBrZXJuZWwuCitSZWZlciB0byB0aGUgbWFudWFsIG9mIHlvdXIgZGlzdHJpYnV0aW9uIGFib3V0IHRoZSBpbnN0YWxsYXRpb24KK29mIG5ldHdvcmsgYWRhcHRlcnMuCitNYWtlcyBteSBsaWZlIG11Y2ggZWFzaWVyIDotKQorKioqCisKKworKDQpIFRST1VCTEVTSE9PVElORworPT09PT09PT09PT09PT09PT09PQorCitJZiB5b3UgcnVuIGludG8gcHJvYmxlbXMgZHVyaW5nIGluc3RhbGxhdGlvbiwgY2hlY2sgdGhvc2UgaXRlbXM6CisKK1Byb2JsZW06ICBUaGUgRkRESSBhZGFwdGVyIGNhbiBub3QgYmUgZm91bmQgYnkgdGhlIGRyaXZlci4KK1JlYXNvbjogICBMb29rIGluIC9wcm9jL3BjaSBmb3IgdGhlIGZvbGxvd2luZyBlbnRyeToKKyAgICAgICAgICAgICAnRkRESSBuZXR3b3JrIGNvbnRyb2xsZXI6IFN5c0tvbm5lY3QgU0stRkRESS1QQ0kgLi4uJworCSAgSWYgdGhpcyBlbnRyeSBleGlzdHMsIHRoZW4gdGhlIEZEREkgYWRhcHRlciBoYXMgYmVlbgorCSAgZm91bmQgYnkgdGhlIHN5c3RlbSBhbmQgc2hvdWxkIGJlIGFibGUgdG8gYmUgdXNlZC4KKwkgIElmIHRoaXMgZW50cnkgZG9lcyBub3QgZXhpc3Qgb3IgaWYgdGhlIGZpbGUgJy9wcm9jL3BjaScKKwkgIGlzIG5vdCB0aGVyZSwgdGhlbiB5b3UgbWF5IGhhdmUgYSBoYXJkd2FyZSBwcm9ibGVtIG9yIFBDSQorCSAgc3VwcG9ydCBtYXkgbm90IGJlIGVuYWJsZWQgaW4geW91ciBrZXJuZWwuCisJICBUaGUgYWRhcHRlciBjYW4gYmUgY2hlY2tlZCB1c2luZyB0aGUgZGlhZ25vc3RpYyBwcm9ncmFtCisJICB3aGljaCBpcyBhdmFpbGFibGUgZnJvbSB0aGUgU3lzS29ubmVjdCB3ZWIgc2l0ZToKKwkgICAgICB3d3cuc3lza29ubmVjdC5kZQorCSAgU29tZSBDT01QQVEgbWFjaGluZXMgaGF2ZSBhIHByb2JsZW0gd2l0aCBQQ0kgdW5kZXIKKwkgIExpbnV4LiBUaGlzIGlzIGRlc2NyaWJlZCBpbiB0aGUgJ1BDSSBob3d0bycgZG9jdW1lbnQKKwkgIChpbmNsdWRlZCBpbiBzb21lIGRpc3RyaWJ1dGlvbnMgb3IgYXZhaWxhYmxlIGZyb20gdGhlCisJICB3d3csIGUuZy4gYXQgJ3d3dy5saW51eC5vcmcnKSBhbmQgbm8gd29ya2Fyb3VuZCBpcyBhdmFpbGFibGUuCisKK1Byb2JsZW06ICBZb3Ugd2FudCB0byB1c2UgeW91ciBjb21wdXRlciBhcyBhIHJvdXRlciBiZXR3ZWVuCisgICAgICAgICAgbXVsdGlwbGUgSVAgc3VibmV0d29ya3MgKHVzaW5nIG11bHRpcGxlIGFkYXB0ZXJzKSwgYnV0CisJICB5b3UgY2FuIG5vdCByZWFjaCBjb21wdXRlcnMgaW4gb3RoZXIgc3VibmV0d29ya3MuCitSZWFzb246ICAgRWl0aGVyIHRoZSByb3V0ZXIncyBrZXJuZWwgaXMgbm90IGNvbmZpZ3VyZWQgZm9yIElQCisJICBmb3J3YXJkaW5nIG9yIHRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIHRoZSByb3V0aW5nIHRhYmxlCisJICBhbmQgZ2F0ZXdheSBjb25maWd1cmF0aW9uIGluIGF0IGxlYXN0IG9uZSBvZiB0aGUKKwkgIGNvbXB1dGVycy4KKworSWYgeW91ciBwcm9ibGVtIGlzIG5vdCBsaXN0ZWQgaGVyZSwgcGxlYXNlIGNvbnRhY3Qgb3VyCit0ZWNobmljYWwgc3VwcG9ydCBmb3IgaGVscC4gCitZb3UgY2FuIHNlbmQgZW1haWwgdG86CisgIGxpbnV4QHN5c2tvbm5lY3QuZGUKK1doZW4gY29udGFjdGluZyBvdXIgdGVjaG5pY2FsIHN1cHBvcnQsCitwbGVhc2UgZW5zdXJlIHRoYXQgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGU6CistIFN5c3RlbSBNYW51ZmFjdHVyZXIgYW5kIE1vZGVsCistIEJvYXJkcyBpbiB5b3VyIHN5c3RlbQorLSBEaXN0cmlidXRpb24KKy0gS2VybmVsIHZlcnNpb24KKworKioqCisKKworKDUpIEZVTkNUSU9OIE9GIFRIRSBBREFQVEVSIExFRFMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgICAgVGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIExFRCdzIG9uIHRoZSBGRERJIG5ldHdvcmsgYWRhcHRlcnMgd2FzCisgICAgICAgIGNoYW5nZWQgaW4gU01UIHZlcnNpb24gdjIuODIuIFdpdGggdGhpcyBuZXcgU01UIHZlcnNpb24sIHRoZSB5ZWxsb3cKKyAgICAgICAgTEVEIHdvcmtzIGFzIGEgcmluZyBvcGVyYXRpb25hbCBpbmRpY2F0b3IuIEFuIGFjdGl2ZSB5ZWxsb3cgTEVECisgICAgICAgIGluZGljYXRlcyB0aGF0IHRoZSByaW5nIGlzIGRvd24uIFRoZSBncmVlbiBMRUQgb24gdGhlIGFkYXB0ZXIgbm93CisgICAgICAgIHdvcmtzIGFzIGEgbGluayBpbmRpY2F0b3Igd2hlcmUgYW4gYWN0aXZlIEdSRUVOIExFRCBpbmRpY2F0ZXMgdGhhdAorICAgICAgICB0aGUgcmVzcGVjdGl2ZSBwb3J0IGhhcyBhIHBoeXNpY2FsIGNvbm5lY3Rpb24uCisKKyAgICAgICAgV2l0aCB2ZXJzaW9ucyBvZiBTTVQgcHJpb3IgdG8gdjIuODIgYSByaW5nIHVwIHdhcyBpbmRpY2F0ZWQgaWYgdGhlCisgICAgICAgIHllbGxvdyBMRUQgd2FzIG9mZiB3aGlsZSB0aGUgZ3JlZW4gTEVEKHMpIHNob3dlZCB0aGUgY29ubmVjdGlvbgorICAgICAgICBzdGF0dXMgb2YgdGhlIGFkYXB0ZXIuIER1cmluZyBhIHJpbmcgZG93biB0aGUgZ3JlZW4gTEVEIHdhcyBvZmYgYW5kCisgICAgICAgIHRoZSB5ZWxsb3cgTEVEIHdhcyBvbi4KKworICAgICAgICBBbGwgaW1wbGVtZW50YXRpb25zIGluZGljYXRlIHRoYXQgYSBkcml2ZXIgaXMgbm90IGxvYWRlZCBpZgorICAgICAgICBhbGwgTEVEcyBhcmUgb2ZmLgorCisqKioKKworCisoNikgSElTVE9SWQorPT09PT09PT09PT0KKwordjIuMDYgKDIwMDAwNTExKSAoSW4tS2VybmVsIHZlcnNpb24pCisgICAgTmV3IGZlYXR1cmVzOgorCS0gNjQgYml0IHN1cHBvcnQKKwktIG5ldyBwY2kgZG1hIGludGVyZmFjZQorCS0gaW4ga2VybmVsIDIuMy45OQorCit2Mi4wNSAoMjAwMDAyMTcpIChJbi1LZXJuZWwgdmVyc2lvbikKKyAgICBOZXcgZmVhdHVyZXM6CisJLSBDaGFuZ2VzIGZvciAyLjMuNDUga2VybmVsCisKK3YyLjA0ICgyMDAwMDIwNykgKFN0YW5kYWxvbmUgdmVyc2lvbikKKyAgICBOZXcgZmVhdHVyZXM6CisJLSBBZGRlZCByeC90eCBieXRlIGNvdW50ZXIKKwordjIuMDMgKDIwMDAwMTExKSAoU3RhbmRhbG9uZSB2ZXJzaW9uKQorICAgIFByb2JsZW1zIGZpeGVkOgorCS0gRml4ZWQgcHJpbnRrIHN0YXRlbWVudHMgZnJvbSB2Mi4wMgorCit2Mi4wMiAoOTkxMjE1KSAoU3RhbmRhbG9uZSB2ZXJzaW9uKQorICAgIFByb2JsZW1zIGZpeGVkOgorCS0gUmVtb3ZlZCB1bm5lY2Vzc2FyeSBvdXRwdXQKKwktIEZpeGVkIHBhdGggZm9yICJwcmludHZlci5zaCIgaW4gbWFrZWZpbGUKKwordjIuMDEgKDk5MTEyMikgKEluLUtlcm5lbCB2ZXJzaW9uKQorICAgIE5ldyBmZWF0dXJlczoKKwktIEludGVncmF0aW9uIGluIExpbnV4IGtlcm5lbCBzb3VyY2VzCisJLSBTdXBwb3J0IGZvciBtZW1vcnkgbWFwcGVkIEkvTy4KKwordjIuMDAgKDk5MTExMikKKyAgICBOZXcgZmVhdHVyZXM6CisJLSBGdWxsIHNvdXJjZSByZWxlYXNlZCB1bmRlciBHUEwKKwordjEuMDUgKDk5MTAyMykKKyAgICBQcm9ibGVtcyBmaXhlZDoKKwktIENvbXBpbGF0aW9uIHdpdGgga2VybmVsIHZlcnNpb24gMi4yLjEzIGZhaWxlZAorCit2MS4wNCAoOTkwNDI3KQorICAgIENoYW5nZXM6CisJLSBOZXcgU01UIG1vZHVsZSBpbmNsdWRlZCwgY2hhbmdpbmcgTEVEIGZ1bmN0aW9uYWxpdHkKKyAgICBQcm9ibGVtcyBmaXhlZDoKKwktIFN5bmNocm9uaXphdGlvbiBvbiBTTVAgbWFjaGluZXMgd2FzIGJ1Z2d5CisKK3YxLjAzICg5OTAzMjUpCisgICAgUHJvYmxlbXMgZml4ZWQ6CisJLSBJbnRlcnJ1cHQgcm91dGluZyBvbiBTTVAgbWFjaGluZXMgY291bGQgYmUgaW5jb3JyZWN0CisKK3YxLjAyICg5OTAzMTApCisgICAgTmV3IGZlYXR1cmVzOgorCS0gU3VwcG9ydCBmb3Iga2VybmVsIHZlcnNpb25zIDIuMi54IGFkZGVkCisJLSBLZXJuZWwgcGF0Y2ggaW5zdGVhZCBvZiBwcml2YXRlIGR1cGxpY2F0ZSBvZiBrZXJuZWwgZnVuY3Rpb25zCisKK3YxLjAxICg5ODA4MTIpCisgICAgUHJvYmxlbXMgZml4ZWQ6CisJQ29ubmVjdGlvbiBoYW5ndXAgd2l0aCB0ZWxuZXQKKwlTbG93IHRlbG5ldCBjb25uZWN0aW9uCisKK3YxLjAwIGJldGEgMDEgKDk4MDUwNykKKyAgICBOZXcgZmVhdHVyZXM6CisJTm9uZS4KKyAgICBQcm9ibGVtcyBmaXhlZDoKKwlOb25lLgorICAgIEtub3duIGxpbWl0YXRpb25zOgorICAgICAgICAtIHRhciBhcmNoaXZlIGluc3RlYWQgb2Ygc3RhbmRhcmQgcGFja2FnZSBmb3JtYXQgKHJwbSkuCisJLSBGRERJIHN0YXRpc3RpYyBpcyBlbXB0eS4KKwktIG5vdCB0ZXN0ZWQgd2l0aCAyLjEueHgga2VybmVscworCS0gaW50ZWdyYXRpb24gaW4ga2VybmVsIG5vdCB0ZXN0ZWQKKwktIG5vdCB0ZXN0ZWQgc2ltdWx0YW5lb3VzbHkgd2l0aCBGRERJIGFkYXB0ZXJzIGZyb20gb3RoZXIgdmVuZG9ycy4KKwktIG9ubHkgWDg2IHByb2Nlc3NvcnMgc3VwcG9ydGVkLgorCS0gU0JBIChTeW5jaHJvbm91cyBCYW5kd2lkdGggQWxsb2NhdG9yKSBwYXJhbWV0ZXJzIGNhbgorCSAgbm90IGJlIGNvbmZpZ3VyZWQuCisJLSBkb2VzIG5vdCB3b3JrIG9uIHNvbWUgQ09NUEFRIG1hY2hpbmVzLiBTZWUgdGhlIFBDSSBob3d0bworCSAgZG9jdW1lbnQgZm9yIGRldGFpbHMgYWJvdXQgdGhpcyBwcm9ibGVtLgorCS0gZGF0YSBjb3JydXB0aW9uIHdpdGgga2VybmVsIHZlcnNpb25zIGJlbG93IDIuMC4zMy4KKworKioqIEVuZCBvZiBpbmZvcm1hdGlvbiBmaWxlICoqKgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NsaWNlY29tLmh1biBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zbGljZWNvbS5odW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFjZjE5MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zbGljZWNvbS5odW4KQEAgLTAsMCArMSwzNzEgQEAKKworU2xpY2VDT00gYWRhcHRlciBmZWxoYXN6bmFsb2kgZG9rdW1lbnRhY2lvamEgLSAwLjUxIHZlcnppb2hvegorCitCYXJ082sgSXN0duFuIDxiYXJ0b2tpQGl0Yy5odT4KK1V0b2xzbyBtb2Rvc2l0YXM6IFdlZCBBdWcgMjkgMTc6MjY6NTggQ0VTVCAyMDAxCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hhc3puYWxhdGE6CisKK0ZvcmRpdGFzOgorCitDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKwlbKl0gUHJvbXB0IGZvciBkZXZlbG9wbWVudCBhbmQvb3IgaW5jb21wbGV0ZSBjb2RlL2RyaXZlcnMKKworTmV0d29yayBkZXZpY2Ugc3VwcG9ydAorCVdhbiBpbnRlcmZhY2VzCisJCTxNPiBNdWx0aUdhdGUgKENPTVgpIHN5bmNocm9ub3VzCisJCQk8TT4gU3VwcG9ydCBmb3IgTVVOSUNIIGJhc2VkIGJvYXJkczogU2xpY2VDT00sIFBDSUNPTSAoTkVXKQorCQkJPE0+IFN1cHBvcnQgZm9yIEhETEMgYW5kIHN5bmNQUFAuLi4KKworCitBIG1vZHVsb2sgYmV0b2x0ZXNlOgorCittb2Rwcm9iZSBjb214CisKK21vZHByb2JlIGNvbXgtcHJvdG8tcHBwCQkjIGEgQ2lzY28tSERMQyBlcyBhIFN5bmNQUFAgcHJvdG9rb2xsdCBpcworCQkJCSMgZXogYSBtb2R1bCBhZGphCisKK21vZHByb2JlIGNvbXgtaHctbXVuaWNoCQkjIGEgbW9kdWwgYmV0b2x0b2Rlc2tvciBhem9ubmFsIGplbGVudCBhCisJCQkJIyBzeXNsb2diYSBhIGRldGVrdGFsdCBrYXJ0eWFrcm9sCisKKworS29uZmlndXJhbGFzOgorCisjIEV6ZW4gYXogaW50ZXJmZXN6ZW4gQ2lzY28tSERMQyB2b25hbGkgcHJvdG9rb2xsIGZvZyBmdXRuaQorIyBBeiBpbnRlcmZlc3poZXogcmVuZGVsdCBpZG9zemVsZXRlazogMSwyICgxMjgga2JpdC9zZWMtZXMgdm9uYWwpCisjIChhIEcuNzAzIGtlcmV0YmVuIGF6IGVsc28gYWRhdG90IHZpdm8gaWRvc3plbGV0IGF6IDEtZXMpCisjCitta2RpciAvcHJvYy9jb214L2NvbXgwLjEvCitlY2hvIHNsaWNlY29tCT4vcHJvYy9jb214L2NvbXgwLjEvYm9hcmR0eXBlCitlY2hvIGhkbGMJPi9wcm9jL2NvbXgvY29teDAuMS9wcm90b2NvbAorZWNobyAxIDIJPi9wcm9jL2NvbXgvY29teDAuMS90aW1lc2xvdHMKKworCisjIEV6ZW4gYXogaW50ZXJmZXN6ZW4gU3luY1BQUCB2b25hbGkgcHJvdG9rb2xsIGZvZyBmdXRuaQorIyBBeiBpbnRlcmZlc3poZXogcmVuZGVsdCBpZG9zemVsZXQ6IDMgKDY0IGtiaXQvc2VjLWVzIHZvbmFsKQorIworbWtkaXIgL3Byb2MvY29teC9jb214MC4yLworZWNobyBzbGljZWNvbQk+L3Byb2MvY29teC9jb214MC4yL2JvYXJkdHlwZQorZWNobyBwcHAJPi9wcm9jL2NvbXgvY29teDAuMi9wcm90b2NvbAorZWNobyAzCQk+L3Byb2MvY29teC9jb214MC4yL3RpbWVzbG90cworCisuLi4KKworaWZjb25maWcgY29teDAuMSB1cAoraWZjb25maWcgY29teDAuMiB1cAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIENPTVggZHJpdmVyZWsgZGVmYXVsdCAyMCBjc29tYWdueWkgdHJhbnNtaXQgcXVldWUtdCByZW5kZWxuZWsgYSBoYWxvemF0aQoraW50ZXJmZXN6ZWtoZXouIFdBTiBoYWxvemF0b2tiYW4gZW5uZWwgaG9zc3phYmJhdCBpcyBzem9rYXMgaGFzem5hbG5pCisoMjAgZXMgMTAwIGtvem90dCksIGhvZ3kgYSB2b25hbCBraWhhc3puYWx0c2FnYSBuYWd5IHRlcmhlbGVzIGVzZXRlbiBqb2JiCitsZWd5ZW4gKGJhciBlenplbCBtZWdubyBhIHZhcmhhdG8ga2VzbGVsdGV0ZXMgYSBjc29tYWdvayBzb3JiYW4gYWxsYXNhIG1pYXR0KToKKworIyBpZmNvbmZpZyBjb214MCB0eHF1ZXVlbGVuIDUwCisKK0V6dCBhIGJlYWxsaXRhc2kgbGVoZXRvc2VnZXQgY3NhayBheiB1amFiYiBkaXN6dHJpYnVjaW9rIGlmY29uZmlnIHBhcmFuY3NhCit0YW1vZ2F0amEgKGFtaWsgbWFyIGEgMi4yIGtlcm5lbGVraGV6IGtlc3p1bHRlaywgbWludCBhIFJlZEhhdCA2LjEgdmFneSBhCitEZWJpYW4gMi4yKS4KKworQSAyLjEtZXMgRGViaWFuIGRpc3p0cmlidWNpb2hveiBhIGh0dHA6Ly93d3cuZGViaWFuLm9yZy9+cmN3LzIuMi9uZXRiYXNlLworY2ltcm9sIHRvbHRoZXRvIGxlIHVqYWJiIG5ldGJhc2UgY3NvbWFnLCBhbWkgbWFyIGlseWV0IHRhbW9nYXRvIGlmY29uZmlnCitwYXJhbmNzb3QgdGFydGFsbWF6LiBCb3ZlYmJlbiBhIDIuMiBrZXJuZWwgaGFzem5hbGF0YXJvbCBEZWJpYW4gMi4xIGFsYXR0OgoraHR0cDovL3d3dy5kZWJpYW4ub3JnL3JlbGVhc2VzL3N0YWJsZS9ydW5uaW5nLWtlcm5lbC0yLjIKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSBrYXJ0eWEgTEVELWplaW5layBqZWxlbnRlc2U6CisKK3Bpcm9zCS0gZWcsIGhhIFJlbW90ZSBBbGFybS1vdCBrdWxkIGEgdHVsb2xkYWwKK3pvbGQJLSBlZywgaGEgYSB2ZXR0IGplbGJlbiBtZWd0YWxhbGphIGEga2VyZXRzemlua3JvbnQKKworUmVzemxldGVzZWJiZW46CisKK3Bpcm9zOgl6b2xkOglqZWxlbnRlczoKKworLQktCW5pbmNzIGtlcmV0c3ppbmtyb24gKG5pbmNzIGplbCwgdmFneSByb3NzeiBhIGplbCkKKy0JZWcJIm1pbmRlbiByZW5kYmVuIgorZWcJZWcJYSB2ZXRlbCBPSywgZGUgYSB0dWxvbGRhbCBSZW1vdGUgQWxhcm0tb3Qga3VsZAorZWcJLQlleiBuaW5jcyBlcnRlbG1lenZlLCBlZ3llbG9yZSBmdW5rY2lvIG5lbGt1bAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZXN6bGV0ZXNlYmIgbGVpcmFzIGEgaGFyZHZlciBiZWFsbGl0YXNpIGxlaGV0b3NlZ2Vpcm9sOgorCitBeiBhbHRhbGFub3MsLSBlcyBhIHByb3Rva29sbC1yZXRlZ2VrIGJlYWxsaXRhc2kgbGVoZXRvc2VnZWlyb2wgYSAnY29teC50eHQnCitmYWpsYmFuIGxlaXJ0YWsgU2xpY2VDT00ga2FydHlhbmFsIGlzIGVydmVueWVzZWssIGl0dCBjc2FrIGEgaGFyZHZlci1zcGVjaWZpa3VzCitiZWFsbGl0YXNpIGxlaGV0b3NlZ2VrIHZhbm5hayBvc3N6ZWZvZ2xhbHZhOgorCitLb25maWd1cmFsYXNpIGludGVyZmVzeiBhIC9wcm9jL2NvbXgvIGFsYXR0OgorCitNaW5kZW4gdGltZXNsb3QtY3NvcG9ydG5hayBrdWxvbiBjb214KiBpbnRlcmZlc3p0IGtlbGwgbGV0cmVob3puaSBta2Rpci1yZWw6Citjb214MCwgY29teDEsIC4uIHN0Yi4gSXR0IGJlYWxsaXRoYXRvLCBob2d5IGF6IGFkb3R0IGludGVyZmVzeiBoYW55YWRpayBrYXJ0eWEKK21lbHlpayB0aW1lc2xvdGphKGkpYm9sIGFsbGpvbiBvc3N6ZS4gQSBDaXNjby1mZWxlIHNlcmlhbDM6MSBlbG5ldmV6ZXNlaworKHNlcmlhbDM6MSA9IGEgMy4ga2FydHlhYmFuIGF6IDEtZXMgaWRvc3plbGV0LWNzb3BvcnQpIExpbnV4b24gYWxpYXNpbmctb3QKK2plbGVudGVuZW5laywgZXplcnQgbWkgbmVtIHR1ZHVuayBpbHllbiBlbG5ldmV6ZXN0IGhhc3puYWxuaS4KKworVG9iYiBrYXJ0eWEgZXNldGVuIGEgY29teDAuMSwgY29teDAuMiwgLi4uIHZhZ3kgc2xpY2UwLjEsIHNsaWNlMC4yIG5ldmVrCitoYXN6bmFsaGF0b2FrLgorCitUb2JiIFNsaWNlQ09NIGthcnR5YSBpcyBsZWhldCBlZ3kgZ2VwYmVuLCBkZSBzYWphdCBpbnRlcnJ1cHQga2VsbCBtaW5kZWd5aWtuZWssCituZW0gdHVkIG1lZyBtZWdvc3p0b3R0IGludGVycnVwdG90IGtlemVsbmkuCisKK0F6IGVnZXN6IGthcnR5YXQgZXJpbnRvIGJlYWxsaXRhc29rOgorCitBeiBpb3BvcnQgZXMgaXJxIGJlYWxsaXRhcyBuaW5jczogYW1pdCBhIFBDSSBCSU9TIGtpb3N6dCBhIHJlbmRzemVybmVrLAorYXp0IGhhc3puYWxqYSBhIGRyaXZlci4KKworCitjb214MC9ib2FyZG51bQktIGhhbnlhZGlrIFNsaWNlQ09NIGthcnR5YSBhIGdlcGJlbiAoYSAndGVybWVzemV0ZXMnIFBDSQorCQlzb3JyZW5kYmVuIGVydHZlOiBhaG9neWFuIGEgL3Byb2MvcGNpLWJhbiB2YWd5IGF6ICdsc3BjaScKKwkJa2ltZW5ldGViZW4gbWVnamVsZW5paywgYWx0YWxhYmFuIGF6IGFsYXBsYXBpIFBDSSBtZWdoYWp0bworCQlhcmFta29yb2tob3oga296ZWxlYmIgZXNvIGthcnR5YWsgYSBraXNlYmIgc29yc3phbXVhaykKKworCQlEZWZhdWx0OiAwICgwLXRvbCBrZXpkb2RpayBhIHN6YW1vbGFzKQorCisKK0JhciBhIGtvdmV0a2V6b2tldCBjc2FrIGVneS1lZ3kgaW50ZXJmZXN6ZW4gYWxsaXRqdWsgYXQsIG1lZ2lzIGF6IGVnZXN6IGthcnR5YQorbXVrb2Rlc2V0IGVneXN6ZXJyZSBhbGxpdGphay4gQSBtZWdrb3RlcyBob2d5IGNzYWsgVVAtYmFuIGxldm8gaW50ZXJmZXN6ZW4KK2hhc3puYWxoYXRvYWssIGF6ZXJ0IHZhbiwgbWVydCBrdWxvbmJlbiBuZW0gdmFydCBlcmVkbWVueWVrcmUgdmV6ZXRuZSBlZ3kgaWx5ZW4KK3BhcmFuY2Nzb3JvemF0OgorCisJZWNobyAwICAgICAgICA+Ym9hcmRudW0KKwllY2hvIGludGVybmFsID5jbG9ja19zb3VyY2UKKwllY2hvIDEgICAgICAgID5ib2FyZG51bQorCistIEV6IGEgMC1zIGJvYXJkIGNsb2NrX3NvdXJjZS1hdCBhbGxpdGFuYSBhdC4KKworRXplayBhIGJlYWxsaXRhc29rIG1lZ21hcmFkbmFrIGF6IG9zc3plcyBpbnRlcmZlc3ogdG9ybGVzZWtvciwgZGUgdG9ybG9kbmVrCithIGRyaXZlciBtb2R1bCBraS9iZXRvbHRlc2Vrb3IuCisKKworY29teDAvY2xvY2tfc291cmNlIC0gQSBUeCBvcmFqZWxmb3JyYXNhLCBhIENpc2NvLXZhbCBoYXNvbmxhdG9zcmEga2VzenVsdC4KKwlIYXN6bmFsYXRhOgorCisJcGFwYXlhOiMgZWNobyBsaW5lICAgICA+L3Byb2MvY29teC9jb214MC9jbG9ja19zb3VyY2UKKwlwYXBheWE6IyBlY2hvIGludGVybmFsID4vcHJvYy9jb214L2NvbXgwL2Nsb2NrX3NvdXJjZQorCisJbGluZSAgICAgLSBBIFR4IG9yYWplbGV0IGEgdmV0dCBhZGF0Zm9seWFtYm9sIGRla29kb2xqYSwgaWd5ZWtzemlrCisJCWlnYXpvZG5pIGhvenphLiBIYSBuZW0gbGF0IG9yYWplbGV0IGF6IGlucHV0b24sIGFra29yCisJCWF0YWxsIGEgc2FqYXQgb3JhamVsZ2VuZXJhdG9yYXJhLgorCWludGVybmFsIC0gQSBUeCBvcmFqZWxldCBhIHNhamF0IG9yYWplbGdlbmVyYXRvcmEgc3pvbGdhbHRhdGphLgorCisJRGVmYXVsdDogbGluZQorCisJTm9ybWFsIG9zc3plYWxsaXRhcyBlc2V0ZW4gYSB0YXZrb3psZXNpIHN6b2xnYWx0YXRvIGVzemtvemUKKwkocGwuIEhEU0wgbW9kZW0pIGFkamEgYXogb3JhamVsZXQsIGV6ZXJ0IGV6IGEgZGVmYXVsdC4KKworCitjb214MC9mcmFtaW5nCS0gQSBDUkM0IGtpL2JlIGthcGNzb2xhc2EKKworCUEgQ1JDNDogMTYgUENNIGtlcmV0ZXQgKEEgUENNIGtlcmV0IGF6LCBhbWliZSBhIDMyIGRhcmFiIDY0CisJa2lsb2JpdGVzIGNzYXRvcm5hIHZhbiBiZW11bHRpcGxleGFsdmEuIE5lbSBvc3N6ZXRldmVzenRlbmRvIGEgSERMQworCWtlcmV0dGVsLikgMng4IC1hcyBjc29wb3J0b2tyYSBvc3p0YW5haywgZXMgYXpva2hveiA0LTQgYml0ZXMgQ1JDLXQKKwlzemFtb2xuYWsuIEVsc29zb3JiYW4gYSB2b25hbCBtaW5vc2VnZW5layBhIG1vbml0b3JvemFzYXJhIHN6b2xnYWwuCisKKwlwYXBheWE6fiMgZWNobyBjcmM0CT4vcHJvYy9jb214L2NvbXgwL2ZyYW1pbmcKKwlwYXBheWE6fiMgZWNobyBuby1jcmM0CT4vcHJvYy9jb214L2NvbXgwL2ZyYW1pbmcKKworCURlZmF1bHQgYSAnY3JjNCcsIGEgTUFUQVYgdm9uYWxhayBhbHRhbGFiYW4gaWd5IGZ1dG5hay4gRGUgaGEgbmVtCisJZWd5Zm9ybWEgaXMgYSBiZWFsbGl0YXMgYSB2b25hbCBrZXQgdmVnZW4sIGF0dG9sIGEgZm9yZ2Fsb20gYWx0YWxhYmFuCisJYXQgdHVkIG1lbm5pLgorCisKK2NvbXgwL2xpbmVjb2RlCS0gQSB2b25hbGkga29kb2xhcyBiZWFsbGl0YXNhCisKKwlwYXBheWE6fiMgZWNobyBoZGIzCT4vcHJvYy9jb214L2NvbXgwL2xpbmVjb2RlCisJcGFwYXlhOn4jIGVjaG8gYW1pCT4vcHJvYy9jb214L2NvbXgwL2xpbmVjb2RlCisKKwlEZWZhdWx0IGEgJ2hkYjMnLCBhIE1BVEFWIHZvbmFsYWsgaWd5IGZ1dG5hay4KKwkKKwkoYXogQU1JIGtvZG9sYXMgaWdlbiByaXRrYSBFMS1lcyB2b25hbGFrbmFsKS4gSGEgZXogYSBiZWFsbGl0YXMgbmVtCisJZWd5ZXppayBhIHZvbmFsIGtldCB2ZWdlbiwgYWtrb3IgZWxvZm9yZHVsaGF0IGhvZ3kgYSBrZXJldHN6aW5rcm9uCisJb3NzemVqb24sIGRlIENSQzQtaGliYWsgZXMgYSB2b25hbGFrb24gYXR2aXR0IGFkYXRva2JhbiBpcyBoaWJhaworCWtlbGV0a2V6bmVrIChhbWl0IGEgSERMQy9TeW5jUFBQIHN6aW50ZW4gQ1JDLWhpYmF2YWwgamVsZXopCisKKworY29teDAvcmVnCS0gYSBrYXJ0eWEgYXJhbWtvcmVpbmVrLCBhIE1VTklDSCAocmVnKSBlcyBhIEZBTEMgKGxiaXJlZykKK2NvbXgwL2xiaXJlZwlyZWdpc3p0ZXJlaW5layBrb3p2ZXRsZW4gZWxlcmVzZS4gSGFzem5hbGF0YToKKworCQllY2hvID5yZWcgMHgwNCAweDAJLSBhIDQtZXMgcmVnaXN6dGVyYmUgMC10IGlyCisJCWVjaG8gPnJlZyAweDEwNAkJLSBwcmludGsoKS12YWwga2lpcmphIGEgNC1lcyByZWdpc3p0ZXIKKwkJCQkJdGFydGFsbWF0IGEgc3lzbG9nYmEuCisKKwkJV0FSTklORzogZXplayBjc2FrIGEgZmVqbGVzenRlc2hleiBrZXN6dWx0ZWssIHNvayBnYWxpYmF0CisJCWxlaGV0IHZlbHVrIG9rb3puaSEKKworCitjb214MC9sb29wYmFjayAtIEEga2FydHlhIEcuNzAzIGplbGVuZWsgYSB2aXNzemFodXJrb2xhc2FyYSBpcyB2YW4gbGVoZXRvc2VnOgorCisJcGFwYXlhOiMgZWNobyBub25lICAgPi9wcm9jL2NvbXgvY29teDAvbG9vcGJhY2sKKwlwYXBheWE6IyBlY2hvIGxvY2FsICA+L3Byb2MvY29teC9jb214MC9sb29wYmFjaworCXBhcGF5YTojIGVjaG8gcmVtb3RlID4vcHJvYy9jb214L2NvbXgwL2xvb3BiYWNrCisKKwlub25lICAgLSBuaW5jcyB2aXNzemFodXJrb2xhcywgbm9ybWFsIG11a29kZXMKKwlsb2NhbCAgLSBhIGthcnR5YSBhIHNhamF0IG1hZ2EgYWx0YWwgYWRvdHQgamVsZXQga2FwamEgdmlzc3phCisJcmVtb3RlIC0gYSBrYXJ0eWEgYSBraXZ1bHJvbCB2ZXR0IGplbGV0IGFkamEga2lmZWxlCisKKwlEZWZhdWx0OiBub25lCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0F6IGludGVyZmVzemhleiAoQ2lzY28gdGVybWlub2xvZ2lhYmFuICdjaGFubmVsLWdyb3VwJykga2FwY3NvbG9kbyBiZWFsbGl0YXNvazoKKworY29teDAvdGltZXNsb3RzCS0gbWVseSB0aW1lc2xvdG9rIChpZG9zemVsZXRlaykgdGFydG96bmFrIGF6IGFkb3R0IGludGVyZmVzemhlei4KKworCXBhcGF5YTp+IyBjYXQgL3Byb2MvY29teC9jb214MC90aW1lc2xvdHMKKwkxIDMgNCA1IDYKKwlwYXBheWE6fiMKKworCUVneSB0aW1lc2xvdCBtZWdrZXJlc2VzZSAoaGFueWFzIGludGVyZmVzemJlIHRhcnRvemlrIG5hbHVuayk6CisKKwlwYXBheWE6fiMgZ3JlcCAnIDQnIC9wcm9jL2NvbXgvY29teCovdGltZXNsb3RzCisJL3Byb2MvY29teC9jb214MC90aW1lc2xvdHM6MSAzIDQgNSA2CisJcGFwYXlhOn4jCisKKwlCZWFsbGl0YXNhOgorCXBhcGF5YTp+IyBlY2hvICcxIDUgMiA2IDcgOCcgPi9wcm9jL2NvbXgvY29teDAvdGltZXNsb3RzCisJCisJQSB0aW1lc2xvdG9rIHNvcnJlbmRqZSBuZW0gc3phbWl0LCAnMSAzIDInIHVneWFuYXogbWludCBheiAnMSAyIDMnLgorCisJQmVhbGxpdGFzaG96IGF6IGFkb3R0IGludGVyZmVzem5layBET1dOLWJhbiBrZWxsIGxlbm5pZQorCShpZmNvbmZpZyBjb214MCBkb3duKSwgZGUgdWd5YW5hbm5hayBhIGthcnR5YW5hayBhIHRvYmJpIGludGVyZmVzemUKKwl1emVtZWxoZXQga296YmVuLgorCisJQmVhbGxpdGFza29yIGxlZWxsZW5vcnppLCBob2d5IGF6IHVqIHRpbWVzbG90b2sgbmVtIHV0a296bmVrLWUgZWd5CisJbWFzaWsgaW50ZXJmZXN6IHRpbWVzbG90amFpdmFsLiBIYSB1dGtvem5laywgYWtrb3IgbmVtIGFsbGl0amEgYXQuCisKKwlNaW5kaWcgMTAtZXMgc3phbXJlbmRzemVyYmVuIHRvcnRlbmlrIGEgdGltZXNsb3RvayBlcnRlbG1lemVzZSwgbmVob2d5CisJYSAwOCwgMDkgYWxha3UgZmVsaXJhc3Qgcm9zc3p1bCBlcnRlbG1lenplLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBeiBpbnRlcmZlc3playBlcyBhIGthcnR5YSBhbGxhcG90YW5hayBsZWtlcmRlemVzZToKKworLSBBICcgJy1zemVsIGtlemRvZG8gc29yb2sgYXogZXJlZGV0aSBraW1lbmV0ZXQsIGEgLy8tcmVsIGtlemRvZG8gc29yb2sgYQorbWFneWFyYXphdG90IGplbHppay4KKworIHBhcGF5YTp+JCBjYXQgL3Byb2MvY29teC9jb214MS9zdGF0dXMKKyBJbnRlcmZhY2UgYWRtaW5pc3RyYXRpdmUgc3RhdHVzIGlzIFVQLCBtb2RlbSBzdGF0dXMgaXMgVVAsIHByb3RvY29sIGlzIFVQCisgTW9kZW0gc3RhdHVzIGNoYW5nZXM6IDAsIFRyYW5zbWl0dGVyIHN0YXR1cyBpcyBJRExFLCB0YnVzeTogMAorIEludGVyZmFjZSBsb2FkIChpbnB1dCk6IDk3ODM3NiAvIDk0NzgwOCAvIDk1MTAyNCBiaXRzL3MgKDVzLzVtLzE1bSkKKyAgICAgICAgICAgICAgIChvdXRwdXQpOiA5NzgzNzYgLyA5NDc4NDggLyA5NTEwMjQgYml0cy9zICg1cy81bS8xNW0pCisgRGVidWcgZmxhZ3M6IG5vbmUKKyBSWCBlcnJvcnM6IGxlbjogMjIsIG92ZXJydW46IDEsIGNyYzogMCwgYWJvcnRzOiAwCisgICAgICAgICAgICBidWZmZXIgb3ZlcnJ1bjogMCwgcGJ1ZmZlciBvdmVycnVuOiAwCisgVFggZXJyb3JzOiB1bmRlcnJ1bjogMAorIExpbmUga2VlcGFsaXZlICh2YWx1ZTogMTApIHN0YXR1cyBVUCBbMF0KKworLy8gSXR0IGtlemRvZGlrIGEgaGFyZHZlci1zcGVjaWZpa3VzIHJlc3o6CisgQ29udHJvbGxlciBzdGF0dXM6CisgICAgICAgICBObyBhbGFybXMKKworLy8gQWxhcm06IGhpYmFqZWx6ZXM6CisvLworLy8gTm8gYWxhcm1zIC0gbWluZGVuIHJlbmRiZW4KKy8vCisvLyBMT1MgIC0gTG9zcyBPZiBTaWduYWwgLSBuZW0gZXJ6ZWtlbCBqZWxldCBhIGJlbWVuZXRlbi4KKy8vIEFJUyAgLSBBbGFybSBJbmRpY2F0aW9uIFNpZ25hbCAtIGNzYWsgZWd5bWFzIHV0YW5pIDEtZXNlayBqb25uZWsKKy8vCWEgYmVtZW5ldGVuLCBhIHR1bG9sZGFsIGlneSBpcyBqZWxlemhldGkgaG9neSBtZWdoaWJhc29kb3R0IHZhZ3kKKy8vCW5pbmNzIGluaWNpYWxpemFsdmEuCisvLyBBVVhQIC0gQXV4aWxpYXJ5IFBhdHRlcm4gSW5kaWNhdGlvbiAtIDAxMDEwMTAxLi4gc29yb3phdCBqb24gYSBiZW1lbmV0ZW4uCisvLyBMRkEgIC0gTG9zcyBvZiBGcmFtZSBBbGlnbm1lbnQgLSBuaW5jcyBrZXJldHN6aW5rcm9uCisvLyBSUkEgIC0gUmVjZWl2ZSBSZW1vdGUgQWxhcm0gLSBhIHR1bG9sZGFsIGVsLCBkZSBoaWJhdCBqZWxlei4KKy8vIExNRkEgLSBMb3NzIG9mIENSQzQgTXVsdGlmcmFtZSBBbGlnbm1lbnQgLSBuaW5jcyBDUkM0LW11bHRpa2VyZXQtc3ppbmtyb24KKy8vIE5NRiAgLSBObyBNdWx0aWZyYW1lIGFsaWdubWVudCBGb3VuZCBhZnRlciA0MDAgbXNlYyAtIGlseWVuIGFsYXJtIGEgbm8tY3JjNAorLy8JZXMgY3JjNCBrZXJldGV6ZXNlayBlc2V0ZW4gbmluY3MsIGxhc2QgbGVudGViYgorLy8KKy8vIEVneWViIGxlaGV0c2VnZXMgaGliYWplbHplc2VrOgorLy8KKy8vIFRyYW5zbWl0IExpbmUgU2hvcnQgLSBhIGthcnR5YSB1Z3kgZXJ6aSBob2d5IGF6IGFkYXNpIGtpbWVuZXRlIHJvdmlkcmUKKy8vCXZhbiB6YXJ2YSwgZXplcnQga2lrYXBjc29sdGEgYXogYWRhc3QuIChuZW0gZmVsdGV0bGVudWwgdmVzemkgZXN6cmUKKy8vCWEga3Vsc28gcm92aWR6YXJhdCkKKworLy8gQSB2ZXRlbGkgb2xkYWwgY3NvbWFnamFpbmFrIGxhbmNvbHQgbGlzdGFpLCBkZWJ1ZyBjZWxva3JhOgorCisgUnggcmluZzoKKyAgICAgICAgIHJhZnV0b3R0OiAwCisgICAgICAgICBsYXN0Y2hlY2s6IDUwODQ1NzMxLCBqaWZmaWVzOiA1MTMxNDI4MQorICAgICAgICAgYmFzZTogMDE3YjE4NTgKKyAgICAgICAgIHJ4X2Rlc2NfcHRyOiAwCisgICAgICAgICByeF9kZXNjX3B0cjogMDE3YjE4NTgKKyAgICAgICAgIGh3X2N1cnJfcHRyOiAwMTdiMTg1OAorICAgICAgICAgMDYwNDAwMDAgMDE3YjE4NjggMDE3YjE4OTggYzAxNmZmMDAKKyAgICAgICAgIDA2MDQwMDAwIDAxN2IxODc4IDAxN2IxZTljIGMwMTZmZjAwCisgICAgICAgICA0NjA0MDAwMCAwMTdiMTg4OCAwMTdiMjRhMCBjMDE2ZmYwMAorICAgICAgICAgMDYwNDAwMDAgMDE3YjE4NTggMDE3YjJhYTQgYzAxNmZmMDAKKworLy8gQSBrYXJ0eWF0IGhhc3puYWxvIHRvYmJpIGludGVyZmVzejogYSAwLXMgY2hhbm5lbC1ncm91cCBhIGNvbXgxIGludGVyZmVzeiwKKy8vIGVzIGF6IDEsMiwuLi4sMTYgdGltZXNsb3RvayB0YXJ0b3puYWsgaG96emE6CisKKyBJbnRlcmZhY2VzIHVzaW5nIHRoaXMgYm9hcmQ6IChjaGFubmVsLWdyb3VwLCBpbnRlcmZhY2UsIHRpbWVzbG90cykKKyAgICAgICAgICAwIGNvbXgxOiAxIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAxMiAxMyAxNCAxNSAxNgorICAgICAgICAgIDEgY29teDI6IDE3CisgICAgICAgICAgMiBjb214MzogMTgKKyAgICAgICAgICAzIGNvbXg0OiAxOQorICAgICAgICAgIDQgY29teDU6IDIwCisgICAgICAgICAgNSBjb214NjogMjEKKyAgICAgICAgICA2IGNvbXg3OiAyMgorICAgICAgICAgIDcgY29teDg6IDIzCisgICAgICAgICAgOCBjb214OTogMjQKKyAgICAgICAgICA5IGNvbXgxMDogMjUKKyAgICAgICAgIDEwIGNvbXgxMTogMjYKKyAgICAgICAgIDExIGNvbXgxMjogMjcKKyAgICAgICAgIDEyIGNvbXgxMzogMjgKKyAgICAgICAgIDEzIGNvbXgxNDogMjkKKyAgICAgICAgIDE0IGNvbXgxNTogMzAKKyAgICAgICAgIDE1IGNvbXgxNjogMzEKKworLy8gSGFueSBlc2VtZW55dCBrZXplbHQgbGUgYSBkcml2ZXIgZWd5LWVneSBoYXJkdmVyLWludGVycnVwdCBraXN6b2xnYWxhc2FuYWw6CisKKyBJbnRlcnJ1cHQgd29yayBoaXN0b2dyYW06CisgaGlzdFsgMF06ICAgICAgICAwIGhpc3RbIDFdOiAgICAgICAgMiBoaXN0WyAyXTogICAgMTg1NzQgaGlzdFsgM106ICAgICAgIDc5CisgaGlzdFsgNF06ICAgICAgIDE0IGhpc3RbIDVdOiAgICAgICAgMSBoaXN0WyA2XTogICAgICAgIDAgaGlzdFsgN106ICAgICAgICAxCisgaGlzdFsgOF06ICAgICAgICAwIGhpc3RbIDldOiAgICAgICAgNworCisvLyBIYW55IGtpa3VsZGVuZG8gY3NvbWFnIHZvbHQgbWFyIGEgVHgtcmluZ2JlbiBhbWlrb3IgdWphYmIgbGV0dCBpcnZhIGJlbGU6CisKKyBUeCByaW5nIGhpc3RvZ3JhbToKKyBoaXN0WyAwXTogICAgIDIzMjkgaGlzdFsgMV06ICAgICAgICAwIGhpc3RbIDJdOiAgICAgICAgMCBoaXN0WyAzXTogICAgICAgIDAKKworLy8gQXogRTEtaW50ZXJmZXN6IGhpYmEtc3phbWxhbG9pLCBheiByZmMyNDk1LW5layBtZWdmZWxlbG9lbjoKKy8vIChrYi4gYSBDaXNjbyByb3V0ZXJlayAic2hvdyBjb250cm9sbGVycyBlMSIgZm9ybWF0dW1hYmFuOiBodHRwOi8vd3d3LmNpc2NvLmNvbS91bml2ZXJjZC9jYy90ZC9kb2MvcHJvZHVjdC9zb2Z0d2FyZS9pb3MxMS9yYm9vay9yaW50ZXJmYy5odG0jeHRvY2lkMjU2NjkxMjYpCisKK0RhdGEgaW4gY3VycmVudCBpbnRlcnZhbCAoOTEgc2Vjb25kcyBlbGFwc2VkKToKKyAgIDk1MTYgTGluZSBDb2RlIFZpb2xhdGlvbnMsIDY1IFBhdGggQ29kZSBWaW9sYXRpb25zLCAyIEUtQml0IEVycm9ycworICAgMCBTbGlwIFNlY3MsIDIgRnIgTG9zcyBTZWNzLCAyIExpbmUgRXJyIFNlY3MsIDAgRGVncmFkZWQgTWlucworICAgMCBFcnJvcmVkIFNlY3MsIDAgQnVyc3R5IEVyciBTZWNzLCAwIFNldmVyZWx5IEVyciBTZWNzLCAxMSBVbmF2YWlsIFNlY3MKK0RhdGEgaW4gSW50ZXJ2YWwgMSAoMTUgbWludXRlcyk6CisgICAwIExpbmUgQ29kZSBWaW9sYXRpb25zLCAwIFBhdGggQ29kZSBWaW9sYXRpb25zLCAwIEUtQml0IEVycm9ycworICAgMCBTbGlwIFNlY3MsIDAgRnIgTG9zcyBTZWNzLCAwIExpbmUgRXJyIFNlY3MsIDAgRGVncmFkZWQgTWlucworICAgMCBFcnJvcmVkIFNlY3MsIDAgQnVyc3R5IEVyciBTZWNzLCAwIFNldmVyZWx5IEVyciBTZWNzLCAwIFVuYXZhaWwgU2VjcworRGF0YSBpbiBsYXN0IDQgaW50ZXJ2YWxzICgxIGhvdXIpOgorICAgMCBMaW5lIENvZGUgVmlvbGF0aW9ucywgMCBQYXRoIENvZGUgVmlvbGF0aW9ucywgMCBFLUJpdCBFcnJvcnMKKyAgIDAgU2xpcCBTZWNzLCAwIEZyIExvc3MgU2VjcywgMCBMaW5lIEVyciBTZWNzLCAwIERlZ3JhZGVkIE1pbnMKKyAgIDAgRXJyb3JlZCBTZWNzLCAwIEJ1cnN0eSBFcnIgU2VjcywgMCBTZXZlcmVseSBFcnIgU2VjcywgMCBVbmF2YWlsIFNlY3MKK0RhdGEgaW4gbGFzdCA5NiBpbnRlcnZhbHMgKDI0IGhvdXJzKToKKyAgIDAgTGluZSBDb2RlIFZpb2xhdGlvbnMsIDAgUGF0aCBDb2RlIFZpb2xhdGlvbnMsIDAgRS1CaXQgRXJyb3JzCisgICAwIFNsaXAgU2VjcywgMCBGciBMb3NzIFNlY3MsIDAgTGluZSBFcnIgU2VjcywgMCBEZWdyYWRlZCBNaW5zCisgICAwIEVycm9yZWQgU2VjcywgMCBCdXJzdHkgRXJyIFNlY3MsIDAgU2V2ZXJlbHkgRXJyIFNlY3MsIDAgVW5hdmFpbCBTZWNzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05laGFueSBrdWxvbmxlZ2VzZWJiIGJlYWxsaXRhc2kgbGVoZXRvc2VnIChpZG92ZWwgYmVlcHVsaGV0bmVrIG1hamQgYSBkcml2ZXJiZSk6CitFemVra2VsIHNvayBnYWxpYmF0IGxlaGV0IG9rb3puaSwgbmFneW9uIG92YXRvc2FuIGtlbGwgb2tldCBoYXN6bmFsbmkhCisKKwltb2RpZmllZCBDUkMtNCwgZm9yIGltcHJvdmVkIGludGVyd29ya2luZyBvZiBDUkMtNCBhbmQgbm9uLUNSQy00CisJZGV2aWNlczogKGxhc2QgcGFnZSAxMDcgZXMgZzcwNiBBbm5leCBCKQorCQlsYmlyZWdbIDB4MWIgXSB8PSAweDA4CisJCWxiaXJlZ1sgMHgxYyBdIHw9IDB4YzAKKwktIGlseWVua29yIGVydGVsbWV6ZXR0IGF6IE5NRiAtICdObyBNdWx0aWZyYW1lIGFsaWdubWVudCBGb3VuZCBhZnRlcgorCTQwMCBtc2VjJyBhbGFybS4KKworCUZBTEMgLSBhIHZvbmFsaSBtZWdoYWp0byBJQworCWxvY2FsIGxvb3AgLSBhIHNhamF0IGFkYXNvbWF0IGhhbGxqYW0gdmlzc3phCisJcmVtb3RlIGxvb3AgLSBhIGtpdnVscm9sIGpvdm8gYWRhc3QgYWRvbSB2aXNzemEKKworCUVneSBoaWJha2VyZXNlc3JlIGhhc3puYWxoYXRvIGRvbG9nOgorCQktIDEtZXMgdGltZXNsb3QgbG9jYWwgbG9vcCBhIEZBTEMtYmFuOgllY2hvID5sYmlyZWcgMHgxZCAweDIxCisJCS0gbG9jYWwgbG9vcCBraWthcGNzb2xhc2E6CQllY2hvID5sYmlyZWcgMHgxZCAweDAwCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2xpY2Vjb20udHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NsaWNlY29tLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWNmZDk1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NsaWNlY29tLnR4dApAQCAtMCwwICsxLDM2OSBAQAorCitTbGljZUNPTSBhZGFwdGVyIHVzZXIncyBkb2N1bWVudGF0aW9uIC0gZm9yIHRoZSAwLjUxIGRyaXZlciB2ZXJzaW9uCisKK1dyaXR0ZW4gYnkgQmFydPNrIElzdHbhbiA8YmFydG9raUBpdGMuaHU+CisKK0VuZ2xpc2ggdHJhbnNsYXRpb246IExha2F0b3MgR3n2cmd5IDxneXVyaUBpdGMuaHU+CitNb24gRGVjIDExIDE1OjI4OjQyIENFVCAyMDAwCisKK0xhc3QgbW9kaWZpZWQ6IFdlZCBBdWcgMjkgMTc6MjU6MzcgQ0VTVCAyMDAxCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VzYWdlOgorCitDb21waWxpbmcgdGhlIGtlcm5lbDoKKworQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisJWypdIFByb21wdCBmb3IgZGV2ZWxvcG1lbnQgYW5kL29yIGluY29tcGxldGUgY29kZS9kcml2ZXJzCisKK05ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKwlXYW4gaW50ZXJmYWNlcworCQk8TT4gTXVsdGlHYXRlIChDT01YKSBzeW5jaHJvbm91cworCQkJPE0+IFN1cHBvcnQgZm9yIE1VTklDSCBiYXNlZCBib2FyZHM6IFNsaWNlQ09NLCBQQ0lDT00gKE5FVykKKwkJCTxNPiBTdXBwb3J0IGZvciBIRExDIGFuZCBzeW5jUFBQLi4uCisKKworTG9hZGluZyB0aGUgbW9kdWxlczoKKworbW9kcHJvYmUgY29teAorCittb2Rwcm9iZSBjb214LXByb3RvLXBwcAkJIyBtb2R1bGUgZm9yICBDaXNjby1IRExDIGFuZCBTeW5jUFBQIHByb3RvY29scworCittb2Rwcm9iZSBjb214LWh3LW11bmljaAkJIyB0aGUgbW9kdWxlIGxvZ3MgaW5mb3JtYXRpb24gYnkgdGhlIGtlcm5lbAorCQkJCSMgYWJvdXQgdGhlIGRldGVjdGVkIGJvYXJkcworCisKK0NvbmZpZ3VyaW5nIHRoZSBib2FyZDoKKworIyBUaGlzIGludGVyZmFjZSB3aWxsIHVzZSB0aGUgQ2lzY28tSERMQyBsaW5lIHByb3RvY29sLAorIyB0aGUgdGltZXNsaWNlcyBhc3NpZ25lZCBhcmUgMSwyICgxMjggS2lCaXQgbGluZSBzcGVlZCkKKyMgKHRoZSBmaXJzdCBkYXRhIHRpbWVzbGljZSBpbiB0aGUgRy43MDMgZnJhbWUgaXMgbm8uIDEpCisjCitta2RpciAvcHJvYy9jb214L2NvbXgwLjEvCitlY2hvIHNsaWNlY29tCT4vcHJvYy9jb214L2NvbXgwLjEvYm9hcmR0eXBlCitlY2hvIGhkbGMJPi9wcm9jL2NvbXgvY29teDAuMS9wcm90b2NvbAorZWNobyAxIDIJPi9wcm9jL2NvbXgvY29teDAuMS90aW1lc2xvdHMKKworCisjIFRoaXMgaW50ZXJmYWNlIHVzZXMgU3luY1BQUCBsaW5lIHByb3RvY29sLCB0aGUgYXNzaWduZWQgCisjIGlzIG5vLiAzICg2NCBLaUJpdCBsaW5lIHNwZWVkKQorIworbWtkaXIgL3Byb2MvY29teC9jb214MC4yLworZWNobyBzbGljZWNvbQk+L3Byb2MvY29teC9jb214MC4yL2JvYXJkdHlwZQorZWNobyBwcHAJPi9wcm9jL2NvbXgvY29teDAuMi9wcm90b2NvbAorZWNobyAzCQk+L3Byb2MvY29teC9jb214MC4yL3RpbWVzbG90cworCisuLi4KKworaWZjb25maWcgY29teDAuMSB1cAoraWZjb25maWcgY29teDAuMiB1cAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgQ09NWCBpbnRlcmZhY2VzIHVzZSBhIDEwIHBhY2tldCB0cmFuc21pdCBxdWV1ZSBieSBkZWZhdWx0LCBob3dldmVyIFdBTgorbmV0d29ya3Mgc29tZXRpbWVzIHVzZSBiaWdnZXIgdmFsdWVzICgyMCB0byAxMDApLCB0byB1dGlsaXplIHRoZSBsaW5lIGJldHRlcgorYnkgbGFyZ2UgdHJhZmZpYyAodGhvdWdoIHRoZSBsaW5lIGRlbGF5IGluY3JlYXNlcyBiZWNhdXNlIG9mIG1vcmUgcGFja2V0cworam9pbiB0aGUgcXVldWUpLgorCisjIGlmY29uZmlnIGNvbXgwIHR4cXVldWVsZW4gNTAKKworVGhpcyBvcHRpb24gaXMgb25seSBzdXBwb3J0ZWQgYnkgdGhlIGlmY29uZmlnIGNvbW1hbmQgb2YgdGhlIGxhdGVyIAorZGlzdHJpYnV0aW9ucywgd2hpY2ggY2FtZSB3aXRoIDIuMiBrZXJuZWxzLCBzdWNoIGFzIFJlZEhhdCA2LjEgb3IgRGViaWFuIDIuMi4KKworWW91IGNhbiBkb3dubG9hZCBhIG5ld2VyIG5ldGJhc2UgcGFja2V0IGZyb20gCitodHRwOi8vd3d3LmRlYmlhbi5vcmcvfnJjdy8yLjIvbmV0YmFzZS8gZm9yIERlYmlhbiAyLjEsIHdoaWNoIGhhcyBhIG5ldworaWZjb25maWcuIFlvdSBjYW4gZ2V0IGZ1cnRoZXIgaW5mb3JtYXRpb24gYWJvdXQgdXNpbmcgMi4yIGtlcm5lbCB3aXRoCitEZWJpYW4gMi4xIGZyb20gaHR0cDovL3d3dy5kZWJpYW4ub3JnL3JlbGVhc2VzL3N0YWJsZS9ydW5uaW5nLWtlcm5lbC0yLjIKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIFNsaWNlQ29tIExFRHM6CisKK3JlZAktIG9uLCBpZiB0aGUgaW50ZXJmYWNlIGlzIHVuY29uZmlndXJlZCwgb3IgaXQgZ2V0cyBSZW1vdGUgQWxhcm0tcworZ3JlZW4JLSBvbiwgaWYgdGhlIGJvYXJkIGZpbmRzIGZyYW1lLXN5bmMgaW4gdGhlIHJlY2VpdmVkIHNpZ25hbCAJCisKK0EgYml0IG1vcmUgZGV0YWlsZWQ6CisKK3JlZDoJZ3JlZW46CW1lYW5pbmc6CisKKy0JLQlubyBmcmFtZS1zeW5jLCBubyBzaWduYWwgcmVjZWl2ZWQsIG9yIHNpZ25hbCBTTkFGVS4KKy0Jb24JIkV2ZXJ5dGhpbmcgaXMgT0siCitvbglvbglSZWNlcGlvbiBpcyBvaywgYnV0IHRoZSByZW1vdGUgZW5kIHNlbmRzIFJlbW90ZSBBbGFybQorb24JLQlUaGUgaW50ZXJmYWNlIGlzIHVuY29uZmlndXJlZAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIGhhcmR3YXJlIHNldHRpbmcgb3B0aW9uczoKKworVGhlIGdlbmVyYWwgYW5kIHRoZSBwcm90b2NvbCBsYXllciBvcHRpb25zIGRlc2NyaWJlZCBpbiB0aGUgJ2NvbXgudHh0JyBmaWxlCithcHBseSB0byB0aGUgU2xpY2VDb20gYXMgd2VsbCwgSSBvbmx5IHN1bW1hcml6ZSB0aGUgU2xpY2VDb20gaGFyZHdhcmUgc3BlY2lmaWMKK3NldHRpbmdzIGJlbG93LgorCitUaGUgJy9wcm9jL2NvbXgnIGNvbmZpZ3VyaW5nIGludGVyZmFjZToKKworQW4gaW50ZXJmYWNlIGRpcmVjdG9yeSBzaG91bGQgYmUgY3JlYXRlZCBmb3IgZXZlcnkgdGltZXNsb3QgZ3JvdXAgd2l0aAorJ21rZGlyJywgZSxnOiAnY29teDAnLCAnY29teDEnIGV0Yy4gVGhlIHRpbWVzbG90cyBjYW4gYmUgYXNzaWduZWQgaGVyZSB0byB0aGUKK3NwZWNpZmljIGludGVyZmFjZS4gVGhlIENpc2NvLWxpa2UgbmFtaW5nIGNvbnZlbnRpb24gKHNlcmlhbDM6MSAtIGZpcnN0Cit0aW1lc2xvdCBncm91cCBvZiB0aGUgM3JkLiBib2FyZCkgY2FuJ3QgYmUgdXNlZCBoZXJlLCBiZWNhdXNlIHRoZXNlIG1lYW4gSVAKK2FsaWFzaW5nIGluIExpbnV4LgorCitZb3UgY2FuIGdpdmUgYW55IG1lYW5pbmdmdWwgbmFtZSB0byBrZWVwIHRoZSBjb25maWd1cmF0aW9uIGNsZWFyOyAKK2UuZzogJ2NvbXgwLjEnLCAnY29teDAuMicsICdjb214MS4xJywgY29teDEuMicsIGlmIHlvdSBoYXZlIHR3byBib2FyZHMKK3dpdGggdHdvIGludGVyZmFjZXMgZWFjaC4KKworU2V0dGluZ3MsIHdoaWNoIGFwcGx5IHRvIHRoZSBib2FyZDoKKworTmVpdGhlciAnaW8nIG5vciAnaXJxJyBzZXR0aW5ncyByZXF1aXJlZCwgdGhlIGRyaXZlciB1c2VzIHRoZSByZXNvdXJjZXMKK2dpdmVuIGJ5IHRoZSBQQ0kgQklPUy4KKworY29teDAvYm9hcmRudW0JLSBib2FyZCBudW1iZXIgb2YgdGhlIFNsaWNlQ29tIGluIHRoZSBQQyAodXNpbmcgdGhlICduYXR1cmFsJworCQlQQ0kgb3JkZXIpIGFzIGxpc3RlZCBpbiAnL3Byb2MvcGNpJyBvciB0aGUgb3V0cHV0IG9mIHRoZQorCSAJJ2xzcGNpJyBjb21tYW5kLCBnZW5lcmFsbHkgdGhlIHNsb3RzIG5lYXJlciB0byB0aGUgbW90aGVyYm9hcmQKKwkJUENJIGRyaXZlciBjaGlwcyBoYXZlIHRoZSBsb3dlciBudW1iZXJzLgorCQkKKwkJRGVmYXVsdDogMCAodGhlIGNvdW50aW5nIHN0YXJ0cyB3aXRoIDApCisKK1Rob3VnaCB0aGUgb3B0aW9ucyBiZWxvdyBhcmUgdG8gYmUgc2V0IG9uIGEgc2luZ2xlIGludGVyZmFjZSwgdGhleSBhcHBseSB0byB0aGUKK3dob2xlIGJvYXJkLiBUaGUgcmVzdHJpY3Rpb24sIHRvIHVzZSB0aGVtIG9uICdVUCcgaW50ZXJmYWNlcywgaXMgYmVjYXVzZSB0aGUgCitjb21tYW5kIHNlcXVlbmNlIGJlbG93IGNvdWxkIGxlYWQgdG8gdW5wcmVkaWNhYmxlIHJlc3VsdHMuCisKKwkjIGVjaG8gMCAgICAgICAgPmJvYXJkbnVtCisJIyBlY2hvIGludGVybmFsID5jbG9ja19zb3VyY2UKKwkjIGVjaG8gMSAgICAgICAgPmJvYXJkbnVtCisKK1RoZSBzZXF1ZW5jZSB3b3VsZCBzZXQgdGhlIGNsb2NrIHNvdXJjZSBvZiBib2FyZCAwLgorCitUaGVzZSBzZXR0aW5ncyB3aWxsIHBlcnNpc3QgYWZ0ZXIgYWxsIHRoZSBpbnRlcmZhY2VzIGFyZSBjbGVhcmVkLCBidXQgYXJlCitjbGVhcmVkIHdoZW4gdGhlIGRyaXZlciBtb2R1bGUgaXMgdW5sb2FkZWQgYW5kIGxvYWRlZCBhZ2Fpbi4KKworY29teDAvY2xvY2tfc291cmNlIC0gc291cmNlIG9mIHRoZSB0cmFuc21pdCBjbG9jaworCVVzYWdlOgorCisJIyBlY2hvIGxpbmUgICAgID4vcHJvYy9jb214L2NvbXgwL2Nsb2NrX3NvdXJjZQorCSMgZWNobyBpbnRlcm5hbCA+L3Byb2MvY29teC9jb214MC9jbG9ja19zb3VyY2UKKworCWxpbmUJLSBUaGUgVHggY2xvY2sgaXMgYmVpbmcgZGVjb2RlZCBpZiB0aGUgaW5wdXQgZGF0YSBzdHJlYW0sCisJCWlmIG5vIGNsb2NrIHNlZW4gb24gdGhlIGlucHV0LCB0aGVuIHRoZSBib2FyZCB3aWxsIHVzZSBpdCdzCisJCW93biBjbG9jayBnZW5lcmF0b3IuCisKKwlpbnRlcm5hbCAtIFRoZSBUeCBjbG9jayBpcyBzdXBwbGllZCBieSB0aGUgYnVpbHRpbiBjbG9jayBnZW5lcmF0b3IuIAkKKworCURlZmF1bHQ6IGxpbmUKKworCU5vcm1hbGx5LCB0aGUgdGVsZWNvbW11bmljYXRpb24gY29tcGFueSdzIGVuZCBkZXZpY2UgKHRoZSBIRFNMCisJbW9kZW0pIHByb3ZpZGVzIHRoZSBUeCBjbG9jaywgdGhhdCdzIHdoeSAnbGluZScgaXMgdGhlIGRlZmF1bHQuCisKK2NvbXgwL2ZyYW1pbmcJLSBTd2l0Y2hpbmcgQ1JDNCBvZmYvb24KKworCUNSQzQ6IDE2IFBDTSBmcmFtZXMgKFRoZSAzMiA2NEtpYml0IGNoYW5uZWxzIGFyZSBtdWx0aXBsZXhlZCBpbnRvIGEKKwlQQ00gZnJhbWUsIG5vdGhpbmcgdG8gZG8gd2l0aCBIRExDIGZyYW1lcykgYXJlIGRpdmlkZWQgaW50byAyeDgKKwlncm91cHMsIGVhY2ggZ3JvdXAgaGFzIGEgNCBiaXQgQ1JDLgorCisJIyBlY2hvIGNyYzQJPi9wcm9jL2NvbXgvY29teDAvZnJhbWluZworCSMgZWNobyBuby1jcmM0CT4vcHJvYy9jb214L2NvbXgwL2ZyYW1pbmcKKworCURlZmF1bHQgaXMgJ2NyYzQnLCB0aGUgSHVuZ2FyaWFuIE1BVEFWIGxpbmVzIGJlaGF2ZSBsaWtlIHRoaXMuIAorCVRoZSB0cmFmZmljIGdlbmVyYWxseSBwYXNzZXMgaWYgdGhpcyBzZXR0aW5nIG9uIGJvdGggZW5kcyBkb24ndCBtYXRjaC4KKworY29teDAvbGluZWNvZGUJLSBTZXR0aW5nIHRoZSBsaW5lIGNvZGluZworCisJIyBlY2hvIGhkYjMJPi9wcm9jL2NvbXgvY29teDAvbGluZWNvZGUKKwkjIGVjaG8gYW1pCT4vcHJvYy9jb214L2NvbXgwL2xpbmVjb2RlCisKKwlEZWZhdWx0IGEgJ2hkYjMnLCBNQVRBViBsaW5lcyB1c2UgdGhpcy4KKwkKKwkoQU1JIGNvZGluZyBpcyByYXJlbHkgdXNlZCB3aXRoIEUxIGxpbmVzKS4gRnJhbWUgc3luYyBtYXkgb2NjdXIsIGlmCisJdGhpcyBzZXR0aW5nIGRvZXNuJ3QgbWF0Y2ggdGhlIG90aGVyIGVuZCdzLCBidXQgQ1JDNCBhbmQgZGF0YSBlcnJvcnMKKwl3aWxsIGNvbWUsIHdoaWNoIHdpbGwgcmVzdWx0IGluIENSQyBlcnJvcnMgb24gSERMQy9TeW5jUFBQIGxldmVsLiAKKworY29teDAvcmVnCS0gZGlyZWN0IGFjY2VzcyB0byB0aGUgYm9hcmQncyBNVU5JQ0ggKHJlZykgYW5kIEZBTEMgKGxiaXJlZykKK2NvbXgwL2xiaXJlZwljaXJjdWl0J3MgcmVnaXN0ZXJzICAKKworCSMgZWNobyA+cmVnIDB4MDQgMHgwCS0gd3JpdGUgMCB0byByZWdpc3RlciA0CisJIyBlY2hvID5yZWcgMHgxMDQJLSB3cml0ZSB0aGUgY29udGVudHMgb2YgcmVnaXN0ZXIgNCB3aXRoCisJCQkJcHJpbnRrKCkgdG8gc3lzbG9nCisKK1dBUk5JTkchIFRoZXNlIGFyZSBvbmx5IGZvciBkZXZlbG9wbWVudCBwdXJwb3NlcywgbWVzc2luZyB3aXRoIHRoaXMgd2lsbAorCXJlc3VsdCBtdWNoIHRyb3VibGUhCisKK2NvbXgwL2xvb3BiYWNrIC0gUGxhY2VzIGEgbG9vcCB0byB0aGUgYm9hcmQncyBHLjcwMyBzaWduYWxzCisKKwkjIGVjaG8gbm9uZSAgID4vcHJvYy9jb214L2NvbXgwL2xvb3BiYWNrCisJIyBlY2hvIGxvY2FsICA+L3Byb2MvY29teC9jb214MC9sb29wYmFjaworCSMgZWNobyByZW1vdGUgPi9wcm9jL2NvbXgvY29teDAvbG9vcGJhY2sKKworCW5vbmUgICAtIG5vcm1hbCBvcGVyYXRpb24sIG5vIGxvb3AKKwlsb2NhbCAgLSB0aGUgYm9hcmQgcmVjZWl2ZXMgaXQncyBvd24gb3V0cHV0CisJcmVtb3RlIC0gdGhlIGJvYXJkIHNlbmRzIHRoZSByZWNlaXZlZCBkYXRhIHRvIHRoZSByZW1vdGUgc2lkZQorCisJRGVmYXVsdDogbm9uZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbnRlcmZhY2UgKGNoYW5uZWwgZ3JvdXAgaW4gQ2lzY28gdGVybXMpIHNldHRpbmdzOiAKKworY29teDAvdGltZXNsb3RzCS0gd2hpY2ggdGltZXNsb3RzIGJlbG9uZyB0byB0aGUgZ2l2ZW4gaW50ZXJmYWNlCisKKwlTZXR0aW5nOgorCisJIyBlY2hvICcxIDUgMiA2IDcgOCcgPi9wcm9jL2NvbXgvY29teDAvdGltZXNsb3RzCisKKwkjIGNhdCAvcHJvYy9jb214L2NvbXgwL3RpbWVzbG90cworCTEgMiA1IDYgNyA4IAorCSMKKworCUZpbmRpbmcgYSB0aW1lc2xvdDogCisKKwkjIGdyZXAgJyA0JyAvcHJvYy9jb214L2NvbXgqL3RpbWVzbG90cworCS9wcm9jL2NvbXgvY29teDAvdGltZXNsb3RzOjEgMyA0IDUgNgorCSMKKworCVRoZSB0aW1lc2xvdHMgY2FuIGJlIGluIGFueSBvcmRlciwgJzEgMiAzJyBpcyB0aGUgc2FtZSBhcyAnMSAzIDInLgorCisJVGhlIGludGVyZmFjZSBoYXMgdG8gYmUgRE9XTiBkdXJpbmcgdGhlIHNldHRpbmcgKCdpZmNvbmZpZyBjb214MAorCWRvd24nKSwgYnV0IHRoZSBvdGhlciBpbnRlcmZhY2VzIGNvdWxkIG9wZXJhdGUgbm9ybWFsbHkuCisKKwlUaGUgZHJpdmVyIGNoZWNrcyBpZiB0aGUgYXNzaWduZWQgdGltZXNsb3RzIGFyZSB2YWNhbnQsIGlmIG5vdCwgdGhlbgorCXRoZSBzZXR0aW5nIHdvbid0IGJlIGFwcGxpZWQuCisKKwlUaGUgdGltZXNsb3QgdmFsdWVzIGFyZSB0cmVhdGVkIGFzIGRlY2ltYWwgbnVtYmVycywgbm90IHRvIG1pc3VuZGVyc3RhbmQKKwl2YWx1ZXMgb2YgMDgsIDA5IGZvcm0uCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoZWNraW5nIHRoZSBpbnRlcmZhY2UgYW5kIGJvYXJkIHN0YXR1czoKKworLSBMaW5lcyBiZWdpbm5pbmcgd2l0aCAnICcgKHNwYWNlKSBiZWxvbmcgdG8gdGhlIG9yaWdpbmFsIG91dHB1dCwgdGhlIGxpbmVzCit3aGljaCBiZWdpbiB3aXRoICcvLycgYXJlIHRoZSBjb21tZW50cy4KKworIHBhcGF5YTp+JCBjYXQgL3Byb2MvY29teC9jb214MS9zdGF0dXMKKyBJbnRlcmZhY2UgYWRtaW5pc3RyYXRpdmUgc3RhdHVzIGlzIFVQLCBtb2RlbSBzdGF0dXMgaXMgVVAsIHByb3RvY29sIGlzIFVQCisgTW9kZW0gc3RhdHVzIGNoYW5nZXM6IDAsIFRyYW5zbWl0dGVyIHN0YXR1cyBpcyBJRExFLCB0YnVzeTogMAorIEludGVyZmFjZSBsb2FkIChpbnB1dCk6IDk3ODM3NiAvIDk0NzgwOCAvIDk1MTAyNCBiaXRzL3MgKDVzLzVtLzE1bSkKKyAgICAgICAgICAgICAgIChvdXRwdXQpOiA5NzgzNzYgLyA5NDc4NDggLyA5NTEwMjQgYml0cy9zICg1cy81bS8xNW0pCisgRGVidWcgZmxhZ3M6IG5vbmUKKyBSWCBlcnJvcnM6IGxlbjogMjIsIG92ZXJydW46IDEsIGNyYzogMCwgYWJvcnRzOiAwCisgICAgICAgICAgICBidWZmZXIgb3ZlcnJ1bjogMCwgcGJ1ZmZlciBvdmVycnVuOiAwCisgVFggZXJyb3JzOiB1bmRlcnJ1bjogMAorIExpbmUga2VlcGFsaXZlICh2YWx1ZTogMTApIHN0YXR1cyBVUCBbMF0KKworLy8gVGhlIGhhcmR3YXJlIHNwZWNpZmljIHBhcnQgc3RhcnRzIGhlcmU6CisgQ29udHJvbGxlciBzdGF0dXM6CisgICAgICAgICBObyBhbGFybXMKKworLy8gQWxhcm06IAorLy8KKy8vIE5vIGFsYXJtcyAtIEV2ZXJ5dGhpbmcgT0sKKy8vCisvLyBMT1MgIC0gTG9zcyBPZiBTaWduYWwgLSBObyBzaWduYWwgc2Vuc2VkIG9uIHRoZSBpbnB1dAorLy8gQUlTICAtIEFsYXJtIEluZGljYXRpb24gU2lnbmFsIC0gVGhlIHJlbW90IHNpZGUgc2VuZHMgJzExMTExMTExJy1zLCAKKy8vCWl0IHRlbGxzLCB0aGF0IHRoZXJlJ3MgYW4gZXJyb3IgY29uZGl0aW9uLCBvciBpdCdzIG5vdAorLy8JaW5pdGlhbGlzZWQuCisvLyBBVVhQIC0gQXV4aWxpYXJ5IFBhdHRlcm4gSW5kaWNhdGlvbiAtIDAxMDEwMTAxLi4gcmVjZWl2ZWQuCisvLyBMRkEgIC0gTG9zcyBvZiBGcmFtZSBBbGlnbm1lbnQgLSBubyBmcmFtZSBzeW5jIHJlY2VpdmVkLgorLy8gUlJBICAtIFJlY2VpdmUgUmVtb3RlIEFsYXJtIC0gdGhlIHJlbW90ZSBlbmQncyBPSywgYnV0IHNpbmduYWxzIGVycm9yIGNvbmQuCisvLyBMTUZBIC0gTG9zcyBvZiBDUkM0IE11bHRpZnJhbWUgQWxpZ25tZW50IC0gbm8gQ1JDNCBtdWx0aWZyYW1lIHN5bmMuCisvLyBOTUYgIC0gTm8gTXVsdGlmcmFtZSBhbGlnbm1lbnQgRm91bmQgYWZ0ZXIgNDAwIG1zZWMgLSBubyBzdWNoIGFsYXJtIHVzaW5nCisvLwluby1jcmM0IG9yIGNyYzQgZnJhbWluZywgc2VlIGJlbG93LgorLy8KKy8vIE90aGVyIHBvc3NpYmxlIGVycm9yIG1lc3NhZ2VzOgorLy8KKy8vIFRyYW5zbWl0IExpbmUgU2hvcnQgLSB0aGUgYm9hcmQgZmVsdCwgdGhhdCBpdCdzIG91dHB1dCBpcyBzaG9ydC1jaXJjdWl0ZWQsCisvLyAJc28gaXQgc3dpdGNoZWQgdGhlIHRyYW5zbWlzc2lvbiBvZmYuIChUaGUgYm9hcmQgY2FuJ3QgZGVmaW5pdGVseSB0ZWxsLAorLy8JdGhhdCBpdCdzIG91dHB1dCBpcyBzaG9ydC1jaXJjdWl0ZWQuKQorCisvLyBDaGFpbmVkIGxpc3Qgb2YgdGhlIHJlY2VpdmVkIHBhY2tldHMsIGZvciBkZWJ1ZyBwdXJwb3NlczoKKworIFJ4IHJpbmc6CisgICAgICAgICByYWZ1dG90dDogMAorICAgICAgICAgbGFzdGNoZWNrOiA1MDg0NTczMSwgamlmZmllczogNTEzMTQyODEKKyAgICAgICAgIGJhc2U6IDAxN2IxODU4CisgICAgICAgICByeF9kZXNjX3B0cjogMAorICAgICAgICAgcnhfZGVzY19wdHI6IDAxN2IxODU4CisgICAgICAgICBod19jdXJyX3B0cjogMDE3YjE4NTgKKyAgICAgICAgIDA2MDQwMDAwIDAxN2IxODY4IDAxN2IxODk4IGMwMTZmZjAwCisgICAgICAgICAwNjA0MDAwMCAwMTdiMTg3OCAwMTdiMWU5YyBjMDE2ZmYwMAorICAgICAgICAgNDYwNDAwMDAgMDE3YjE4ODggMDE3YjI0YTAgYzAxNmZmMDAKKyAgICAgICAgIDA2MDQwMDAwIDAxN2IxODU4IDAxN2IyYWE0IGMwMTZmZjAwCisKKy8vIEFsbCB0aGUgaW50ZXJmYWNlcyB1c2luZyB0aGUgYm9hcmQ6IGNvbXgxLCB1c2luZyB0aGUgMSwyLC4uLjE2IHRpbWVzbG90cywKKy8vIGNvbXgyLCB1c2luZyB0aW1lc2xvdCAxNywgZXRjLgorCisgSW50ZXJmYWNlcyB1c2luZyB0aGlzIGJvYXJkOiAoY2hhbm5lbC1ncm91cCwgaW50ZXJmYWNlLCB0aW1lc2xvdHMpCisgICAgICAgICAgMCBjb214MTogMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIgMTMgMTQgMTUgMTYKKyAgICAgICAgICAxIGNvbXgyOiAxNworICAgICAgICAgIDIgY29teDM6IDE4CisgICAgICAgICAgMyBjb214NDogMTkKKyAgICAgICAgICA0IGNvbXg1OiAyMAorICAgICAgICAgIDUgY29teDY6IDIxCisgICAgICAgICAgNiBjb214NzogMjIKKyAgICAgICAgICA3IGNvbXg4OiAyMworICAgICAgICAgIDggY29teDk6IDI0CisgICAgICAgICAgOSBjb214MTA6IDI1CisgICAgICAgICAxMCBjb214MTE6IDI2CisgICAgICAgICAxMSBjb214MTI6IDI3CisgICAgICAgICAxMiBjb214MTM6IDI4CisgICAgICAgICAxMyBjb214MTQ6IDI5CisgICAgICAgICAxNCBjb214MTU6IDMwCisgICAgICAgICAxNSBjb214MTY6IDMxCisKKy8vIFRoZSBudW1iZXIgb2YgZXZlbnRzIGhhbmRsZWQgYnkgdGhlIGRyaXZlciBkdXJpbmcgYW4gaW50ZXJydXB0IGN5Y2xlOgorCisgSW50ZXJydXB0IHdvcmsgaGlzdG9ncmFtOgorIGhpc3RbIDBdOiAgICAgICAgMCBoaXN0WyAxXTogICAgICAgIDIgaGlzdFsgMl06ICAgIDE4NTc0IGhpc3RbIDNdOiAgICAgICA3OQorIGhpc3RbIDRdOiAgICAgICAxNCBoaXN0WyA1XTogICAgICAgIDEgaGlzdFsgNl06ICAgICAgICAwIGhpc3RbIDddOiAgICAgICAgMQorIGhpc3RbIDhdOiAgICAgICAgMCBoaXN0WyA5XTogICAgICAgIDcKKworLy8gVGhlIG51bWJlciBvZiBwYWNrZXRzIHRvIHNlbmQgaW4gdGhlIFR4IHJpbmcsIHdoZW4gYSBuZXcgb25lIGFycml2ZWQ6CisKKyBUeCByaW5nIGhpc3RvZ3JhbToKKyBoaXN0WyAwXTogICAgIDIzMjkgaGlzdFsgMV06ICAgICAgICAwIGhpc3RbIDJdOiAgICAgICAgMCBoaXN0WyAzXTogICAgICAgIDAKKworLy8gVGhlIGVycm9yIGNvdW50ZXJzIG9mIHRoZSBFMSBpbnRlcmZhY2UsIGFjY29yZGluZyB0byB0aGUgUkZDMjQ5NSwKKy8vIChzaW1pbGFyIHRvIHRoZSBDaXNjbyAic2hvdyBjb250cm9sbGVycyBlMSIgY29tbWFuZCdzIG91dHB1dDoKKy8vIGh0dHA6Ly93d3cuY2lzY28uY29tL3VuaXZlcmNkL2NjL3RkL2RvYy9wcm9kdWN0L3NvZnR3YXJlL2lvczExL3Jib29rL3JpbnRlcmZjLmh0bSN4dG9jaWQyNTY2OTEyNikKKworRGF0YSBpbiBjdXJyZW50IGludGVydmFsICg5MSBzZWNvbmRzIGVsYXBzZWQpOgorICAgOTUxNiBMaW5lIENvZGUgVmlvbGF0aW9ucywgNjUgUGF0aCBDb2RlIFZpb2xhdGlvbnMsIDIgRS1CaXQgRXJyb3JzCisgICAwIFNsaXAgU2VjcywgMiBGciBMb3NzIFNlY3MsIDIgTGluZSBFcnIgU2VjcywgMCBEZWdyYWRlZCBNaW5zCisgICAwIEVycm9yZWQgU2VjcywgMCBCdXJzdHkgRXJyIFNlY3MsIDAgU2V2ZXJlbHkgRXJyIFNlY3MsIDExIFVuYXZhaWwgU2VjcworRGF0YSBpbiBJbnRlcnZhbCAxICgxNSBtaW51dGVzKToKKyAgIDAgTGluZSBDb2RlIFZpb2xhdGlvbnMsIDAgUGF0aCBDb2RlIFZpb2xhdGlvbnMsIDAgRS1CaXQgRXJyb3JzCisgICAwIFNsaXAgU2VjcywgMCBGciBMb3NzIFNlY3MsIDAgTGluZSBFcnIgU2VjcywgMCBEZWdyYWRlZCBNaW5zCisgICAwIEVycm9yZWQgU2VjcywgMCBCdXJzdHkgRXJyIFNlY3MsIDAgU2V2ZXJlbHkgRXJyIFNlY3MsIDAgVW5hdmFpbCBTZWNzCitEYXRhIGluIGxhc3QgNCBpbnRlcnZhbHMgKDEgaG91cik6CisgICAwIExpbmUgQ29kZSBWaW9sYXRpb25zLCAwIFBhdGggQ29kZSBWaW9sYXRpb25zLCAwIEUtQml0IEVycm9ycworICAgMCBTbGlwIFNlY3MsIDAgRnIgTG9zcyBTZWNzLCAwIExpbmUgRXJyIFNlY3MsIDAgRGVncmFkZWQgTWlucworICAgMCBFcnJvcmVkIFNlY3MsIDAgQnVyc3R5IEVyciBTZWNzLCAwIFNldmVyZWx5IEVyciBTZWNzLCAwIFVuYXZhaWwgU2VjcworRGF0YSBpbiBsYXN0IDk2IGludGVydmFscyAoMjQgaG91cnMpOgorICAgMCBMaW5lIENvZGUgVmlvbGF0aW9ucywgMCBQYXRoIENvZGUgVmlvbGF0aW9ucywgMCBFLUJpdCBFcnJvcnMKKyAgIDAgU2xpcCBTZWNzLCAwIEZyIExvc3MgU2VjcywgMCBMaW5lIEVyciBTZWNzLCAwIERlZ3JhZGVkIE1pbnMKKyAgIDAgRXJyb3JlZCBTZWNzLCAwIEJ1cnN0eSBFcnIgU2VjcywgMCBTZXZlcmVseSBFcnIgU2VjcywgMCBVbmF2YWlsIFNlY3MKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU29tZSB1bmlxdWUgb3B0aW9ucywgKG1heSBnZXQgaW50byB0aGUgZHJpdmVyIGxhdGVyKToKK1RyZWF0IHRoZW0gdmVyeSBjYXJlZnVsbHksIHRoZXNlIGNhbiBjYXVzZSBtdWNoIHRyb3VibGUhCisKKwltb2RpZmllZCBDUkMtNCwgZm9yIGltcHJvdmVkIGludGVyd29ya2luZyBvZiBDUkMtNCBhbmQgbm9uLUNSQy00CisJZGV2aWNlczogKHNlZSBwYWdlIDEwNyBhbmQgZzcwNiBBbm5leCBCKQorCQlsYmlyZWdbIDB4MWIgXSB8PSAweDA4CisJCWxiaXJlZ1sgMHgxYyBdIHw9IDB4YzAKKworCS0gVGhlIE5NRiAtICdObyBNdWx0aWZyYW1lIGFsaWdubWVudCBGb3VuZCBhZnRlciA0MDAgbXNlYycgYWxhcm0gCisJY29tZXMgaW50byBhY2NvdW50LgorCisJRkFMQyAtIHRoZSBsaW5lIGRyaXZlciBjaGlwLgorCWxvY2FsIGxvb3AgLSBJIGhlYXIgbXkgdHJhbnNtaXNzaW9uIGJhY2suCisJcmVtb3RlIGxvb3AgLSBJIGVjaG8gdGhlIHJlbW90ZSB0cmFuc21pc3Npb24gYmFjay4KKworCVNvbWV0aGluZyB1c2VmdWwgZm9yIGZpbmRpbmcgZXJyb3JzOgorCQorCQktIGxvY2FsIGxvb3AgZm9yIHRpbWVzbG90IDEgaW4gdGhlIEZBTEMgY2hpcDoKKworCSMgZWNobyA+bGJpcmVnIDB4MWQgMHgyMQorCisJCS0gU3dpdGhpbmcgdGhlIGxvb3Agb2ZmOgorCisJIyBlY2hvID5sYmlyZWcgMHgxZCAweDAwCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc21jOS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc21jOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFlMTUwNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zbWM5LnR4dApAQCAtMCwwICsxLDQyIEBACisKK1NNQyA5eHh4eCBEcml2ZXIgCitSZXZpc2lvbiAwLjEyIAorMy81Lzk2CitDb3B5cmlnaHQgMTk5NiAgRXJpayBTdGFobG1hbiAKK1JlbGVhc2VkIHVuZGVyIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gCisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgaW5zdHJ1Y3Rpb25zIGFuZCBjYXZlYXRzIGZvciBteSBTTUM5eHh4IGRyaXZlci4gIFlvdQorc2hvdWxkIG5vdCBiZSB1c2luZyB0aGUgZHJpdmVyIHdpdGhvdXQgcmVhZGluZyB0aGlzIGZpbGUuICAKKworVGhpbmdzIHRvIG5vdGUgYWJvdXQgaW5zdGFsbGF0aW9uOgorCisgIDEuIFRoZSBkcml2ZXIgc2hvdWxkIHdvcmsgb24gYWxsIGtlcm5lbHMgZnJvbSAxLjIuMTMgdW50aWwgMS4zLjcxLgorCShBIGtlcm5lbCBwYXRjaCBpcyBzdXBwbGllZCBmb3IgMS4zLjcxICkKKworICAyLiBJZiB5b3UgaW5jbHVkZSB0aGlzIGludG8gdGhlIGtlcm5lbCwgeW91IG1pZ2h0IG5lZWQgdG8gY2hhbmdlIHNvbWUKKwlvcHRpb25zLCBzdWNoIGFzIGZvciBmb3JjaW5nIElSUS4gICAKKworIAorICAzLiAgVG8gY29tcGlsZSBhcyBhIG1vZHVsZSwgcnVuICdtYWtlJyAuICAgCisJTWFrZSB3aWxsIGdpdmUgeW91IHRoZSBhcHByb3ByaWF0ZSBvcHRpb25zIGZvciB2YXJpb3VzIGtlcm5lbCBzdXBwb3J0LgorIAorICA0LiAgTG9hZGluZyB0aGUgZHJpdmVyIGFzIGEgbW9kdWxlIDoKKworCXVzZTogICBpbnNtb2Qgc21jOTE5NC5vIAorCW9wdGlvbmFsIHBhcmFtZXRlcnM6CisJCWlvPXh4eHggICAgOiB5b3VyIGJhc2UgYWRkcmVzcworCQlpcnE9eHgJICAgOiB5b3VyIGlycSAKKwkJaWZwb3J0PXggICA6CTAgZm9yIHdoYXRldmVyIGlzIGRlZmF1bHQKKwkJCQkxIGZvciB0d2lzdGVkIHBhaXIKKwkJCQkyIGZvciBBVUkgICggb3IgQk5DIG9uIHNvbWUgY2FyZHMgKQorCitIb3cgdG8gb2J0YWluIHRoZSBsYXRlc3QgdmVyc2lvbj8gCisJCitGVFA6ICAKKwlmdHA6Ly9mZW5yaXMuY2FtcHVzLnZ0LmVkdS9zbWM5L3NtYzktMTIudGFyLmd6CisJZnRwOi8vc2Zib3gudnQuZWR1L2ZpbGVib3gvRi9mZW5yaXMvc21jOS9zbWM5LTEyLnRhci5neiAKKyAgIAorCitDb250YWN0aW5nIG1lOgorICAgIGVyaWtAbWFpbC52dC5lZHUKKyAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zbWN0ci50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc21jdHIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjODY2ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc21jdHIudHh0CkBAIC0wLDAgKzEsNjYgQEAKK1RleHQgRmlsZSBmb3IgdGhlIFNNQyBUb2tlbkNhcmQgVG9rZW5SaW5nIExpbnV4IGRyaXZlciAoc21jdHIuYykuCisgICAgICAgIEJ5IEpheSBTY2h1bGlzdCA8anNjaGxzdEBzYW1iYS5vcmc+CisKK1RoZSBMaW51eCBTTUMgVG9rZW4gUmluZyBkcml2ZXIgd29ya3Mgd2l0aCB0aGUgU01DIFRva2VuQ2FyZCBFbGl0ZSAoODExNVQpIAorSVNBIGFuZCBTTUMgVG9rZW5DYXJkIEVsaXRlL0EgKDgxMTVUL0EpIE1DQSBhZGFwdGVycy4KKworTGF0ZXN0IGluZm9ybWF0aW9uIG9uIHRoaXMgZHJpdmVyIGNhbiBiZSBvYnRhaW5lZCBvbiB0aGUgTGludXgtU05BIFdXVyBzaXRlLgorUGxlYXNlIHBvaW50IHlvdXIgYnJvd3NlciB0bzogaHR0cDovL3d3dy5saW51eC1zbmEub3JnCisKK1RoaXMgZHJpdmVyIGlzIHJhdGhlciBzaW1wbGUgdG8gdXNlLiBTZWxlY3QgWSB0byBUb2tlbiBSaW5nIGFkYXB0ZXIgc3VwcG9ydAoraW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBBIGNob2ljZSBmb3IgU01DIFRva2VuIFJpbmcgYWRhcHRlcnMgd2lsbAorYXBwZWFyLiBUaGlzIGRyaXZlcyBzdXBwb3J0cyBhbGwgU01DIElTQS9NQ0EgYWRhcHRlcnMuIENob29zZSB0aGlzCitvcHRpb24uIEkgcGVyc29uYWxseSByZWNvbW1lbmQgY29tcGlsaW5nIHRoZSBkcml2ZXIgYXMgYSBtb2R1bGUgKE0pLCBidXQgaWYgeW91Cit5b3Ugd291bGQgbGlrZSB0byBjb21waWxlIGl0IHN0YXRpY2x5IGFuc3dlciBZIGluc3RlYWQuCisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIG11bHRpcGxlIGFkYXB0ZXJzIHdpdGhvdXQgdGhlIG5lZWQgdG8gbG9hZCBtdWx0aXBsZSBjb3BpZXMKK29mIHRoZSBkcml2ZXIuIFlvdSBzaG91bGQgYmUgYWJsZSB0byBsb2FkIHVwIHRvIDcgYWRhcHRlcnMgd2l0aG91dCBhbnkga2VybmVsCittb2RpZmljYXRpb25zLCBpZiB5b3UgYXJlIGluIG5lZWQgb2YgbW9yZSBwbGVhc2UgY29udGFjdCB0aGUgbWFpbnRhaW5lciBvZiB0aGlzCitkcml2ZXIuCisKK0xvYWQgdGhlIGRyaXZlciBlaXRoZXIgYnkgbGlsby9sb2FkbGluIG9yIGFzIGEgbW9kdWxlLiBXaGVuIGEgbW9kdWxlIHVzaW5nIHRoZQorZm9sbG93aW5nIGNvbW1hbmQgd2lsbCBzdWZmaWNlIGZvciBtb3N0OgorCisjIG1vZHByb2JlIHNtY3RyCitzbWN0ci5jOiB2MS4wMCAxMi82Lzk5IGJ5IGpzY2hsc3RAc2FtYmEub3JnCit0cjA6IFNNQyBUb2tlbkNhcmQgODExNVQgYXQgSW8gMHgzMDAsIElycSAxMCwgUm9tIDB4ZDgwMDAsIFJhbSAweGNjMDAwLgorCitOb3cganVzdCBzZXR1cCB0aGUgZGV2aWNlIHZpYSBpZmNvbmZpZyBhbmQgc2V0IGFuZCByb3V0ZXMgeW91IG1heSBoYXZlLiBBZnRlcgordGhpcyB5b3UgYXJlIHJlYWR5IHRvIHN0YXJ0IHNlbmRpbmcgc29tZSB0b2tlbnMuCisKK0VycmF0YToKKzEpLiBGb3IgYW55b25lIHdvbmRlcmluZyB3aGVyZSB0byBwaWNrIHVwIHRoZSBTTUMgYWRhcHRlcnMgcGxlYXNlIGJyb3dzZQorICAgIHRvIGh0dHA6Ly93d3cuc21jLmNvbQorCisyKS4gSWYgeW91IGFyZSB0aGUgZmlyc3Qvb25seSBUb2tlbiBSaW5nIENsaWVudCBvbiBhIFRva2VuIFJpbmcgTEFOLCBwbGVhc2UKKyAgICBzcGVjaWZ5IHRoZSByaW5nc3BlZWQgd2l0aCB0aGUgcmluZ3NwZWVkPVs0LzE2XSBtb2R1bGUgb3B0aW9uLiBJZiBubworICAgIHJpbmdzcGVlZCBpcyBzcGVjaWZpZWQgdGhlIGRyaXZlciB3aWxsIGF0dGVtcHQgdG8gYXV0b2RldGVjdCB0aGUgcmluZworICAgIHNwZWVkIGFuZC9vciBpZiB0aGUgYWRhcHRlciBpcyB0aGUgZmlyc3Qvb25seSBzdGF0aW9uIG9uIHRoZSByaW5nIHRha2UKKyAgICB0aGUgYXBwcm9wcmlhdGUgYWN0aW9ucy4gCisKKyAgICBOT1RFOiBEZWZhdWx0IHJpbmcgc3BlZWQgaXMgMTZNQiBVVFAuCisKKzMpLiBQblAgc3VwcG9ydCBmb3IgdGhpcyBhZGFwdGVyIHN1Y2tzLiBJIHJlY29tbWVuZCBoYXJkIHNldHRpbmcgdGhlIAorICAgIElPL01FTS9JUlEgYnkgdGhlIGp1bXBlcnMgb24gdGhlIGFkYXB0ZXIuIElmIHRoaXMgaXMgbm90IHBvc3NpYmxlCisgICAgbG9hZCB0aGUgbW9kdWxlIHdpdGggdGhlIGZvbGxvd2luZyBpbz1baW9hZGRyXSBtZW09W21lbV9hZGRyXQorICAgIGlycT1baXJxX251bV0uCisKKyAgICBUaGUgZm9sbG93aW5nIElSUSwgSU8sIGFuZCBNRU0gc2V0dGluZ3MgYXJlIHN1cHBvcnRlZC4KKworICAgIElPIHBvcnRzOgorICAgIDB4MjAwLCAweDIyMCwgMHgyNDAsIDB4MjYwLCAweDI4MCwgMHgyQTAsIDB4MkMwLCAweDJFMCwgMHgzMDAsCisgICAgMHgzMjAsIDB4MzQwLCAweDM2MCwgMHgzODAuCisKKyAgICBJUlFzOgorICAgIDIsIDMsIDQsIDUsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUKKworICAgIE1lbW9yeSBhZGRyZXNzZXM6CisgICAgMHhBMDAwMCwgMHhBNDAwMCwgMHhBODAwMCwgMHhBQzAwMCwgMHhCMDAwMCwgMHhCNDAwMCwKKyAgICAweEI4MDAwLCAweEJDMDAwLCAweEMwMDAwLCAweEM0MDAwLCAweEM4MDAwLCAweENDMDAwLAorICAgIDB4RDAwMDAsIDB4RDQwMDAsIDB4RDgwMDAsIDB4REMwMDAsIDB4RTAwMDAsIDB4RTQwMDAsCisgICAgMHhFODAwMCwgMHhFQzAwMCwgMHhGMDAwMCwgMHhGNDAwMCwgMHhGODAwMCwgMHhGQzAwMAorCitUaGlzIGRyaXZlciBpcyB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIEl0cyBGaXJtd2FyZSBpbWFnZSBpcworaW5jbHVkZWQgYXMgYW4gaW5pdGlhbGl6ZWQgQy1hcnJheSBhbmQgaXMgbGljZW5zZWQgYnkgU01DIHRvIHRoZSBMaW51eAordXNlcnMgb2YgdGhpcyBkcml2ZXIuIEhvd2V2ZXIgbm8gd2FycmFudHkgYWJvdXQgaXRzIGZpdG5lc3MgaXMgZXhwcmVzc2VkIG9yCitpbXBsaWVkIGJ5IFNNQy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90Y3AudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RjcC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE3NDkwMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90Y3AudHh0CkBAIC0wLDAgKzEsMzkgQEAKK0hvdyB0aGUgbmV3IFRDUCBvdXRwdXQgbWFjaGluZSBbbnlpXSB3b3Jrcy4KKworCitEYXRhIGlzIGtlcHQgb24gYSBzaW5nbGUgcXVldWUuIFRoZSBza2ItPnVzZXJzIGZsYWcgdGVsbHMgdXMgaWYgdGhlIGZyYW1lIGlzCitvbmUgdGhhdCBoYXMgYmVlbiBxdWV1ZWQgYWxyZWFkeS4gVG8gYWRkIGEgZnJhbWUgd2UgdGhyb3cgaXQgb24gdGhlIGVuZC4gQWNrCit3YWxrcyBkb3duIHRoZSBsaXN0IGZyb20gdGhlIHN0YXJ0LgorCitXZSBrZWVwIGEgc2V0IG9mIGNvbnRyb2wgZmxhZ3MKKworCisJc2stPnRjcF9wZW5kX2V2ZW50CisKKwkJVENQX1BFTkRfQUNLCQkJQWNrIG5lZWRlZAorCQlUQ1BfQUNLX05PVwkJCU5lZWRlZCBub3cKKwkJVENQX1dJTkRPVwkJCVdpbmRvdyB1cGRhdGUgY2hlY2sKKwkJVENQX1dJTlpFUk8JCQlaZXJvIHByb2JpbmcKKworCisJc2stPnRyYW5zbWl0X3F1ZXVlCQlUaGUgdHJhbnNtaXNzaW9uIGZyYW1lIGJlZ2luCisJc2stPnRyYW5zbWl0X25ldwkJRmlyc3QgbmV3IGZyYW1lIHBvaW50ZXIKKwlzay0+dHJhbnNtaXRfZW5kCQlXaGVyZSB0byBhZGQgZnJhbWVzCisKKwlzay0+dGNwX2xhc3RfdHhfYWNrCQlMYXN0IGFjayBzZWVuCisJc2stPnRjcF9kdXBfYWNrCQkJRHVwIGFjayBjb3VudCBmb3IgZmFzdCByZXRyYW5zbWl0CisKKworRnJhbWVzIGFyZSBxdWV1ZWQgZm9yIG91dHB1dCBieSB0Y3Bfd3JpdGUuIFdlIGRvIG91ciBiZXN0IHRvIHNlbmQgdGhlIGZyYW1lcworb2ZmIGltbWVkaWF0ZWx5IGlmIHBvc3NpYmxlLCBidXQgb3RoZXJ3aXNlIHF1ZXVlIGFuZCBjb21wdXRlIHRoZSBib2R5CitjaGVja3N1bSBpbiB0aGUgY29weS4gCisKK1doZW4gYSB3cml0ZSBpcyBkb25lIHdlIHRyeSB0byBjbGVhciBhbnkgcGVuZGluZyBldmVudHMgYW5kIHBpZ2d5IGJhY2sgdGhlbS4KK0lmIHRoZSB3aW5kb3cgaXMgZnVsbCB3ZSBxdWV1ZSBmdWxsIHNpemVkIGZyYW1lcy4gT24gdGhlIGZpcnN0IHRpbWVvdXQgaW4KK3plcm8gd2luZG93IHdlIHNwbGl0IHRoaXMuCisKK09uIGEgdGltZXIgd2Ugd2FsayB0aGUgcmV0cmFuc21pdCBsaXN0IHRvIHNlbmQgYW55IHJldHJhbnNtaXRzLCB1cGRhdGUgdGhlCitiYWNrb2ZmIHRpbWVycyBldGMuIEEgY2hhbmdlIG9mIHJvdXRlIHRhYmxlIHN0YW1wIGNhdXNlcyBhIGNoYW5nZSBvZiBoZWFkZXIKK2FuZCByZWNvbXB1dGUuIFdlIGFkZCBhbnkgbmV3IHRjcCBsZXZlbCBoZWFkZXJzIGFuZCByZWZpbmlzaCB0aGUgY2hlY2tzdW0KK2JlZm9yZSBzZW5kaW5nLiAKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RsYW4udHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RsYW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNmFhNWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGxhbi50eHQKQEAgLTAsMCArMSwxMTcgQEAKKyhDKSAxOTk3LTE5OTggQ2FsZGVyYSwgSW5jLgorKEMpIDE5OTggSmFtZXMgQmFua3MKKyhDKSAxOTk5LTIwMDEgVG9yYmVuIE1hdGhpYXNlbiA8dG1tQGltYWdlLmRrLCB0b3JiZW4ubWF0aGlhc2VuQGNvbXBhcS5jb20+CisKK0ZvciBkcml2ZXIgaW5mb3JtYXRpb24vdXBkYXRlcyB2aXNpdCBodHRwOi8vb3BlbnNvdXJjZS5jb21wYXEuY29tCisKKworVExBTiBkcml2ZXIgZm9yIExpbnV4LCB2ZXJzaW9uIDEuMTRhCitSRUFETUUKKworCitJLiAgU3VwcG9ydGVkIERldmljZXMuCisKKyAgICBPbmx5IFBDSSBkZXZpY2VzIHdpbGwgd29yayB3aXRoIHRoaXMgZHJpdmVyLgorCisgICAgU3VwcG9ydGVkOgorICAgIFZlbmRvciBJRAlEZXZpY2UgSUQJTmFtZQorICAgIDBlMTEJYWUzMgkJQ29tcGFxIE5ldGVsbGlnZW50IDEwLzEwMCBUWCBQQ0kgVVRQCisgICAgMGUxMQlhZTM0CQlDb21wYXEgTmV0ZWxsaWdlbnQgMTAgVCBQQ0kgVVRQCisgICAgMGUxMQlhZTM1CQlDb21wYXEgSW50ZWdyYXRlZCBOZXRGbGV4IDMvUAorICAgIDBlMTEJYWU0MAkJQ29tcGFxIE5ldGVsbGlnZW50IER1YWwgMTAvMTAwIFRYIFBDSSBVVFAKKyAgICAwZTExCWFlNDMJCUNvbXBhcSBOZXRlbGxpZ2VudCBJbnRlZ3JhdGVkIDEwLzEwMCBUWCBVVFAKKyAgICAwZTExCWIwMTEJCUNvbXBhcSBOZXRlbGxpZ2VudCAxMC8xMDAgVFggRW1iZWRkZWQgVVRQCisgICAgMGUxMQliMDEyCQlDb21wYXEgTmV0ZWxsaWdlbnQgMTAgVC8yIFBDSSBVVFAvQ29heAorICAgIDBlMTEJYjAzMAkJQ29tcGFxIE5ldGVsbGlnZW50IDEwLzEwMCBUWCBVVFAKKyAgICAwZTExCWYxMzAJCUNvbXBhcSBOZXRGbGV4IDMvUAorICAgIDBlMTEJZjE1MAkJQ29tcGFxIE5ldEZsZXggMy9QCisgICAgMTA4ZAkwMDEyCQlPbGljb20gT0MtMjMyNQkKKyAgICAxMDhkCTAwMTMJCU9saWNvbSBPQy0yMTgzCisgICAgMTA4ZAkwMDE0CQlPbGljb20gT0MtMjMyNgkKKworCisgICAgQ2F2ZWF0czoKKyAgICAKKyAgICBJIGFtIG5vdCBzdXJlIGlmIDEwMEJhc2VUWCBkYXVnaHRlcmJvYXJkcyAoZm9yIHRob3NlIGNhcmRzIHdoaWNoCisgICAgc3VwcG9ydCBzdWNoIHRoaW5ncykgd2lsbCB3b3JrLiAgSSBoYXZlbid0IGhhZCBhbnkgc29saWQgZXZpZGVuY2UKKyAgICBlaXRoZXIgd2F5LgorCisgICAgSG93ZXZlciwgaWYgYSBjYXJkIHN1cHBvcnRzIDEwMEJhc2VUeCB3aXRob3V0IHJlcXVpcmluZyBhbiBhZGQKKyAgICBvbiBkYXVnaHRlcmJvYXJkLCBpdCBzaG91bGQgd29yayB3aXRoIDEwMEJhc2VUeC4KKworICAgIFRoZSAiTmV0ZWxsaWdlbnQgMTAgVC8yIFBDSSBVVFAvQ29heCIgKGIwMTIpIGRldmljZSBpcyB1bnRlc3RlZCwKKyAgICBidXQgSSBkbyBub3QgZXhwZWN0IGFueSBwcm9ibGVtcy4KKyAgICAKKworSUkuICAgRHJpdmVyIE9wdGlvbnMKKwkxLiBZb3UgY2FuIGFwcGVuZCBkZWJ1Zz14IHRvIHRoZSBlbmQgb2YgdGhlIGluc21vZCBsaW5lIHRvIGdldAorICAgICAgICAgICBkZWJ1ZyBtZXNzYWdlcywgd2hlcmUgeCBpcyBhIGJpdCBmaWVsZCB3aGVyZSB0aGUgYml0cyBtZWFuCisJICAgdGhlIGZvbGxvd2luZzoKKwkgICAKKwkgICAweDAxCQlUdXJuIG9uIGdlbmVyYWwgZGVidWdnaW5nIG1lc3NhZ2VzLgorCSAgIDB4MDIJCVR1cm4gb24gcmVjZWl2ZSBkZWJ1Z2dpbmcgbWVzc2FnZXMuCisJICAgMHgwNAkJVHVybiBvbiB0cmFuc21pdCBkZWJ1Z2dpbmcgbWVzc2FnZXMuCisJICAgMHgwOAkJVHVybiBvbiBsaXN0IGRlYnVnZ2luZyBtZXNzYWdlcy4KKworCTIuIFlvdSBjYW4gYXBwZW5kIGF1aT0xIHRvIHRoZSBlbmQgb2YgdGhlIGluc21vZCBsaW5lIHRvIGNhdXNlCisgICAgICAgICAgIHRoZSBhZGFwdGVyIHRvIHVzZSB0aGUgQVVJIGludGVyZmFjZSBpbnN0ZWFkIG9mIHRoZSAxMCBCYXNlIFQKKyAgICAgICAgICAgaW50ZXJmYWNlLiAgVGhpcyBpcyBhbHNvIHdoYXQgdG8gZG8gaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBCTkMKKwkgICBjb25uZWN0b3Igb24gYSBUTEFOIGJhc2VkIGRldmljZS4gIChTZXR0aW5nIHRoaXMgb3B0aW9uIG9uIGEKKwkgICBkZXZpY2UgdGhhdCBkb2VzIG5vdCBoYXZlIGFuIEFVSS9CTkMgY29ubmVjdG9yIHdpbGwgcHJvYmFibHkKKwkgICBjYXVzZSBpdCB0byBub3QgZnVuY3Rpb24gY29ycmVjdGx5LikKKworCTMuIFlvdSBjYW4gc2V0IGR1cGxleD0xIHRvIGZvcmNlIGhhbGYgZHVwbGV4LCBhbmQgZHVwbGV4PTIgdG8KKwkgICBmb3JjZSBmdWxsIGR1cGxleC4KKworCTQuIFlvdSBjYW4gc2V0IHNwZWVkPTEwIHRvIGZvcmNlIDEwTWJzIG9wZXJhdGlvbiwgYW5kIHNwZWVkPTEwMAorCSAgIHRvIGZvcmNlIDEwME1icyBvcGVyYXRpb24uIChJJ20gbm90IHN1cmUgd2hhdCB3aWxsIGhhcHBlbgorCSAgIGlmIGEgY2FyZCB3aGljaCBvbmx5IHN1cHBvcnRzIDEwTWJzIGlzIGZvcmNlZCBpbnRvIDEwME1icworCSAgIG1vZGUuKQorCisJNS4gWW91IGhhdmUgdG8gdXNlIHNwZWVkPVggZHVwbGV4PVkgdG9nZXRoZXIgbm93LiBJZiB5b3UganVzdAorCSAgIGRvICJpbnNtb2QgdGxhbi5vIHNwZWVkPTEwMCIgdGhlIGRyaXZlciB3aWxsIGRvIEF1dG8tTmVnLgorCSAgIFRvIGZvcmNlIGEgMTBNYnBzIEhhbGYtRHVwbGV4IGxpbmsgZG8gImluc21vZCB0bGFuLm8gc3BlZWQ9MTAgCisJICAgZHVwbGV4PTEiLgorCisJNi4gSWYgdGhlIGRyaXZlciBpcyBidWlsdCBpbnRvIHRoZSBrZXJuZWwsIHlvdSBjYW4gdXNlIHRoZSAzcmQKKwkgICBhbmQgNHRoIHBhcmFtZXRlcnMgdG8gc2V0IGF1aSBhbmQgZGVidWcgcmVzcGVjdGl2ZWx5LiAgRm9yCisJICAgZXhhbXBsZToKKworCSAgIGV0aGVyPTAsMCwweDEsMHg3LGV0aDAKKworCSAgIFRoaXMgc2V0cyBhdWkgdG8gMHgxIGFuZCBkZWJ1ZyB0byAweDcsIGFzc3VtaW5nIGV0aDAgaXMgYQorCSAgIHN1cHBvcnRlZCBUTEFOIGRldmljZS4KKworCSAgIFRoZSBiaXRzIGluIHRoZSB0aGlyZCBieXRlIGFyZSBhc3NpZ25lZCBhcyBmb2xsb3dzOgorCisJCTB4MDEgPSBhdWkKKwkJMHgwMiA9IHVzZSBoYWxmIGR1cGxleAorCQkweDA0ID0gdXNlIGZ1bGwgZHVwbGV4CisJCTB4MDggPSB1c2UgMTBCYXNlVAorCQkweDEwID0gdXNlIDEwMEJhc2VUeAorCisJICAgWW91IGFsc28gbmVlZCB0byBzZXQgYm90aCBzcGVlZCBhbmQgZHVwbGV4IHNldHRpbmdzIHdoZW4gZm9yY2luZworCSAgIHNwZWVkcyB3aXRoIGtlcm5lbC1wYXJhbWV0ZXJzLiAKKwkgICBldGhlcj0wLDAsMHgxMiwwLGV0aDAgd2lsbCBmb3JjZSBsaW5rIHRvIDEwME1icHMgSGFsZi1EdXBsZXguCisKKwk3LiBJZiB5b3UgaGF2ZSBtb3JlIHRoYW4gb25lIHRsYW4gYWRhcHRlciBpbiB5b3VyIHN5c3RlbSwgeW91IGNhbgorCSAgIHVzZSB0aGUgYWJvdmUgb3B0aW9ucyBvbiBhIHBlciBhZGFwdGVyIGJhc2lzLiBUbyBmb3JjZSBhIDEwME1iaXQvSEQKKwkgICBsaW5rIHdpdGggeW91ciBldGgxIGFkYXB0ZXIgdXNlOgorCSAgIAorCSAgIGluc21vZCB0bGFuIHNwZWVkPTAsMTAwIGR1cGxleD0wLDEKKworCSAgIE5vdyBldGgwIHdpbGwgdXNlIGF1dG8tbmVnIGFuZCBldGgxIHdpbGwgYmUgZm9yY2VkIHRvIDEwME1iaXQvSEQuCisJICAgTm90ZSB0aGF0IHRoZSB0bGFuIGRyaXZlciBzdXBwb3J0cyBhIG1heGltdW0gb2YgOCBhZGFwdGVycy4KKworCitJSUkuICBUaGluZ3MgdG8gdHJ5IGlmIHlvdSBoYXZlIHByb2JsZW1zLgorCTEuIE1ha2Ugc3VyZSB5b3VyIGNhcmQncyBQQ0kgaWQgaXMgYW1vbmcgdGhvc2UgbGlzdGVkIGluCisJICAgc2VjdGlvbiBJLCBhYm92ZS4KKwkyLiBNYWtlIHN1cmUgcm91dGluZyBpcyBjb3JyZWN0LgorCTMuIFRyeSBmb3JjaW5nIGRpZmZlcmVudCBzcGVlZC9kdXBsZXggc2V0dGluZ3MKKworCitUaGVyZSBpcyBhbHNvIGEgdGxhbiBtYWlsaW5nIGxpc3Qgd2hpY2ggeW91IGNhbiBqb2luIGJ5IHNlbmRpbmcgInN1YnNjcmliZSB0bGFuIgoraW4gdGhlIGJvZHkgb2YgYW4gZW1haWwgdG8gbWFqb3Jkb21vQHZ1c2VyLnZ1LnVuaW9uLmVkdS4KK1RoZXJlIGlzIGFsc28gYSB0bGFuIHdlYnNpdGUgYXQgaHR0cDovL29wZW5zb3VyY2UuY29tcGFxLmNvbQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdG1zMzgwdHIudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RtczM4MHRyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzllNTI3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RtczM4MHRyLnR4dApAQCAtMCwwICsxLDE0NyBAQAorVGV4dCBmaWxlIGZvciB0aGUgTGludXggU3lzS29ubmVjdCBUb2tlbiBSaW5nIElTQS9QQ0kgQWRhcHRlciBEcml2ZXIuCisJVGV4dCBmaWxlIGJ5OiBKYXkgU2NodWxpc3QgPGpzY2hsc3RAc2FtYmEub3JnPgorCitUaGUgTGludXggU3lzS29ubmVjdCBUb2tlbiBSaW5nIGRyaXZlciB3b3JrcyB3aXRoIHRoZSBTeXNLb25uZWN0IFRSNC8xNigrKSBJU0EsCitTeXNLb25uZWN0IFRSNC8xNigrKSBQQ0ksIFN5c0tvbm5lY3QgVFI0LzE2IFBDSSwgYW5kIG9sZGVyIHJldmlzaW9ucyBvZiB0aGUKK1NLIE5FVCBUUjQvMTYgSVNBIGNhcmQuCisKK0xhdGVzdCBpbmZvcm1hdGlvbiBvbiB0aGlzIGRyaXZlciBjYW4gYmUgb2J0YWluZWQgb24gdGhlIExpbnV4LVNOQSBXV1cgc2l0ZS4KK1BsZWFzZSBwb2ludCB5b3VyIGJyb3dzZXIgdG86IAoraHR0cDovL3d3dy5saW51eC1zbmEub3JnCisKK01hbnkgdGhhbmtzIHRvIENocmlzdG9waCBHb29zIGZvciBoaXMgZXhjZWxsZW50IHdvcmsgb24gdGhpcyBkcml2ZXIgYW5kCitTeXNLb25uZWN0IGZvciBkb25hdGluZyB0aGUgYWRhcHRlcnMgdG8gTGludXgtU05BIGZvciB0aGUgdGVzdGluZyBhbmQgCittYWludGVuYW5jZSBvZiB0aGlzIGRldmljZSBkcml2ZXIuCisKK0ltcG9ydGFudCBpbmZvcm1hdGlvbiB0byBiZSBub3RlZDoKKzEuIEFkYXB0ZXJzIGNhbiBiZSBzbG93IHRvIG9wZW4gKH4yMCBzZWNzKSBhbmQgY2xvc2UgKH41IHNlY3MpLCBwbGVhc2UgYmUgCisgICBwYXRpZW50LgorMi4gVGhpcyBkcml2ZXIgd29ya3MgdmVyeSB3ZWxsIHdoZW4gYXV0b3Byb2JpbmcgZm9yIGFkYXB0ZXJzLiBXaHkgZXZlbiAKKyAgIHRoaW5rIGFib3V0IHRob3NlIG5hc3R5IGlvL2ludC9kbWEgc2V0dGluZ3Mgb2YgbW9kcHJvYmUgd2hlbiB0aGUgZHJpdmVyIAorICAgd2lsbCBkbyBpdCBhbGwgZm9yIHlvdSEKKworVGhpcyBkcml2ZXIgaXMgcmF0aGVyIHNpbXBsZSB0byB1c2UuIFNlbGVjdCBZIHRvIFRva2VuIFJpbmcgYWRhcHRlciBzdXBwb3J0CitpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEEgY2hvaWNlIGZvciBTeXNLb25uZWN0IFRva2VuIFJpbmcgYWRhcHRlcnMgd2lsbAorYXBwZWFyLiBUaGlzIGRyaXZlcyBzdXBwb3J0cyBhbGwgU3lzS29ubmVjdCBJU0EgYW5kIFBDSSBhZGFwdGVycy4gQ2hvb3NlIHRoaXMKK29wdGlvbi4gSSBwZXJzb25hbGx5IHJlY29tbWVuZCBjb21waWxpbmcgdGhlIGRyaXZlciBhcyBhIG1vZHVsZSAoTSksIGJ1dCBpZiB5b3UKK3lvdSB3b3VsZCBsaWtlIHRvIGNvbXBpbGUgaXQgc3RhdGljbHkgYW5zd2VyIFkgaW5zdGVhZC4KKworVGhpcyBkcml2ZXIgc3VwcG9ydHMgbXVsdGlwbGUgYWRhcHRlcnMgd2l0aG91dCB0aGUgbmVlZCB0byBsb2FkIG11bHRpcGxlIGNvcGllcworb2YgdGhlIGRyaXZlci4gWW91IHNob3VsZCBiZSBhYmxlIHRvIGxvYWQgdXAgdG8gNyBhZGFwdGVycyB3aXRob3V0IGFueSBrZXJuZWwKK21vZGlmaWNhdGlvbnMsIGlmIHlvdSBhcmUgaW4gbmVlZCBvZiBtb3JlIHBsZWFzZSBjb250YWN0IHRoZSBtYWludGFpbmVyIG9mIHRoaXMKK2RyaXZlci4KKworTG9hZCB0aGUgZHJpdmVyIGVpdGhlciBieSBsaWxvL2xvYWRsaW4gb3IgYXMgYSBtb2R1bGUuIFdoZW4gYSBtb2R1bGUgdXNpbmcgdGhlCitmb2xsb3dpbmcgY29tbWFuZCB3aWxsIHN1ZmZpY2UgZm9yIG1vc3Q6CisKKyMgbW9kcHJvYmUgc2t0cgorCitUaGlzIHdpbGwgcHJvZHVjZSBvdXRwdXQgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nOiAoT3V0cHV0IGlzIHVzZXIgc3BlY2lmaWMpCisKK3NrdHIuYzogdjEuMDEgMDgvMjkvOTcgYnkgQ2hyaXN0b3BoIEdvb3MKK3RyMDogU0sgTkVUIFRSIDQvMTYgUENJIGZvdW5kIGF0IDB4NjEwMCwgdXNpbmcgSVJRIDE3LgordHIxOiBTSyBORVQgVFIgNC8xNiBQQ0kgZm91bmQgYXQgMHg2MjAwLCB1c2luZyBJUlEgMTYuCit0cjI6IFNLIE5FVCBUUiA0LzE2IElTQSBmb3VuZCBhdCAweGEyMCwgdXNpbmcgSVJRIDEwIGFuZCBETUEgNS4KKworTm93IGp1c3Qgc2V0dXAgdGhlIGRldmljZSB2aWEgaWZjb25maWcgYW5kIHNldCBhbmQgcm91dGVzIHlvdSBtYXkgaGF2ZS4gQWZ0ZXIKK3RoaXMgeW91IGFyZSByZWFkeSB0byBzdGFydCBzZW5kaW5nIHNvbWUgdG9rZW5zLgorCitFcnJhdGE6CitGb3IgYW55b25lIHdvbmRlcmluZyB3aGVyZSB0byBwaWNrIHVwIHRoZSBTeXNLb25uZWN0IGFkYXB0ZXJzIHBsZWFzZSBicm93c2UKK3RvIGh0dHA6Ly93d3cuc3lza29ubmVjdC5jb20KKworVGhpcyBkcml2ZXIgaXMgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBJdHMgRmlybXdhcmUgaW1hZ2UgaXMgCitpbmNsdWRlZCBhcyBhbiBpbml0aWFsaXplZCBDLWFycmF5IGFuZCBpcyBsaWNlbnNlZCBieSBTeXNLb25uZWN0IHRvIHRoZSBMaW51eCAKK3VzZXJzIG9mIHRoaXMgZHJpdmVyLiBIb3dldmVyIG5vIHdhcnJhbnR5IGFib3V0IGl0cyBmaXRuZXNzIGlzIGV4cHJlc3NlZCBvciAKK2ltcGxpZWQgYnkgU3lzS29ubmVjdC4KKworQmVsb3cgZmluZCBhdHRhY2hlZCB0aGUgc2V0dGluZyBmb3IgdGhlIFNLIE5FVCBUUiA0LzE2IElTQSBhZGFwdGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgICAgICAgICAgICAqKiogICBDIE8gTiBUIEUgTiBUIFMgICAqKioKKyAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgICAgICAgICAgICAgICAxKSBMb2NhdGlvbiBvZiBESVAtU3dpdGNoIFcxCisgICAgICAgICAgICAgICAgMikgRGVmYXVsdCBzZXR0aW5ncworICAgICAgICAgICAgICAgIDMpIERJUC1Td2l0Y2ggVzEgZGVzY3JpcHRpb24KKworCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIENIQVBURVIgMSAgICAgTE9DQVRJT04gT0YgRElQLVNXSVRDSAorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitVxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEvwor/lXExMTExMS/ICAgICAgICAgICAgICAgICAgICAgICAgIFXExMTExL8gICAgICAgICAgICBVxMTEvyAgICAgICAgIP4KK/5BxMTExMTEVSAgICAgICAgICAgICAgICAgICAgICBXMSBBxMTExMRVICAgICBVxMTExL8g/iAgIP4gICAgICAgICD+Civ+VcTExMTExL8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg/iAgICD+IP4gICD+ICAgICAgVcTExb8KK/5BxMTExMTEVSAgICAgICAgICAgICAgVcTExMTExMTExMTEvyAgICAgICAgICBBxMTExFUg/iAgIP4gICAgICD+ICD+/gor/lXExMTExMS/ICAgICAgICAgICAgICD+ICAgICAgICAgICD+ICAgICAgICAgIFXExMS/ICBBxMTEVSAgICAgIEHExMVVCiv+QcTExMTExFUgICAgICAgICAgICAgIP4gVE1TMzgwQzI2IP4gICAgICAgICAg/iAgIP4gICAgICAgICAgICAgICAg/gor/lXExMTExMS/ICAgICAgICAgICAgICD+ICAgICAgICAgICD+ICAgICAgICAgIEHExMRVICAgICAgICAgICAgICAgIEHEvwor/kHExMTExMRVICAgICAgICAgICAgICD+ICAgICAgICAgICD+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIP4g/gor/iAgICAgICAgICAgICAgICAgICAgICBBxMTExMTExMTExMRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIP4g/gor/iAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIP4g/gor/iAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEHEVQor/iAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIP4KK/4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICD+Civ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg/gor/iAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIP4KK0HExMTExMTExMTExMRBxMTExMTExMTExMTExMTExEHExEHExMTExMTExMTExMTExMTExMTExMTExEHExMTExMTExMRVCisgICAgICAgICAgICAgQcTExMTExMTExMTExMTExMRVICBBxMTExMTExMTExMTExMTExMTExMTExMRVCisKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgQ0hBUFRFUiAyICAgICBERUZBVUxUIFNFVFRJTkdTCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgICAgICBXMSAgICAxICAyICAzICA0ICA1ICA2ICA3ICA4CisgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgIHwgT04gICAgWCAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgIHwgT0ZGICAgICAgWCAgWCAgWCAgWCAgWCAgWCAgWCB8CisgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgICAgICAgVzEuMSA9IE9OICAgICAgICAgICAgICAgQWRhcHRlciBkcml2ZXMgYWRkcmVzcyBsaW5lcyBTQTE3Li4xOQorICAgICAgICBXMS4yIC0gMS41ID0gT0ZGICAgICAgICBCb290Uk9NIGRpc2FibGVkCisgICAgICAgIFcxLjYgLSAxLjggPSBPRkYgICAgICAgIEkvTyBhZGRyZXNzIDBBMjBoCisKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgQ0hBUFRFUiAzICAgICBESVAgU1dJVENIIFcxIERFU0NSSVBUSU9OCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgIFXExMRBxMTEQcTExEHExMRBxMTEQcTExEHExMRBxMTEvyAgT04KKyAgICAgIP4gMSD+IDIg/iAzIP4gNCD+IDUg/iA2IP4gNyD+IDgg/gorICAgICAgQcTExEHExMRBxMTEQcTExEHExMRBxMTEQcTExEHExMRVICBPRkYKKyAgICAgIHxBRCB8IEJvb3RST00gQWRkci4gfCAgSS9PICAgICAgfAorICAgICAgKy0rLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0rLS0tLS0rCisgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgIHwKKyAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgICAgKy0tLS0tLSA2ICAgICA3ICAgICA4CisgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgT04gICAgT04gICAgT04gICAgICAgMTkwMGgKKyAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICBPTiAgICBPTiAgICBPRkYgICAgICAwOTAwaAorICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIE9OICAgIE9GRiAgIE9OICAgICAgIDE5ODBoCisgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgT04gICAgT0ZGICAgT0ZGICAgICAgMDk4MGgKKyAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICBPRkYgICBPTiAgICBPTiAgICAgICAxYjIwaAorICAgICAgICB8ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIE9GRiAgIE9OICAgIE9GRiAgICAgIDBiMjBoCisgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgT0ZGICAgT0ZGICAgT04gICAgICAgMWEyMGgKKyAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICBPRkYgICBPRkYgICBPRkYgICAgICAwYTIwaCAgICAoKykKKyAgICAgICAgfCAgICAgICAgIHwKKyAgICAgICAgfCAgICAgICAgIHwKKyAgICAgICAgfCAgICAgICAgICstLS0tLS0tLSAyICAgICAzICAgICA0ICAgICA1CisgICAgICAgIHwgICAgICAgICAgICAgICAgICAgT0ZGICAgeCAgICAgeCAgICAgeCAgICAgICBkaXNhYmxlZCAgKCspCisgICAgICAgIHwgICAgICAgICAgICAgICAgICAgT04gICAgT04gICAgT04gICAgT04gICAgICBDMDAwMAorICAgICAgICB8ICAgICAgICAgICAgICAgICAgIE9OICAgIE9OICAgIE9OICAgIE9GRiAgICAgQzQwMDAKKyAgICAgICAgfCAgICAgICAgICAgICAgICAgICBPTiAgICBPTiAgICBPRkYgICBPTiAgICAgIEM4MDAwCisgICAgICAgIHwgICAgICAgICAgICAgICAgICAgT04gICAgT04gICAgT0ZGICAgT0ZGICAgICBDQzAwMAorICAgICAgICB8ICAgICAgICAgICAgICAgICAgIE9OICAgIE9GRiAgIE9OICAgIE9OICAgICAgRDAwMDAKKyAgICAgICAgfCAgICAgICAgICAgICAgICAgICBPTiAgICBPRkYgICBPTiAgICBPRkYgICAgIEQ0MDAwCisgICAgICAgIHwgICAgICAgICAgICAgICAgICAgT04gICAgT0ZGICAgT0ZGICAgT04gICAgICBEODAwMAorICAgICAgICB8ICAgICAgICAgICAgICAgICAgIE9OICAgIE9GRiAgIE9GRiAgIE9GRiAgICAgREMwMDAKKyAgICAgICAgfAorICAgICAgICB8CisgICAgICAgICstLS0tLSAxCisgICAgICAgICAgICAgICBPRkYgICAgYWRhcHRlciBkb2VzIE5PVCBkcml2ZSBTQTwxNy4uMTk+CisgICAgICAgICAgICAgICBPTiAgICAgYWRhcHRlciBkcml2ZXMgU0E8MTcuLjE5PiAgKCspCisKKworICAgICAgICAoKykgbWVhbnMgZGVmYXVsdCBzZXR0aW5nCisKKyAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3R1bnRhcC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMzZDEwOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90dW50YXAudHh0CkBAIC0wLDAgKzEsMTQ3IEBACitVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyLgorQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgTWF4aW0gS3Jhc255YW5za3kgPG1heF9ta0B5YWhvby5jb20+CisKKyAgTGludXgsIFNvbGFyaXMgZHJpdmVycyAKKyAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgTWF4aW0gS3Jhc255YW5za3kgPG1heF9ta0B5YWhvby5jb20+CisKKyAgRnJlZUJTRCBUQVAgZHJpdmVyIAorICBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMCBNYWtzaW0gWWV2bWVua2luIDxtX2V2bWVua2luQHlhaG9vLmNvbT4KKworICBSZXZpc2lvbiBvZiB0aGlzIGRvY3VtZW50IDIwMDIgYnkgRmxvcmlhbiBUaGllbCA8Zmxvcmlhbi50aGllbEBnbXgubmV0PgorCisxLiBEZXNjcmlwdGlvbgorICBUVU4vVEFQIHByb3ZpZGVzIHBhY2tldCByZWNlcHRpb24gYW5kIHRyYW5zbWlzc2lvbiBmb3IgdXNlciBzcGFjZSBwcm9ncmFtcy4gCisgIEl0IGNhbiBiZSBzZWVuIGFzIGEgc2ltcGxlIFBvaW50LXRvLVBvaW50IG9yIEV0aGVybmV0IGRldmljZSwgd2hpY2gsCisgIGluc3RlYWQgb2YgcmVjZWl2aW5nIHBhY2tldHMgZnJvbSBwaHlzaWNhbCBtZWRpYSwgcmVjZWl2ZXMgdGhlbSBmcm9tIAorICB1c2VyIHNwYWNlIHByb2dyYW0gYW5kIGluc3RlYWQgb2Ygc2VuZGluZyBwYWNrZXRzIHZpYSBwaHlzaWNhbCBtZWRpYSAKKyAgd3JpdGVzIHRoZW0gdG8gdGhlIHVzZXIgc3BhY2UgcHJvZ3JhbS4gCisKKyAgSW4gb3JkZXIgdG8gdXNlIHRoZSBkcml2ZXIgYSBwcm9ncmFtIGhhcyB0byBvcGVuIC9kZXYvbmV0L3R1biBhbmQgaXNzdWUgYQorICBjb3JyZXNwb25kaW5nIGlvY3RsKCkgdG8gcmVnaXN0ZXIgYSBuZXR3b3JrIGRldmljZSB3aXRoIHRoZSBrZXJuZWwuIEEgbmV0d29yaworICBkZXZpY2Ugd2lsbCBhcHBlYXIgYXMgdHVuWFggb3IgdGFwWFgsIGRlcGVuZGluZyBvbiB0aGUgb3B0aW9ucyBjaG9zZW4uIFdoZW4KKyAgdGhlIHByb2dyYW0gY2xvc2VzIHRoZSBmaWxlIGRlc2NyaXB0b3IsIHRoZSBuZXR3b3JrIGRldmljZSBhbmQgYWxsCisgIGNvcnJlc3BvbmRpbmcgcm91dGVzIHdpbGwgZGlzYXBwZWFyLgorCisgIERlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBkZXZpY2UgY2hvc2VuIHRoZSB1c2Vyc3BhY2UgcHJvZ3JhbSBoYXMgdG8gcmVhZC93cml0ZQorICBJUCBwYWNrZXRzICh3aXRoIHR1bikgb3IgZXRoZXJuZXQgZnJhbWVzICh3aXRoIHRhcCkuIFdoaWNoIG9uZSBpcyBiZWluZyB1c2VkCisgIGRlcGVuZHMgb24gdGhlIGZsYWdzIGdpdmVuIHdpdGggdGhlIGlvY3RsKCkuCisKKyAgVGhlIHBhY2thZ2UgZnJvbSBodHRwOi8vdnR1bi5zb3VyY2Vmb3JnZS5uZXQvdHVuIGNvbnRhaW5zIHR3byBzaW1wbGUgZXhhbXBsZXMKKyAgZm9yIGhvdyB0byB1c2UgdHVuIGFuZCB0YXAgZGV2aWNlcy4gQm90aCBwcm9ncmFtcyB3b3JrIGxpa2UgYSBicmlkZ2UgYmV0d2VlbgorICB0d28gbmV0d29yayBpbnRlcmZhY2VzLgorICBicl9zZWxlY3QuYyAtIGJyaWRnZSBiYXNlZCBvbiBzZWxlY3Qgc3lzdGVtIGNhbGwuCisgIGJyX3NpZ2lvLmMgIC0gYnJpZGdlIGJhc2VkIG9uIGFzeW5jIGlvIGFuZCBTSUdJTyBzaWduYWwuCisgIEhvd2V2ZXIsIHRoZSBiZXN0IGV4YW1wbGUgaXMgVlR1biBodHRwOi8vdnR1bi5zb3VyY2Vmb3JnZS5uZXQgOikpCisKKzIuIENvbmZpZ3VyYXRpb24gCisgIENyZWF0ZSBkZXZpY2Ugbm9kZToKKyAgICAgbWtkaXIgL2Rldi9uZXQgKGlmIGl0IGRvZXNuJ3QgZXhpc3QgYWxyZWFkeSkKKyAgICAgbWtub2QgL2Rldi9uZXQvdHVuIGMgMTAgMjAwCisgIAorICBTZXQgcGVybWlzc2lvbnM6CisgICAgIGUuZy4gY2htb2QgMDcwMCAvZGV2L25ldC90dW4KKyAgICAgaWYgeW91IHdhbnQgdGhlIGRldmljZSBvbmx5IGFjY2Vzc2libGUgYnkgcm9vdC4gR2l2aW5nIHJlZ3VsYXIgdXNlcnMgdGhlCisgICAgIHJpZ2h0IHRvIGFzc2lnbiBuZXR3b3JrIGRldmljZXMgaXMgTk9UIGEgZ29vZCBpZGVhLiBVc2VycyBjb3VsZCBhc3NpZ24KKyAgICAgYm9ndXMgbmV0d29yayBpbnRlcmZhY2VzIHRvIHRyaWNrIGZpcmV3YWxscyBvciBhZG1pbmlzdHJhdG9ycy4KKworICBEcml2ZXIgbW9kdWxlIGF1dG9sb2FkaW5nCisKKyAgICAgTWFrZSBzdXJlIHRoYXQgIktlcm5lbCBtb2R1bGUgbG9hZGVyIiAtIG1vZHVsZSBhdXRvLWxvYWRpbmcKKyAgICAgc3VwcG9ydCBpcyBlbmFibGVkIGluIHlvdXIga2VybmVsLiAgVGhlIGtlcm5lbCBzaG91bGQgbG9hZCBpdCBvbgorICAgICBmaXJzdCBhY2Nlc3MuCisgIAorICBNYW51YWwgbG9hZGluZyAKKyAgICAgaW5zZXJ0IHRoZSBtb2R1bGUgYnkgaGFuZDoKKyAgICAgICAgbW9kcHJvYmUgdHVuCisKKyAgSWYgeW91IGRvIGl0IHRoZSBsYXR0ZXIgd2F5LCB5b3UgaGF2ZSB0byBsb2FkIHRoZSBtb2R1bGUgZXZlcnkgdGltZSB5b3UKKyAgbmVlZCBpdCwgaWYgeW91IGRvIGl0IHRoZSBvdGhlciB3YXkgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGxvYWRlZCB3aGVuCisgIC9kZXYvbmV0L3R1biBpcyBiZWluZyBvcGVuZWQuCisKKzMuIFByb2dyYW0gaW50ZXJmYWNlIAorICAzLjEgTmV0d29yayBkZXZpY2UgYWxsb2NhdGlvbjoKKworICBjaGFyICpkZXYgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIHRoZSBkZXZpY2Ugd2l0aCBhIGZvcm1hdCBzdHJpbmcgKGUuZy4KKyAgInR1biVkIiksIGJ1dCAoYXMgZmFyIGFzIEkgY2FuIHNlZSkgdGhpcyBjYW4gYmUgYW55IHZhbGlkIG5ldHdvcmsgZGV2aWNlIG5hbWUuCisgIE5vdGUgdGhhdCB0aGUgY2hhcmFjdGVyIHBvaW50ZXIgYmVjb21lcyBvdmVyd3JpdHRlbiB3aXRoIHRoZSByZWFsIGRldmljZSBuYW1lCisgIChlLmcuICJ0dW4wIikKKworICAjaW5jbHVkZSA8bGludXgvaWYuaD4KKyAgI2luY2x1ZGUgPGxpbnV4L2lmX3R1bi5oPgorCisgIGludCB0dW5fYWxsb2MoY2hhciAqZGV2KQorICB7CisgICAgICBzdHJ1Y3QgaWZyZXEgaWZyOworICAgICAgaW50IGZkLCBlcnI7CisKKyAgICAgIGlmKCAoZmQgPSBvcGVuKCIvZGV2L25ldC90dW4iLCBPX1JEV1IpKSA8IDAgKQorICAgICAgICAgcmV0dXJuIHR1bl9hbGxvY19vbGQoZGV2KTsKKworICAgICAgbWVtc2V0KCZpZnIsIDAsIHNpemVvZihpZnIpKTsKKworICAgICAgLyogRmxhZ3M6IElGRl9UVU4gICAtIFRVTiBkZXZpY2UgKG5vIEV0aGVybmV0IGhlYWRlcnMpIAorICAgICAgICogICAgICAgIElGRl9UQVAgICAtIFRBUCBkZXZpY2UgIAorICAgICAgICoKKyAgICAgICAqICAgICAgICBJRkZfTk9fUEkgLSBEbyBub3QgcHJvdmlkZSBwYWNrZXQgaW5mb3JtYXRpb24gIAorICAgICAgICovIAorICAgICAgaWZyLmlmcl9mbGFncyA9IElGRl9UVU47IAorICAgICAgaWYoICpkZXYgKQorICAgICAgICAgc3RybmNweShpZnIuaWZyX25hbWUsIGRldiwgSUZOQU1TSVopOworCisgICAgICBpZiggKGVyciA9IGlvY3RsKGZkLCBUVU5TRVRJRkYsICh2b2lkICopICZpZnIpKSA8IDAgKXsKKyAgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgIHJldHVybiBlcnI7CisgICAgICB9CisgICAgICBzdHJjcHkoZGV2LCBpZnIuaWZyX25hbWUpOworICAgICAgcmV0dXJuIGZkOworICB9ICAgICAgICAgICAgICAKKyAKKyAgMy4yIEZyYW1lIGZvcm1hdDoKKyAgSWYgZmxhZyBJRkZfTk9fUEkgaXMgbm90IHNldCBlYWNoIGZyYW1lIGZvcm1hdCBpczogCisgICAgIEZsYWdzIFsyIGJ5dGVzXQorICAgICBQcm90byBbMiBieXRlc10KKyAgICAgUmF3IHByb3RvY29sKElQLCBJUHY2LCBldGMpIGZyYW1lLgorCitVbml2ZXJzYWwgVFVOL1RBUCBkZXZpY2UgZHJpdmVyIEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb24uCisgICAKKzEuIFdoYXQgcGxhdGZvcm1zIGFyZSBzdXBwb3J0ZWQgYnkgVFVOL1RBUCBkcml2ZXIgPworQ3VycmVudGx5IGRyaXZlciBoYXMgYmVlbiB3cml0dGVuIGZvciAzIFVuaWNlczoKKyAgIExpbnV4IGtlcm5lbHMgMi4yLngsIDIuNC54IAorICAgRnJlZUJTRCAzLngsIDQueCwgNS54CisgICBTb2xhcmlzIDIuNiwgNy4wLCA4LjAKKworMi4gV2hhdCBpcyBUVU4vVEFQIGRyaXZlciB1c2VkIGZvcj8KK0FzIG1lbnRpb25lZCBhYm92ZSwgbWFpbiBwdXJwb3NlIG9mIFRVTi9UQVAgZHJpdmVyIGlzIHR1bm5lbGluZy4gCitJdCBpcyB1c2VkIGJ5IFZUdW4gKGh0dHA6Ly92dHVuLnNvdXJjZWZvcmdlLm5ldCkuCisKK0Fub3RoZXIgaW50ZXJlc3RpbmcgYXBwbGljYXRpb24gdXNpbmcgVFVOL1RBUCBpcyBwaXBzZWNkCisoaHR0cDovL3BlcnNvLmVuc3QuZnIvfmJleXNzYWMvcGlwc2VjLyksIGFuIHVzZXJzcGFjZSBJUFNlYworaW1wbGVtZW50YXRpb24gdGhhdCBjYW4gdXNlIGNvbXBsZXRlIGtlcm5lbCByb3V0aW5nICh1bmxpa2UgRnJlZVMvV0FOKS4KKworMy4gSG93IGRvZXMgVmlydHVhbCBuZXR3b3JrIGRldmljZSBhY3R1YWxseSB3b3JrID8gCitWaXJ0dWFsIG5ldHdvcmsgZGV2aWNlIGNhbiBiZSB2aWV3ZWQgYXMgYSBzaW1wbGUgUG9pbnQtdG8tUG9pbnQgb3IKK0V0aGVybmV0IGRldmljZSwgd2hpY2ggaW5zdGVhZCBvZiByZWNlaXZpbmcgcGFja2V0cyBmcm9tIGEgcGh5c2ljYWwgCittZWRpYSwgcmVjZWl2ZXMgdGhlbSBmcm9tIHVzZXIgc3BhY2UgcHJvZ3JhbSBhbmQgaW5zdGVhZCBvZiBzZW5kaW5nIAorcGFja2V0cyB2aWEgcGh5c2ljYWwgbWVkaWEgc2VuZHMgdGhlbSB0byB0aGUgdXNlciBzcGFjZSBwcm9ncmFtLiAKKworTGV0J3Mgc2F5IHRoYXQgeW91IGNvbmZpZ3VyZWQgSVBYIG9uIHRoZSB0YXAwLCB0aGVuIHdoZW5ldmVyIAordGhlIGtlcm5lbCBzZW5kcyBhbiBJUFggcGFja2V0IHRvIHRhcDAsIGl0IGlzIHBhc3NlZCB0byB0aGUgYXBwbGljYXRpb24KKyhWVHVuIGZvciBleGFtcGxlKS4gVGhlIGFwcGxpY2F0aW9uIGVuY3J5cHRzLCBjb21wcmVzc2VzIGFuZCBzZW5kcyBpdCB0byAKK3RoZSBvdGhlciBzaWRlIG92ZXIgVENQIG9yIFVEUC4gVGhlIGFwcGxpY2F0aW9uIG9uIHRoZSBvdGhlciBzaWRlIGRlY29tcHJlc3NlcworYW5kIGRlY3J5cHRzIHRoZSBkYXRhIHJlY2VpdmVkIGFuZCB3cml0ZXMgdGhlIHBhY2tldCB0byB0aGUgVEFQIGRldmljZSwgCit0aGUga2VybmVsIGhhbmRsZXMgdGhlIHBhY2tldCBsaWtlIGl0IGNhbWUgZnJvbSByZWFsIHBoeXNpY2FsIGRldmljZS4KKworNC4gV2hhdCBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIFRVTiBkcml2ZXIgYW5kIFRBUCBkcml2ZXI/CitUVU4gd29ya3Mgd2l0aCBJUCBmcmFtZXMuIFRBUCB3b3JrcyB3aXRoIEV0aGVybmV0IGZyYW1lcy4KKworVGhpcyBtZWFucyB0aGF0IHlvdSBoYXZlIHRvIHJlYWQvd3JpdGUgSVAgcGFja2V0cyB3aGVuIHlvdSBhcmUgdXNpbmcgdHVuIGFuZAorZXRoZXJuZXQgZnJhbWVzIHdoZW4gdXNpbmcgdGFwLgorCis1LiBXaGF0IGlzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gQlBGIGFuZCBUVU4vVEFQIGRyaXZlcj8KK0JGUCBpcyBhbiBhZHZhbmNlZCBwYWNrZXQgZmlsdGVyLiBJdCBjYW4gYmUgYXR0YWNoZWQgdG8gZXhpc3RpbmcKK25ldHdvcmsgaW50ZXJmYWNlLiBJdCBkb2VzIG5vdCBwcm92aWRlIGEgdmlydHVhbCBuZXR3b3JrIGludGVyZmFjZS4KK0EgVFVOL1RBUCBkcml2ZXIgZG9lcyBwcm92aWRlIGEgdmlydHVhbCBuZXR3b3JrIGludGVyZmFjZSBhbmQgaXQgaXMgcG9zc2libGUKK3RvIGF0dGFjaCBCUEYgdG8gdGhpcyBpbnRlcmZhY2UuCisKKzYuIERvZXMgVEFQIGRyaXZlciBzdXBwb3J0IGtlcm5lbCBFdGhlcm5ldCBicmlkZ2luZz8KK1llcy4gTGludXggYW5kIEZyZWVCU0QgZHJpdmVycyBzdXBwb3J0IEV0aGVybmV0IGJyaWRnaW5nLiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy92b3J0ZXgudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3ZvcnRleC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmExMmE5ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy92b3J0ZXgudHh0CkBAIC0wLDAgKzEsNDUwIEBACitEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdm9ydGV4LnR4dAorQW5kcmV3IE1vcnRvbiA8YW5kcmV3bUB1b3cuZWR1LmF1PgorMzAgQXByaWwgMjAwMAorCisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSB1c2FnZSBhbmQgZXJyYXRhIG9mIHRoZSAzQ29tICJWb3J0ZXgiIGRldmljZQorZHJpdmVyIGZvciBMaW51eCwgM2M1OXguYy4KKworVGhlIGRyaXZlciB3YXMgd3JpdHRlbiBieSBEb25hbGQgQmVja2VyIDxiZWNrZXJAc2N5bGQuY29tPgorCitEb24gaXMgbm8gbG9uZ2VyIHRoZSBwcmltZSBtYWludGFpbmVyIG9mIHRoaXMgdmVyc2lvbiBvZiB0aGUgZHJpdmVyLiAKK1BsZWFzZSByZXBvcnQgcHJvYmxlbXMgdG8gb25lIG9yIG1vcmUgb2Y6CisKKyAgQW5kcmV3IE1vcnRvbiA8YW5kcmV3bUB1b3cuZWR1LmF1PgorICBOZXRkZXYgbWFpbGluZyBsaXN0IDxuZXRkZXZAb3NzLnNnaS5jb20+CisgIExpbnV4IGtlcm5lbCBtYWlsaW5nIGxpc3QgPGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc+CisKK1BsZWFzZSBub3RlIHRoZSAnUmVwb3J0aW5nIGFuZCBEaWFnbm9zaW5nIFByb2JsZW1zJyBzZWN0aW9uIGF0IHRoZSBlbmQKK29mIHRoaXMgZmlsZS4KKworCitTaW5jZSBrZXJuZWwgMi4zLjk5LXByZTYsIHRoaXMgZHJpdmVyIGluY29ycG9yYXRlcyB0aGUgc3VwcG9ydCBmb3IgdGhlCiszYzU3NS1zZXJpZXMgQ2FyZGJ1cyBjYXJkcyB3aGljaCB1c2VkIHRvIGJlIGhhbmRsZWQgYnkgM2M1NzVfY2IuYy4KKworVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBoYXJkd2FyZToKKworICAgM2M1OTAgVm9ydGV4IDEwTWJwcworICAgM2M1OTIgRUlTQSAxMG1icHMgRGVtb24vVm9ydGV4CisgICAzYzU5NyBFSVNBIEZhc3QgRGVtb24vVm9ydGV4CisgICAzYzU5NSBWb3J0ZXggMTAwYmFzZVR4CisgICAzYzU5NSBWb3J0ZXggMTAwYmFzZVQ0CisgICAzYzU5NSBWb3J0ZXggMTAwYmFzZS1NSUkKKyAgIDNDb20gVm9ydGV4CisgICAzYzkwMCBCb29tZXJhbmcgMTBiYXNlVAorICAgM2M5MDAgQm9vbWVyYW5nIDEwTWJwcyBDb21ibworICAgM2M5MDAgQ3ljbG9uZSAxME1icHMgVFBPCisgICAzYzkwMEIgQ3ljbG9uZSAxME1icHMgVAorICAgM2M5MDAgQ3ljbG9uZSAxME1icHMgQ29tYm8KKyAgIDNjOTAwIEN5Y2xvbmUgMTBNYnBzIFRQQworICAgM2M5MDBCLUZMIEN5Y2xvbmUgMTBiYXNlLUZMCisgICAzYzkwNSBCb29tZXJhbmcgMTAwYmFzZVR4CisgICAzYzkwNSBCb29tZXJhbmcgMTAwYmFzZVQ0CisgICAzYzkwNUIgQ3ljbG9uZSAxMDBiYXNlVHgKKyAgIDNjOTA1QiBDeWNsb25lIDEwLzEwMC9CTkMKKyAgIDNjOTA1Qi1GWCBDeWNsb25lIDEwMGJhc2VGeAorICAgM2M5MDVDIFRvcm5hZG8KKyAgIDNjOTgwIEN5Y2xvbmUKKyAgIDNjU09ITzEwMC1UWCBIdXJyaWNhbmUKKyAgIDNjNTU1IExhcHRvcCBIdXJyaWNhbmUKKyAgIDNjNTc1IEJvb21lcmFuZyBDYXJkQnVzCisgICAzQ0NGRTU3NSBDeWNsb25lIENhcmRCdXMKKyAgIDNDQ0ZFNTc1Q1QgQ3ljbG9uZSBDYXJkQnVzCisgICAzQ0NGRTY1NiBDeWNsb25lIENhcmRCdXMKKyAgIDNDQ0ZFTTY1NiBDeWNsb25lIENhcmRCdXMKKyAgIDNjNDUwIEN5Y2xvbmUvdW5rbm93bgorCisKK01vZHVsZSBwYXJhbWV0ZXJzCis9PT09PT09PT09PT09PT09PQorCitUaGVyZSBhcmUgc2V2ZXJhbCBwYXJhbWV0ZXJzIHdoaWNoIG1heSBiZSBwcm92aWRlZCB0byB0aGUgZHJpdmVyIHdoZW4KK2l0cyBtb2R1bGUgaXMgbG9hZGVkLiAgVGhlc2UgYXJlIHVzdWFsbHkgcGxhY2VkIGluIC9ldGMvbW9kcHJvYmUuY29uZgorKC9ldGMvbW9kdWxlcy5jb25mIGluIDIuNCkuICBFeGFtcGxlOgorCitvcHRpb25zIDNjNTl4IGRlYnVnPTMgcnhfY29weWJyZWFrPTMwMAorCitJZiB5b3UgYXJlIHVzaW5nIHRoZSBQQ01DSUEgdG9vbHMgKGNhcmRtZ3IpIHRoZW4gdGhlIG9wdGlvbnMgbWF5IGJlCitwbGFjZWQgaW4gL2V0Yy9wY21jaWEvY29uZmlnLm9wdHM6CisKK21vZHVsZSAiM2M1OXgiIG9wdHMgImRlYnVnPTMgcnhfY29weWJyZWFrPTMwMCIKKworCitUaGUgc3VwcG9ydGVkIHBhcmFtZXRlcnMgYXJlOgorCitkZWJ1Zz1OCisKKyAgV2hlcmUgTiBpcyBhIG51bWJlciBmcm9tIDAgdG8gNy4gIEFueXRoaW5nIGFib3ZlIDMgcHJvZHVjZXMgYSBsb3QKKyAgb2Ygb3V0cHV0IGluIHlvdXIgc3lzdGVtIGxvZ3MuICBkZWJ1Zz0xIGlzIGRlZmF1bHQuCisKK29wdGlvbnM9TjEsTjIsTjMsLi4uCisKKyAgRWFjaCBudW1iZXIgaW4gdGhlIGxpc3QgcHJvdmlkZXMgYW4gb3B0aW9uIHRvIHRoZSBjb3JyZXNwb25kaW5nCisgIG5ldHdvcmsgY2FyZC4gIFNvIGlmIHlvdSBoYXZlIHR3byAzYzkwNSdzIGFuZCB5b3Ugd2lzaCB0byBwcm92aWRlCisgIHRoZW0gd2l0aCBvcHRpb24gMHgyMDQgeW91IHdvdWxkIHVzZToKKworICAgIG9wdGlvbnM9MHgyMDQsMHgyMDQKKworICBUaGUgaW5kaXZpZHVhbCBvcHRpb25zIGFyZSBjb21wb3NlZCBvZiBhIG51bWJlciBvZiBiaXRmaWVsZHMgd2hpY2gKKyAgaGF2ZSB0aGUgZm9sbG93aW5nIG1lYW5pbmdzOgorCisgIFBvc3NpYmxlIG1lZGlhIHR5cGUgc2V0dGluZ3MKKwkwCTEwYmFzZVQKKwkxCTEwTWJzIEFVSQorCTIJdW5kZWZpbmVkCisJMwkxMGJhc2UyIChCTkMpCisJNAkxMDBiYXNlLVRYCisJNQkxMDBiYXNlLUZYCisJNglNSUkgKE1lZGlhIEluZGVwZW5kZW50IEludGVyZmFjZSkKKwk3CVVzZSBkZWZhdWx0IHNldHRpbmcgZnJvbSBFRVBST00KKwk4ICAgICAgIEF1dG9uZWdvdGlhdGUKKwk5ICAgICAgIEV4dGVybmFsIE1JSQorCTEwICAgICAgVXNlIGRlZmF1bHQgc2V0dGluZyBmcm9tIEVFUFJPTQorCisgIFdoZW4gZ2VuZXJhdGluZyBhIHZhbHVlIGZvciB0aGUgJ29wdGlvbnMnIHNldHRpbmcsIHRoZSBhYm92ZSBtZWRpYQorICBzZWxlY3Rpb24gdmFsdWVzIG1heSBiZSBPUidlZCAob3IgYWRkZWQgdG8pIHRoZSBmb2xsb3dpbmc6CisKKyAgMHg4MDAwICBTZXQgZHJpdmVyIGRlYnVnZ2luZyBsZXZlbCB0byA3CisgIDB4NDAwMCAgU2V0IGRyaXZlciBkZWJ1Z2dpbmcgbGV2ZWwgdG8gMgorICAweDA0MDAgIEVuYWJsZSBXYWtlLW9uLUxBTgorICAweDAyMDAgIEZvcmNlIGZ1bGwgZHVwbGV4IG1vZGUuCisgIDB4MDAxMCAgQnVzLW1hc3RlciBlbmFibGUgYml0IChPbGQgVm9ydGV4IGNhcmRzIG9ubHkpCisKKyAgRm9yIGV4YW1wbGU6CisKKyAgICBpbnNtb2QgM2M1OXggb3B0aW9ucz0weDIwNAorCisgIHdpbGwgZm9yY2UgZnVsbC1kdXBsZXggMTAwYmFzZS1UWCwgcmF0aGVyIHRoYW4gYWxsb3dpbmcgdGhlIHVzdWFsCisgIGF1dG9uZWdvdGlhdGlvbi4KKworZ2xvYmFsX29wdGlvbnM9TgorCisgIFNldHMgdGhlIGBvcHRpb25zJyBwYXJhbWV0ZXIgZm9yIGFsbCAzYzU5eCBOSUNzIGluIHRoZSBtYWNoaW5lLiAKKyAgRW50cmllcyBpbiB0aGUgYG9wdGlvbnMnIGFycmF5IGFib3ZlIHdpbGwgb3ZlcnJpZGUgYW55IHNldHRpbmcgb2YKKyAgdGhpcy4KKworZnVsbF9kdXBsZXg9TjEsTjIsTjMuLi4KKworICBTaW1pbGFyIHRvIGJpdCA5IG9mICdvcHRpb25zJy4gIEZvcmNlcyB0aGUgY29ycmVzcG9uZGluZyBjYXJkIGludG8KKyAgZnVsbC1kdXBsZXggbW9kZS4gIFBsZWFzZSB1c2UgdGhpcyBpbiBwcmVmZXJlbmNlIHRvIHRoZSBgb3B0aW9ucycKKyAgcGFyYW1ldGVyLgorCisgIEluIGZhY3QsIHBsZWFzZSBkb24ndCB1c2UgdGhpcyBhdCBhbGwhIFlvdSdyZSBiZXR0ZXIgb2ZmIGdldHRpbmcKKyAgYXV0b25lZ290aWF0aW9uIHdvcmtpbmcgcHJvcGVybHkuCisKK2dsb2JhbF9mdWxsX2R1cGxleD1OMQorCisgIFNldHMgZnVsbCBkdXBsZXggbW9kZSBmb3IgYWxsIDNjNTl4IE5JQ3MgaW4gdGhlIG1hY2hpbmUuICBFbnRyaWVzCisgIGluIHRoZSBgZnVsbF9kdXBsZXgnIGFycmF5IGFib3ZlIHdpbGwgb3ZlcnJpZGUgYW55IHNldHRpbmcgb2YgdGhpcy4KKworZmxvd19jdHJsPU4xLE4yLE4zLi4uCisKKyAgVXNlIDgwMi4zeCBNQUMtbGF5ZXIgZmxvdyBjb250cm9sLiAgVGhlIDNjb20gY2FyZHMgb25seSBzdXBwb3J0IHRoZQorICBQQVVTRSBjb21tYW5kLCB3aGljaCBtZWFucyB0aGF0IHRoZXkgd2lsbCBzdG9wIHNlbmRpbmcgcGFja2V0cyBmb3IgYQorICBzaG9ydCBwZXJpb2QgaWYgdGhleSByZWNlaXZlIGEgUEFVU0UgZnJhbWUgZnJvbSB0aGUgbGluayBwYXJ0bmVyLiAKKworICBUaGUgZHJpdmVyIG9ubHkgYWxsb3dzIGZsb3cgY29udHJvbCBvbiBhIGxpbmsgd2hpY2ggaXMgb3BlcmF0aW5nIGluCisgIGZ1bGwgZHVwbGV4IG1vZGUuCisKKyAgVGhpcyBmZWF0dXJlIGRvZXMgbm90IGFwcGVhciB0byB3b3JrIG9uIHRoZSAzYzkwNSAtIG9ubHkgM2M5MDVCIGFuZAorICAzYzkwNUMgaGF2ZSBiZWVuIHRlc3RlZC4KKworICBUaGUgM2NvbSBjYXJkcyBhcHBlYXIgdG8gb25seSByZXNwb25kIHRvIFBBVVNFIGZyYW1lcyB3aGljaCBhcmUKKyAgc2VudCB0byB0aGUgcmVzZXJ2ZWQgZGVzdGluYXRpb24gYWRkcmVzcyBvZiAwMTo4MDpjMjowMDowMDowMS4gIFRoZXkKKyAgZG8gbm90IGhvbm91ciBQQVVTRSBmcmFtZXMgd2hpY2ggYXJlIHNlbnQgdG8gdGhlIHN0YXRpb24gTUFDIGFkZHJlc3MuCisKK3J4X2NvcHlicmVhaz1NCisKKyAgVGhlIGRyaXZlciBwcmVhbGxvY2F0ZXMgMzIgZnVsbC1zaXplZCAoMTUzNiBieXRlKSBuZXR3b3JrIGJ1ZmZlcnMKKyAgZm9yIHJlY2VpdmluZy4gIFdoZW4gYSBwYWNrZXQgYXJyaXZlcywgdGhlIGRyaXZlciBoYXMgdG8gZGVjaWRlCisgIHdoZXRoZXIgdG8gbGVhdmUgdGhlIHBhY2tldCBpbiBpdHMgZnVsbC1zaXplZCBidWZmZXIsIG9yIHRvIGFsbG9jYXRlCisgIGEgc21hbGxlciBidWZmZXIgYW5kIGNvcHkgdGhlIHBhY2tldCBhY3Jvc3MgaW50byBpdC4KKworICBUaGlzIGlzIGEgc3BlZWQvc3BhY2UgdHJhZGVvZmYuCisKKyAgVGhlIHZhbHVlIG9mIHJ4X2NvcHlicmVhayBpcyB1c2VkIHRvIGRlY2lkZSB3aGVuIHRvIG1ha2UgdGhlIGNvcHkuIAorICBJZiB0aGUgcGFja2V0IHNpemUgaXMgbGVzcyB0aGFuIHJ4X2NvcHlicmVhaywgdGhlIHBhY2tldCBpcyBjb3BpZWQuIAorICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgcnhfY29weWJyZWFrIGlzIDIwMCBieXRlcy4KKworbWF4X2ludGVycnVwdF93b3JrPU4KKworICBUaGUgZHJpdmVyJ3MgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSBjYW4gaGFuZGxlIG1hbnkgcmVjZWl2ZSBhbmQKKyAgdHJhbnNtaXQgcGFja2V0cyBpbiBhIHNpbmdsZSBpbnZvY2F0aW9uLiAgSXQgZG9lcyB0aGlzIGluIGEgbG9vcC4gCisgIFRoZSB2YWx1ZSBvZiBtYXhfaW50ZXJydXB0X3dvcmsgZ292ZXJucyBob3cgbW5heSB0aW1lcyB0aGUgaW50ZXJydXB0CisgIHNlcnZpY2Ugcm91dGluZSB3aWxsIGxvb3AuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAzMiBsb29wcy4gIElmIHRoaXMKKyAgaXMgZXhjZWVkZWQgdGhlIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgZ2l2ZXMgdXAgYW5kIGdlbmVyYXRlcyBhCisgIHdhcm5pbmcgbWVzc2FnZSAiZXRoMDogVG9vIG11Y2ggd29yayBpbiBpbnRlcnJ1cHQiLgorCitod19jaGVja3N1bXM9TjEsTjIsTjMsLi4uCisKKyAgUmVjZW50IDNjb20gTklDcyBhcmUgYWJsZSB0byBnZW5lcmF0ZSBJUHY0LCBUQ1AgYW5kIFVEUCBjaGVja3N1bXMKKyAgaW4gaGFyZHdhcmUuICBMaW51eCBoYXMgdXNlZCB0aGUgUnggY2hlY2tzdW1taW5nIGZvciBhIGxvbmcgdGltZS4gCisgIFRoZSAiemVybyBjb3B5IiBwYXRjaCB3aGljaCBpcyBwbGFubmVkIGZvciB0aGUgMi40IGtlcm5lbCBzZXJpZXMKKyAgYWxsb3dzIHlvdSB0byBtYWtlIHVzZSBvZiB0aGUgTklDJ3MgRE1BIHNjYXR0ZXIvZ2F0aGVyIGFuZCB0cmFuc21pdAorICBjaGVja3N1bW1pbmcgYXMgd2VsbC4KKworICBUaGUgZHJpdmVyIGlzIHNldCB1cCBzbyB0aGF0LCB3aGVuIHRoZSB6ZXJvY29weSBwYXRjaCBpcyBhcHBsaWVkLAorICBhbGwgVG9ybmFkbyBhbmQgQ3ljbG9uZSBkZXZpY2VzIHdpbGwgdXNlIFMvRyBhbmQgVHggY2hlY2tzdW1zLgorCisgIFRoaXMgbW9kdWxlIHBhcmFtZXRlciBoYXMgYmVlbiBwcm92aWRlZCBzbyB5b3UgY2FuIG92ZXJyaWRlIHRoaXMKKyAgZGVjaXNpb24uICBJZiB5b3UgdGhpbmsgdGhhdCBUeCBjaGVja3N1bXMgYXJlIGNhdXNpbmcgYSBwcm9ibGVtLCB5b3UKKyAgbWF5IGRpc2FibGUgdGhlIGZlYXR1cmUgd2l0aCBgaHdfY2hlY2tzdW1zPTAnLgorCisgIElmIHlvdSB0aGluayB5b3VyIE5JQyBzaG91bGQgYmUgcGVyZm9ybWluZyBUeCBjaGVja3N1bW1pbmcgYW5kIHRoZQorICBkcml2ZXIgaXNuJ3QgZW5hYmxpbmcgaXQsIHlvdSBjYW4gZm9yY2UgdGhlIHVzZSBvZiBoYXJkd2FyZSBUeAorICBjaGVja3N1bW1pbmcgd2l0aCBgaHdfY2hlY2tzdW1zPTEnLgorCisgIFRoZSBkcml2ZXIgZHJvcHMgYSBtZXNzYWdlIGluIHRoZSBsb2dmaWxlcyB0byBpbmRpY2F0ZSB3aGV0aGVyIG9yCisgIG5vdCBpdCBpcyB1c2luZyBoYXJkd2FyZSBzY2F0dGVyL2dhdGhlciBhbmQgaGFyZHdhcmUgVHggY2hlY2tzdW1zLgorCisgIFNjYXR0ZXIvZ2F0aGVyIGFuZCBoYXJkd2FyZSBjaGVja3N1bXMgcHJvdmlkZSBjb25zaWRlcmFibGUKKyAgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgZm9yIHRoZSBzZW5kZmlsZSgpIHN5c3RlbSBjYWxsLCBidXQgYSBzbWFsbAorICBkZWNyZWFzZSBpbiB0aHJvdWdocHV0IGZvciBzZW5kKCkuICBUaGVyZSBpcyBubyBlZmZlY3QgdXBvbiByZWNlaXZlCisgIGVmZmljaWVuY3kuCisKK2NvbXBhcV9pb2FkZHI9TgorY29tcGFxX2lycT1OCitjb21wYXFfZGV2aWNlX2lkPU4KKworICAiVmFyaWFibGVzIHRvIHdvcmstYXJvdW5kIHRoZSBDb21wYXEgUENJIEJJT1MzMiBwcm9ibGVtIi4uLi4KKword2F0Y2hkb2c9TgorCisgIFNldHMgdGhlIHRpbWUgZHVyYXRpb24gKGluIG1pbGxpc2Vjb25kcykgYWZ0ZXIgd2hpY2ggdGhlIGtlcm5lbAorICBkZWNpZGVzIHRoYXQgdGhlIHRyYW5zbWl0dGVyIGhhcyBiZWNvbWUgc3R1Y2sgYW5kIG5lZWRzIHRvIGJlIHJlc2V0LiAKKyAgVGhpcyBpcyBtYWlubHkgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcywgYWx0aG91Z2ggaXQgbWF5IGJlIGFkdmFudGFnZW91cworICB0byBpbmNyZWFzZSB0aGlzIHZhbHVlIG9uIExBTnMgd2hpY2ggaGF2ZSB2ZXJ5IGhpZ2ggY29sbGlzaW9uIHJhdGVzLgorICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA1MDAwICg1LjAgc2Vjb25kcykuCisKK2VuYWJsZV93b2w9TjEsTjIsTjMsLi4uCisKKyAgRW5hYmxlIFdha2Utb24tTEFOIHN1cHBvcnQgZm9yIHRoZSByZWxldmFudCBpbnRlcmZhY2UuICBEb25hbGQKKyAgQmVja2VyJ3MgYGV0aGVyLXdha2UnIGFwcGxpY2F0aW9uIG1heSBiZSB1c2VkIHRvIHdha2Ugc3VzcGVuZGVkCisgIG1hY2hpbmVzLgorCisgIEFsc28gZW5hYmxlcyB0aGUgTklDJ3MgcG93ZXIgbWFuYWdlbWVudCBzdXBwb3J0LgorCitnbG9iYWxfZW5hYmxlX3dvbD1OCisKKyAgU2V0cyBlbmFibGVfd29sIG1vZGUgZm9yIGFsbCAzYzU5eCBOSUNzIGluIHRoZSBtYWNoaW5lLiAgRW50cmllcyBpbgorICB0aGUgYGVuYWJsZV93b2wnIGFycmF5IGFib3ZlIHdpbGwgb3ZlcnJpZGUgYW55IHNldHRpbmcgb2YgdGhpcy4KKworTWVkaWEgc2VsZWN0aW9uCistLS0tLS0tLS0tLS0tLS0KKworQSBudW1iZXIgb2YgdGhlIG9sZGVyIE5JQ3Mgc3VjaCBhcyB0aGUgM2M1OTAgYW5kIDNjOTAwIHNlcmllcyBoYXZlCisxMGJhc2UyIGFuZCBBVUkgaW50ZXJmYWNlcy4KKworUHJpb3IgdG8gSmFudWFyeSwgMjAwMSB0aGlzIGRyaXZlciB3b3VsZCBhdXRvZXNlbGVjdCB0aGUgMTBiYXNlMiBvciBBVUkKK3BvcnQgaWYgaXQgZGlkbid0IGRldGVjdCBhY3Rpdml0eSBvbiB0aGUgMTBiYXNlVCBwb3J0LiAgSXQgd291bGQgdGhlbgorZ2V0IHN0dWNrIG9uIHRoZSAxMGJhc2UyIHBvcnQgYW5kIGEgZHJpdmVyIHJlbG9hZCB3YXMgbmVjZXNzYXJ5IHRvCitzd2l0Y2ggYmFjayB0byAxMGJhc2VULiAgVGhpcyBiZWhhdmlvdXIgY291bGQgbm90IGJlIHByZXZlbnRlZCB3aXRoIGEKK21vZHVsZSBvcHRpb24gb3ZlcnJpZGUuCisKK0xhdGVyIChjdXJyZW50KSB2ZXJzaW9ucyBvZiB0aGUgZHJpdmVyIF9kb18gc3VwcG9ydCBsb2NraW5nIG9mIHRoZQorbWVkaWEgdHlwZS4gIFNvIGlmIHlvdSBsb2FkIHRoZSBkcml2ZXIgbW9kdWxlIHdpdGgKKworCW1vZHByb2JlIDNjNTl4IG9wdGlvbnM9MAorCitpdCB3aWxsIHBlcm1hbmVudGx5IHNlbGVjdCB0aGUgMTBiYXNlVCBwb3J0LiAgQXV0b21hdGljIHNlbGVjdGlvbiBvZgorb3RoZXIgbWVkaWEgdHlwZXMgZG9lcyBub3Qgb2NjdXIuCisKKworVHJhbnNtaXQgZXJyb3IsIFR4IHN0YXR1cyByZWdpc3RlciA4MgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGlzIGEgY29tbW9uIGVycm9yIHdoaWNoIGlzIGFsbW9zdCBhbHdheXMgY2F1c2VkIGJ5IGFub3RoZXIgaG9zdCBvbgordGhlIHNhbWUgbmV0d29yayBiZWluZyBpbiBmdWxsLWR1cGxleCBtb2RlLCB3aGlsZSB0aGlzIGhvc3QgaXMgaW4KK2hhbGYtZHVwbGV4IG1vZGUuICBZb3UgbmVlZCB0byBmaW5kIHRoYXQgb3RoZXIgaG9zdCBhbmQgbWFrZSBpdCBydW4gaW4KK2hhbGYtZHVwbGV4IG1vZGUgb3IgZml4IHRoaXMgaG9zdCB0byBydW4gaW4gZnVsbC1kdXBsZXggbW9kZS4KKworQXMgYSBsYXN0IHJlc29ydCwgeW91IGNhbiBmb3JjZSB0aGUgM2M1OXggZHJpdmVyIGludG8gZnVsbC1kdXBsZXggbW9kZQord2l0aAorCisJb3B0aW9ucyAzYzU5eCBmdWxsX2R1cGxleD0xCisKK2J1dCB0aGlzIGhhcyB0byBiZSB2aWV3ZWQgYXMgYSB3b3JrYXJvdW5kIGZvciBicm9rZW4gbmV0d29yayBnZWFyIGFuZAorc2hvdWxkIG9ubHkgcmVhbGx5IGJlIHVzZWQgZm9yIGVxdWlwbWVudCB3aGljaCBjYW5ub3QgYXV0b25lZ290aWF0ZS4KKworCitBZGRpdGlvbmFsIHJlc291cmNlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRGV0YWlscyBvZiB0aGUgZGV2aWNlIGRyaXZlciBpbXBsZW1lbnRhdGlvbiBhcmUgYXQgdGhlIHRvcCBvZiB0aGUgc291cmNlIGZpbGUuCisKK0FkZGl0aW9uYWwgZG9jdW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgYXQgRG9uIEJlY2tlcidzIExpbnV4IERyaXZlcnMgc2l0ZToKKworICBodHRwOi8vd3d3LnNjeWxkLmNvbS9uZXR3b3JrL3ZvcnRleC5odG1sCisKK0RvbmFsZCBCZWNrZXIncyBkcml2ZXIgZGV2ZWxvcG1lbnQgc2l0ZToKKworICAgICBodHRwOi8vd3d3LnNjeWxkLmNvbS9uZXR3b3JrCisKK0RvbmFsZCdzIHZvcnRleC1kaWFnIHByb2dyYW0gaXMgdXNlZnVsIGZvciBpbnNwZWN0aW5nIHRoZSBOSUMncyBzdGF0ZToKKworICAgICBodHRwOi8vd3d3LnNjeWxkLmNvbS9kaWFnLyNwY2ktZGlhZ3MKKworRG9uYWxkJ3MgbWlpLWRpYWcgcHJvZ3JhbSBtYXkgYmUgdXNlZCBmb3IgaW5zcGVjdGluZyBhbmQgbWFuaXB1bGF0aW5nCit0aGUgTklDJ3MgTWVkaWEgSW5kZXBlbmRlbnQgSW50ZXJmYWNlIHN1YnN5c3RlbToKKworICAgICBodHRwOi8vd3d3LnNjeWxkLmNvbS9kaWFnLyNtaWktZGlhZworCitEb25hbGQncyB3YWtlLW9uLUxBTiBwYWdlOgorCisgICAgIGh0dHA6Ly93d3cuc2N5bGQuY29tL2V4cGVydC93YWtlLW9uLWxhbi5odG1sCisKKzNDb20ncyBkb2N1bWVudGF0aW9uIGZvciBtYW55IE5JQ3MsIGluY2x1ZGluZyB0aGUgb25lcyBzdXBwb3J0ZWQgYnkKK3RoaXMgZHJpdmVyIGlzIGF2YWlsYWJsZSBhdCAKKworICAgICBodHRwOi8vc3VwcG9ydC4zY29tLmNvbS9wYXJ0bmVycy9kZXZlbG9wZXIvZGV2ZWxvcGVyX2Zvcm0uaHRtbAorCiszQ29tJ3MgRE9TLWJhc2VkIGFwcGxpY2F0aW9uIGZvciBzZXR0aW5nIHVwIHRoZSBOSUNzIEVFUFJPTXM6CisKKwlmdHA6Ly9mdHAuM2NvbS5jb20vcHViL25pYy8zYzkweC8zYzkweHgyLmV4ZQorCitEcml2ZXIgdXBkYXRlcyBhbmQgYSBkZXRhaWxlZCBjaGFuZ2Vsb2cgZm9yIHRoZSBtb2RpZmljYXRpb25zIHdoaWNoCit3ZXJlIG1hZGUgZm9yIHRoZSAyLjMvMiw0IHNlcmllcyBrZXJuZWwgaXMgYXZhaWxhYmxlIGF0CisKKyAgICAgaHR0cDovL3d3dy51b3cuZWR1LmF1L35hbmRyZXdtL2xpbnV4LyMzYzU5eC0yLjMKKworCitBdXRvbmVnb3RpYXRpb24gbm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoZSBkcml2ZXIgdXNlcyBhIG9uZS1taW51dGUgaGVhcnRiZWF0IGZvciBhZGFwdGluZyB0byBjaGFuZ2VzIGluCisgIHRoZSBleHRlcm5hbCBMQU4gZW52aXJvbm1lbnQuICBUaGlzIG1lYW5zIHRoYXQgd2hlbiwgZm9yIGV4YW1wbGUsIGEKKyAgbWFjaGluZSBpcyB1bnBsdWdnZWQgZnJvbSBhIGh1YmJlZCAxMGJhc2VUIExBTiBwbHVnZ2VkIGludG8gYQorICBzd2l0Y2hlZCAxMDBiYXNlVCBMQU4sIHRoZSB0aHJvdWdocHV0IHdpbGwgYmUgcXVpdGUgZHJlYWRmdWwgZm9yIHVwCisgIHRvIHNpeHR5IHNlY29uZHMuICBCZSBwYXRpZW50LgorCisgIENpc2NvIGludGVyb3BlcmFiaWxpdHkgbm90ZSBmcm9tIFdhbHRlciBXb25nIDx3Y3crQENNVS5FRFU+OgorCisgIE9uIGEgc2lkZSBub3RlLCBhZGRpbmcgSEFTX05XQVkgc2VlbXMgdG8gc2hhcmUgYSBwcm9ibGVtIHdpdGggdGhlCisgIENpc2NvIDY1MDkgc3dpdGNoLiAgU3BlY2lmaWNhbGx5LCB5b3UgbmVlZCB0byBjaGFuZ2UgdGhlIHNwYW5uaW5nCisgIHRyZWUgcGFyYW1ldGVyIGZvciB0aGUgcG9ydCB0aGUgbWFjaGluZSBpcyBwbHVnZ2VkIGludG8gdG8gJ3BvcnRmYXN0JworICBtb2RlLiAgT3RoZXJ3aXNlLCB0aGUgbmVnb3RpYXRpb24gZmFpbHMuICBUaGlzIGhhcyBiZWVuIGFuIGlzc3VlCisgIHdlJ3ZlIG5vdGljZWQgZm9yIGEgd2hpbGUgYnV0IGhhdmVuJ3QgaGFkIHRoZSB0aW1lIHRvIHRyYWNrIGRvd24uCisKKyAgQ2lzY28gc3dpdGNoZXMgICAgKEplZmYgQnVzY2ggPGpidXNjaEBkZWphLmNvbT4pCisKKyAgICBNeSAic3RhbmRhcmQgY29uZmlnIiBmb3IgcG9ydHMgdG8gd2hpY2ggUEMncy9zZXJ2ZXJzIGNvbm5lY3QgZGlyZWN0bHk6CisKKyAgICAgICAgaW50ZXJmYWNlIEZhc3RFdGhlcm5ldDAvTgorICAgICAgICBkZXNjcmlwdGlvbiBtYWNoaW5lbmFtZQorICAgICAgICBsb2FkLWludGVydmFsIDMwCisgICAgICAgIHNwYW5uaW5nLXRyZWUgcG9ydGZhc3QKKworICAgIElmIGF1dG9uZWdvdGlhdGlvbiBpcyBhIHByb2JsZW0sIHlvdSBtYXkgbmVlZCB0byBzcGVjaWZ5ICJzcGVlZAorICAgIDEwMCIgYW5kICJkdXBsZXggZnVsbCIgYXMgd2VsbCAob3IgInNwZWVkIDEwIiBhbmQgImR1cGxleCBoYWxmIikuCisKKyAgICBXQVJOSU5HOiBETyBOT1QgaG9vayB1cCBodWJzL3N3aXRjaGVzL2JyaWRnZXMgdG8gdGhlc2UKKyAgICBzcGVjaWFsbHktY29uZmlndXJlZCBwb3J0cyEgVGhlIHN3aXRjaCB3aWxsIGJlY29tZSB2ZXJ5IGNvbmZ1c2VkLgorCisKK1JlcG9ydGluZyBhbmQgZGlhZ25vc2luZyBwcm9ibGVtcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK01haW50YWluZXJzIGZpbmQgdGhhdCBhY2N1cmF0ZSBhbmQgY29tcGxldGUgcHJvYmxlbSByZXBvcnRzIGFyZQoraW52YWx1YWJsZSBpbiByZXNvbHZpbmcgZHJpdmVyIHByb2JsZW1zLiAgV2UgYXJlIGZyZXF1ZW50bHkgbm90IGFibGUgdG8KK3JlcHJvZHVjZSBwcm9ibGVtcyBhbmQgbXVzdCByZWx5IG9uIHlvdXIgcGF0aWVuY2UgYW5kIGVmZm9ydHMgdG8gZ2V0IHRvCit0aGUgYm90dG9tIG9mIHRoZSBwcm9ibGVtLgorCitJZiB5b3UgYmVsaWV2ZSB5b3UgaGF2ZSBhIGRyaXZlciBwcm9ibGVtIGhlcmUgYXJlIHNvbWUgb2YgdGhlCitzdGVwcyB5b3Ugc2hvdWxkIHRha2U6CisKKy0gSXMgaXQgcmVhbGx5IGEgZHJpdmVyIHByb2JsZW0/CisKKyAgIEVsaW1pbmF0ZSBzb21lIHZhcmlhYmxlczogdHJ5IGRpZmZlcmVudCBjYXJkcywgZGlmZmVyZW50CisgICBjb21wdXRlcnMsIGRpZmZlcmVudCBjYWJsZXMsIGRpZmZlcmVudCBwb3J0cyBvbiB0aGUgc3dpdGNoL2h1YiwKKyAgIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUga2VybmVsIG9yIG9mdGhlIGRyaXZlciwgZXRjLgorCistIE9LLCBpdCdzIGEgZHJpdmVyIHByb2JsZW0uCisKKyAgIFlvdSBuZWVkIHRvIGdlbmVyYXRlIGEgcmVwb3J0LiAgVHlwaWNhbGx5IHRoaXMgaXMgYW4gZW1haWwgdG8gdGhlCisgICBtYWludGFpbmVyIGFuZC9vciBsaW51eC1uZXRAdmdlci5rZXJuZWwub3JnLiAgVGhlIG1haW50YWluZXIncworICAgZW1haWwgYWRkcmVzcyB3aWxsIGJlIGludGhlIGRyaXZlciBzb3VyY2Ugb3IgaW4gdGhlIE1BSU5UQUlORVJTIGZpbGUuCisKKy0gVGhlIGNvbnRlbnRzIG9mIHlvdXIgcmVwb3J0IHdpbGwgdmFyeSBhIGxvdCBkZXBlbmRpbmcgdXBvbiB0aGUKKyAgcHJvYmxlbS4gIElmIGl0J3MgYSBrZXJuZWwgY3Jhc2ggdGhlbiB5b3Ugc2hvdWxkIHJlZmVyIHRvIHRoZQorICBSRVBPUlRJTkctQlVHUyBmaWxlLgorCisgIEJ1dCBmb3IgbW9zdCBwcm9ibGVtcyBpdCBpcyB1c2VmdWwgdG8gcHJvdmlkZSB0aGUgZm9sbG93aW5nOgorCisgICBvIEtlcm5lbCB2ZXJzaW9uLCBkcml2ZXIgdmVyc2lvbgorCisgICBvIEEgY29weSBvZiB0aGUgYmFubmVyIG1lc3NhZ2Ugd2hpY2ggdGhlIGRyaXZlciBnZW5lcmF0ZXMgd2hlbgorICAgICBpdCBpcyBpbml0aWFsaXNlZC4gIEZvciBleGFtcGxlOgorCisgICAgIGV0aDA6IDNDb20gUENJIDNjOTA1QyBUb3JuYWRvIGF0IDB4YTQwMCwgIDAwOjUwOmRhOjZhOjg4OmYwLCBJUlEgMTkKKyAgICAgOEsgYnl0ZS13aWRlIFJBTSA1OjMgUng6VHggc3BsaXQsIGF1dG9zZWxlY3QvQXV0b25lZ290aWF0ZSBpbnRlcmZhY2UuCisgICAgIE1JSSB0cmFuc2NlaXZlciBmb3VuZCBhdCBhZGRyZXNzIDI0LCBzdGF0dXMgNzgyZC4KKyAgICAgRW5hYmxpbmcgYnVzLW1hc3RlciB0cmFuc21pdHMgYW5kIHdob2xlLWZyYW1lIHJlY2VpdmVzLgorCisgICAgIE5PVEU6IFlvdSBtdXN0IHByb3ZpZGUgdGhlIGBkZWJ1Zz0yJyBtb2Rwcm9iZSBvcHRpb24gdG8gZ2VuZXJhdGUKKyAgICAgYSBmdWxsIGRldGVjdGlvbiBtZXNzYWdlLiAgUGxlYXNlIGRvIHRoaXM6CisKKwltb2Rwcm9iZSAzYzU5eCBkZWJ1Zz0yCisKKyAgIG8gSWYgaXQgaXMgYSBQQ0kgZGV2aWNlLCB0aGUgcmVsZXZhbnQgb3V0cHV0IGZyb20gJ2xzcGNpIC12eCcsIGVnOgorCisgICAgIDAwOjA5LjAgRXRoZXJuZXQgY29udHJvbGxlcjogM0NvbSBDb3Jwb3JhdGlvbiAzYzkwNUMtVFggW0Zhc3QgRXRoZXJsaW5rXSAocmV2IDc0KQorICAgICAgICAgICAgIFN1YnN5c3RlbTogM0NvbSBDb3Jwb3JhdGlvbjogVW5rbm93biBkZXZpY2UgOTIwMAorICAgICAgICAgICAgIEZsYWdzOiBidXMgbWFzdGVyLCBtZWRpdW0gZGV2c2VsLCBsYXRlbmN5IDMyLCBJUlEgMTkKKyAgICAgICAgICAgICBJL08gcG9ydHMgYXQgYTQwMCBbc2l6ZT0xMjhdCisgICAgICAgICAgICAgTWVtb3J5IGF0IGRiMDAwMDAwICgzMi1iaXQsIG5vbi1wcmVmZXRjaGFibGUpIFtzaXplPTEyOF0KKyAgICAgICAgICAgICBFeHBhbnNpb24gUk9NIGF0IDx1bmFzc2lnbmVkPiBbZGlzYWJsZWRdIFtzaXplPTEyOEtdCisgICAgICAgICAgICAgQ2FwYWJpbGl0aWVzOiBbZGNdIFBvd2VyIE1hbmFnZW1lbnQgdmVyc2lvbiAyCisgICAgIDAwOiBiNyAxMCAwMCA5MiAwNyAwMCAxMCAwMiA3NCAwMCAwMCAwMiAwOCAyMCAwMCAwMAorICAgICAxMDogMDEgYTQgMDAgMDAgMDAgMDAgMDAgZGIgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAKKyAgICAgMjA6IDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIGI3IDEwIDAwIDEwCisgICAgIDMwOiAwMCAwMCAwMCAwMCBkYyAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwNSAwMSAwYSAwYQorCisgICBvIEEgZGVzY3JpcHRpb24gb2YgdGhlIGVudmlyb25tZW50OiAxMGJhc2VUPyAxMDBiYXNlVD8KKyAgICAgZnVsbC9oYWxmIGR1cGxleD8gc3dpdGNoZWQgb3IgaHViYmVkPworCisgICBvIEFueSBhZGRpdGlvbmFsIG1vZHVsZSBwYXJhbWV0ZXJzIHdoaWNoIHlvdSBtYXkgYmUgcHJvdmlkaW5nIHRvIHRoZSBkcml2ZXIuCisKKyAgIG8gQW55IGtlcm5lbCBsb2dzIHdoaWNoIGFyZSBwcm9kdWNlZC4gIFRoZSBtb3JlIHRoZSBtZXJyaWVyLiAKKyAgICAgSWYgdGhpcyBpcyBhIGxhcmdlIGZpbGUgYW5kIHlvdSBhcmUgc2VuZGluZyB5b3VyIHJlcG9ydCB0byBhCisgICAgIG1haWxpbmcgbGlzdCwgbWVudGlvbiB0aGF0IHlvdSBoYXZlIHRoZSBsb2dmaWxlLCBidXQgZG9uJ3Qgc2VuZAorICAgICBpdC4gIElmIHlvdSdyZSByZXBvcnRpbmcgZGlyZWN0IHRvIHRoZSBtYWludGFpbmVyIHRoZW4ganVzdCBzZW5kCisgICAgIGl0LgorCisgICAgIFRvIGVuc3VyZSB0aGF0IGFsbCBrZXJuZWwgbG9ncyBhcmUgYXZhaWxhYmxlLCBhZGQgdGhlCisgICAgIGZvbGxvd2luZyBsaW5lIHRvIC9ldGMvc3lzbG9nLmNvbmY6CisKKyAgICAgICAgIGtlcm4uKiAvdmFyL2xvZy9tZXNzYWdlcworCisgICAgIFRoZW4gcmVzdGFydCBzeXNsb2dkIHdpdGg6CisKKyAgICAgICAgIC9ldGMvcmMuZC9pbml0LmQvc3lzbG9nIHJlc3RhcnQKKworICAgICAoVGhlIGFib3ZlIG1heSB2YXJ5LCBkZXBlbmRpbmcgdXBvbiB3aGljaCBMaW51eCBkaXN0cmlidXRpb24geW91IHVzZSkuCisKKyAgICBvIElmIHlvdXIgcHJvYmxlbSBpcyByZXByb2R1Y2libGUgdGhlbiB0aGF0J3MgZ3JlYXQuICBUcnkgdGhlCisgICAgICBmb2xsb3dpbmc6CisKKyAgICAgIDEpIEluY3JlYXNlIHRoZSBkZWJ1ZyBsZXZlbC4gIFVzdWFsbHkgdGhpcyBpcyBkb25lIHZpYToKKworICAgICAgICAgYSkgbW9kcHJvYmUgZHJpdmVyIGRlYnVnPTcKKyAgICAgICAgIGIpIEluIC9ldGMvbW9kcHJvYmUuY29uZiAob3IgL2V0Yy9tb2R1bGVzLmNvbmYgZm9yIDIuNCk6CisgICAgICAgICAgICBvcHRpb25zIGRyaXZlciBkZWJ1Zz03CisKKyAgICAgIDIpIFJlY3JlYXRlIHRoZSBwcm9ibGVtIHdpdGggdGhlIGhpZ2hlciBkZWJ1ZyBsZXZlbCwKKyAgICAgICAgIHNlbmQgYWxsIGxvZ3MgdG8gdGhlIG1haW50YWluZXIuCisKKyAgICAgIDMpIERvd25sb2FkIHlvdSBjYXJkJ3MgZGlhZ25vc3RpYyB0b29sIGZyb20gRG9uYWxkCisgICAgICAgICBCYWNrZXIncyB3ZWJzaXRlIGh0dHA6Ly93d3cuc2N5bGQuY29tL2RpYWcuICBEb3dubG9hZAorICAgICAgICAgbWlpLWRpYWcuYyBhcyB3ZWxsLiAgQnVpbGQgdGhlc2UuCisKKyAgICAgICAgIGEpIFJ1biAndm9ydGV4LWRpYWcgLWFhZWUnIGFuZCAnbWlpLWRpYWcgLXYnIHdoZW4gdGhlIGNhcmQgaXMKKyAgICAgICAgICAgIHdvcmtpbmcgY29ycmVjdGx5LiAgU2F2ZSB0aGUgb3V0cHV0LgorCisgICAgICAgICBiKSBSdW4gdGhlIGFib3ZlIGNvbW1hbmRzIHdoZW4gdGhlIGNhcmQgaXMgbWFsZnVuY3Rpb25pbmcuICBTZW5kCisgICAgICAgICAgICBib3RoIHNldHMgb2Ygb3V0cHV0LgorCitGaW5hbGx5LCBwbGVhc2UgYmUgcGF0aWVudCBhbmQgYmUgcHJlcGFyZWQgdG8gZG8gc29tZSB3b3JrLiAgWW91IG1heSBlbmQgdXAgd29ya2luZyBvbgordGhpcyBwcm9ibGVtIGZvciBhIHdlZWsgb3IgbW9yZSBhcyB0aGUgbWFpbnRhaW5lciBhc2tzIG1vcmUgcXVlc3Rpb25zLCBhc2tzIGZvciBtb3JlCit0ZXN0cywgYXNrcyBmb3IgcGF0Y2hlcyB0byBiZSBhcHBsaWVkLCBldGMuICBBdCB0aGUgZW5kIG9mIGl0IGFsbCwgdGhlIHByb2JsZW0gbWF5IGV2ZW4KK3JlbWFpbiB1bnJlc29sdmVkLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvd2FuLXJvdXRlci50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvd2FuLXJvdXRlci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVhMjBjZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy93YW4tcm91dGVyLnR4dApAQCAtMCwwICsxLDYyMiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMaW51eCBXQU4gUm91dGVyIFV0aWxpdGllcyBQYWNrYWdlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1ZlcnNpb24gMi4yLjEgCitNYXIgMjgsIDIwMDEKK0F1dGhvcjogTmVuYWQgQ29yYmljIDxuY29yYmljQHNhbmdvbWEuY29tPgorQ29weXJpZ2h0IChjKSAxOTk1LTIwMDEgU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lOVFJPRFVDVElPTgorCitXaWRlIEFyZWEgTmV0d29ya3MgKFdBTnMpIGFyZSB1c2VkIHRvIGludGVyY29ubmVjdCBMb2NhbCBBcmVhIE5ldHdvcmtzIChMQU5zKQorYW5kL29yIHN0YW5kLWFsb25lIGhvc3RzIG92ZXIgdmFzdCBkaXN0YW5jZXMgd2l0aCBkYXRhIHRyYW5zZmVyIHJhdGVzCitzaWduaWZpY2FudGx5IGhpZ2hlciB0aGFuIHRob3NlIGFjaGlldmFibGUgd2l0aCBjb21tb25seSB1c2VkIGRpYWwtdXAKK2Nvbm5lY3Rpb25zLgorCitVc3VhbGx5IGFuIGV4dGVybmFsIGRldmljZSBjYWxsZWQgYFdBTiByb3V0ZXInIHNpdHRpbmcgb24geW91ciBsb2NhbCBuZXR3b3JrCitvciBjb25uZWN0ZWQgdG8geW91ciBtYWNoaW5lJ3Mgc2VyaWFsIHBvcnQgcHJvdmlkZXMgcGh5c2ljYWwgY29ubmVjdGlvbiB0bworV0FOLiAgQWx0aG91Z2ggcm91dGVyJ3Mgam9iIG1heSBiZSBhcyBzaW1wbGUgYXMgdGFraW5nIHlvdXIgbG9jYWwgbmV0d29yawordHJhZmZpYywgY29udmVydGluZyBpdCB0byBXQU4gZm9ybWF0IGFuZCBwaXBpbmcgaXQgdGhyb3VnaCB0aGUgV0FOIGxpbmssIHRoZXNlCitkZXZpY2VzIGFyZSBub3RvcmlvdXNseSBleHBlbnNpdmUsIHdpdGggcHJpY2VzIGFzIG11Y2ggYXMgMiAtIDUgdGltZXMgaGlnaGVyCit0aGVuIHRoZSBwcmljZSBvZiBhIHR5cGljYWwgUEMgYm94LgorCitBbHRlcm5hdGl2ZWx5LCBjb25zaWRlcmluZyByb2J1c3RuZXNzIGFuZCBtdWx0aXRhc2tpbmcgY2FwYWJpbGl0aWVzIG9mIExpbnV4LAorYW4gaW50ZXJuYWwgcm91dGVyIGNhbiBiZSBidWlsdCAobW9zdCByb3V0ZXJzIHVzZSBzb21lIHNvcnQgb2Ygc3RyaXBwZWQgZG93bgorVW5peC1saWtlIG9wZXJhdGluZyBzeXN0ZW0gYW55d2F5KS4gV2l0aCBhIG51bWJlciBvZiByZWxhdGl2ZWx5IGluZXhwZW5zaXZlIFdBTgoraW50ZXJmYWNlIGNhcmRzIGF2YWlsYWJsZSBvbiB0aGUgbWFya2V0LCBhIHBlcmZlY3RseSB1c2FibGUgcm91dGVyIGNhbiBiZQorYnVpbHQgZm9yIGxlc3MgdGhhbiBoYWxmIGEgcHJpY2Ugb2YgYW4gZXh0ZXJuYWwgcm91dGVyLiAgWWV0IGEgTGludXggYm94CithY3RpbmcgYXMgYSByb3V0ZXIgY2FuIHN0aWxsIGJlIHVzZWQgZm9yIG90aGVyIHB1cnBvc2VzLCBzdWNoIGFzIGZpcmUtd2FsbGluZywKK3J1bm5pbmcgRlRQLCBXV1cgb3IgRE5TIHNlcnZlciwgZXRjLgorCitUaGlzIGtlcm5lbCBtb2R1bGUgaW50cm9kdWNlcyB0aGUgbm90aW9uIG9mIGEgV0FOIExpbmsgRHJpdmVyIChXTEQpIHRvIExpbnV4CitvcGVyYXRpbmcgc3lzdGVtIGFuZCBwcm92aWRlcyBnZW5lcmljIGhhcmR3YXJlLWluZGVwZW5kZW50IHNlcnZpY2VzIGZvciBzdWNoCitkcml2ZXJzLiAgV2h5IGNhbiBleGlzdGluZyBMaW51eCBuZXR3b3JrIGRldmljZSBpbnRlcmZhY2Ugbm90IGJlIHVzZWQgZm9yCit0aGlzIHB1cnBvc2U/ICBXZWxsLCBpdCBjYW4uICBIb3dldmVyLCB0aGVyZSBhcmUgYSBmZXcga2V5IGRpZmZlcmVuY2VzIGJldHdlZW4KK2EgdHlwaWNhbCBuZXR3b3JrIGludGVyZmFjZSAoZS5nLiBFdGhlcm5ldCkgYW5kIGEgV0FOIGxpbmsuCisKK01hbnkgV0FOIHByb3RvY29scywgc3VjaCBhcyBYLjI1IGFuZCBmcmFtZSByZWxheSwgYWxsb3cgZm9yIG11bHRpcGxlIGxvZ2ljYWwKK2Nvbm5lY3Rpb25zIChrbm93biBhcyBgdmlydHVhbCBjaXJjdWl0cycgaW4gWC4yNSB0ZXJtaW5vbG9neSkgb3ZlciBhIHNpbmdsZQorcGh5c2ljYWwgbGluay4gIEVhY2ggc3VjaCB2aXJ0dWFsIGNpcmN1aXQgbWF5IChhbmQgYWxtb3N0IGFsd2F5cyBkb2VzKSBsZWFkCit0byBhIGRpZmZlcmVudCBnZW9ncmFwaGljYWwgbG9jYXRpb24gYW5kLCB0aGVyZWZvcmUsIGRpZmZlcmVudCBuZXR3b3JrLiAgQXMgYQorcmVzdWx0LCBpdCBpcyB0aGUgdmlydHVhbCBjaXJjdWl0LCBub3QgdGhlIHBoeXNpY2FsIGxpbmssIHRoYXQgcmVwcmVzZW50cyBhCityb3V0ZSBhbmQsIHRoZXJlZm9yZSwgYSBuZXR3b3JrIGludGVyZmFjZSBpbiBMaW51eCB0ZXJtcy4KKworVG8gZnVydGhlciBjb21wbGljYXRlIHRoaW5ncywgdmlydHVhbCBjaXJjdWl0cyBhcmUgdXN1YWxseSB2b2xhdGlsZSBpbiBuYXR1cmUKKyhleGNsdWRpbmcgc28gY2FsbGVkIGBwZXJtYW5lbnQnIHZpcnR1YWwgY2lyY3VpdHMgb3IgUFZDcykuICBXaXRoIGFsbW9zdCBubwordGltZSByZXF1aXJlZCB0byBzZXQgdXAgYW5kIHRlYXIgZG93biBhIHZpcnR1YWwgY2lyY3VpdCwgaXQgaXMgaGlnaGx5IGRlc2lyYWJsZQordG8gaW1wbGVtZW50IG9uLWRlbWFuZCBjb25uZWN0aW9ucyBpbiBvcmRlciB0byBtaW5pbWl6ZSBuZXR3b3JrIGNoYXJnZXMuICBTbwordW5saWtlIGEgdHlwaWNhbCBuZXR3b3JrIGRyaXZlciwgdGhlIFdBTiBkcml2ZXIgbXVzdCBiZSBhYmxlIHRvIGhhbmRsZSBtdWx0aXBsZQorbmV0d29yayBpbnRlcmZhY2VzIGFuZCBjb3BlIGFzIG11bHRpcGxlIHZpcnR1YWwgY2lyY3VpdHMgY29tZSBpbnRvIGV4aXN0ZW5jZQorYW5kIGdvIGF3YXkgZHluYW1pY2FsbHkuCisgCitMYXN0LCBidXQgbm90IGxlYXN0LCBXQU4gY29uZmlndXJhdGlvbiBpcyBtdWNoIG1vcmUgY29tcGxleCB0aGFuIHRoYXQgb2Ygc2F5CitFdGhlcm5ldCBhbmQgbWF5IHdlbGwgYW1vdW50IHRvIHNldmVyYWwgZG96ZW5zIG9mIHBhcmFtZXRlcnMuICBTb21lIG9mIHRoZW0KK2FyZSAibGluay13aWRlIiAgd2hpbGUgb3RoZXJzIGFyZSB2aXJ0dWFsIGNpcmN1aXQtc3BlY2lmaWMuICBUaGUgc2FtZSBob2xkcwordHJ1ZSBmb3IgV0FOIHN0YXRpc3RpY3Mgd2hpY2ggaXMgYnkgZmFyIG1vcmUgZXh0ZW5zaXZlIGFuZCBleHRyZW1lbHkgdXNlZnVsCit3aGVuIHRyb3VibGVzaG9vdGluZyBXQU4gY29ubmVjdGlvbnMuICBFeHRlbmRpbmcgdGhlIGlmY29uZmlnIHV0aWxpdHkgdG8gc3VpdAordGhlc2UgbmVlZHMgbWF5IGJlIHBvc3NpYmxlLCBidXQgZG9lcyBub3Qgc2VlbSBxdWl0ZSByZWFzb25hYmxlLiAgVGhlcmVmb3JlLCBhCitXQU4gY29uZmlndXJhdGlvbiB1dGlsaXR5IGFuZCBjb3JyZXNwb25kaW5nIGFwcGxpY2F0aW9uIHByb2dyYW1tZXIncyBpbnRlcmZhY2UKK2lzIG5lZWRlZCBmb3IgdGhpcyBwdXJwb3NlLgorCitNb3N0IG9mIHRoZXNlIHByb2JsZW1zIGFyZSB0YWtlbiBjYXJlIG9mIGJ5IHRoaXMgbW9kdWxlLiAgSXRzIGdvYWwgaXMgdG8KK3Byb3ZpZGUgYSB1c2VyIHdpdGggbW9yZS1vci1sZXNzIHN0YW5kYXJkIGxvb2sgYW5kIGZlZWwgZm9yIGFsbCBXQU4gZGV2aWNlcyBhbmQKK2Fzc2lzdCBhIFdBTiBkZXZpY2UgZHJpdmVyIHdyaXRlciBieSBwcm92aWRpbmcgY29tbW9uIHNlcnZpY2VzLCBzdWNoIGFzOgorCisgbyBVc2VyLWxldmVsIGludGVyZmFjZSB2aWEgL3Byb2MgZmlsZSBzeXN0ZW0KKyBvIENlbnRyYWxpemVkIGNvbmZpZ3VyYXRpb24KKyBvIERldmljZSBtYW5hZ2VtZW50IChzZXR1cCwgc2h1dGRvd24sIGV0Yy4pCisgbyBOZXR3b3JrIGludGVyZmFjZSBtYW5hZ2VtZW50IChkeW5hbWljIGNyZWF0aW9uL2Rlc3RydWN0aW9uKQorIG8gUHJvdG9jb2wgZW5jYXBzdWxhdGlvbi9kZWNhcHN1bGF0aW9uCisKK1RvIGJhIGFibGUgdG8gdXNlIHRoZSBMaW51eCBXQU4gUm91dGVyIHlvdSB3aWxsIGFsc28gbmVlZCBhIFdBTiBUb29scyBwYWNrYWdlCithdmFpbGFibGUgZnJvbQorCisJZnRwLnNhbmdvbWEuY29tL3B1Yi9saW51eC9jdXJyZW50X3dhbnBpcGUvd2FucGlwZS1YLlkuWi50Z3oKKword2hlcmUgdlguWS5aIHJlcHJlc2VudCB0aGUgd2FucGlwZSB2ZXJzaW9uIG51bWJlci4KKworRm9yIHRlY2huaWNhbCBxdWVzdGlvbnMgYW5kL29yIGNvbW1lbnRzIHBsZWFzZSBlLW1haWwgdG8gbmNvcmJpY0BzYW5nb21hLmNvbS4KK0ZvciBnZW5lcmFsIGlucXVpcmllcyBwbGVhc2UgY29udGFjdCBTYW5nb21hIFRlY2hub2xvZ2llcyBJbmMuIGJ5CisKKwlIb3RsaW5lOgkxLTgwMC0zODgtMjQ3NQkoVVNBIGFuZCBDYW5hZGEsIHRvbGwgZnJlZSkKKwlQaG9uZToJCSg5MDUpIDQ3NC0xOTkwICBleHQ6IDEwNgorCUZheDoJCSg5MDUpIDQ3NC05MjIzCisJRS1tYWlsOgkJZG1Ac2FuZ29tYS5jb20JKERhdmlkIE1hbmRlbHN0YW0pCisJV1dXOgkJaHR0cDovL3d3dy5zYW5nb21hLmNvbQorCisKK0lOU1RBTExBVElPTgorCitQbGVhc2UgcmVhZCB0aGUgV2FucGlwZUZvckxpbnV4LnBkZiBtYW51YWwgb24gaG93IHRvIAoraW5zdGFsbCB0aGUgV0FOUElQRSB0b29scyBhbmQgZHJpdmVycyBwcm9wZXJseS4gCisKKworQWZ0ZXIgaW5zdGFsbGluZyB3YW5waXBlIHBhY2thZ2U6IC91c3IvbG9jYWwvd2Fucm91dGVyL2RvYy4gCitPbiB0aGUgZnRwLnNhbmdvbWEuY29tIDogL2xpbnV4L2N1cnJlbnRfd2FucGlwZS9kb2MKKworCitDT1BZUklHSFQgQU5EIExJQ0VOU0lORyBJTkZPUk1BVElPTgorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKK0ZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCit0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MKK0F2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisKKworQUNLTk9XTEVER0VNRU5UUworCitUaGlzIHByb2R1Y3QgaXMgYmFzZWQgb24gdGhlIFdBTlBJUEUodG0pIE11bHRpcHJvdG9jb2wgV0FOIFJvdXRlciBkZXZlbG9wZWQKK2J5IFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4gZm9yIExpbnV4IDIuMC54IGFuZCAyLjIueC4gIFN1Y2Nlc3Mgb2YgdGhlIFdBTlBJUEUKK3RvZ2V0aGVyIHdpdGggdGhlIG5leHQgbWFqb3IgcmVsZWFzZSBvZiBMaW51eCBrZXJuZWwgaW4gc3VtbWVyIDE5OTYgY29tbWFuZGVkCithZGVxdWF0ZSBjaGFuZ2VzIHRvIHRoZSBXQU5QSVBFIGNvZGUgdG8gdGFrZSBmdWxsIGFkdmFudGFnZSBvZiBuZXcgTGludXgKK2ZlYXR1cmVzLgorCitJbnN0ZWFkIG9mIGNvbnRpbnVpbmcgZGV2ZWxvcGluZyBwcm9wcmlldGFyeSBpbnRlcmZhY2UgdGllZCB0byBTYW5nb21hIFdBTgorY2FyZHMsIHdlIGRlY2lkZWQgdG8gc2VwYXJhdGUgYWxsIGhhcmR3YXJlLWluZGVwZW5kZW50IGNvZGUgaW50byBhIHNlcGFyYXRlCittb2R1bGUgYW5kIGRlZmluZWQgdHdvIGxldmVscyBvZiBpbnRlcmZhY2VzIC0gb25lIGZvciB1c2VyLWxldmVsIGFwcGxpY2F0aW9ucworYW5kIGFub3RoZXIgZm9yIGtlcm5lbC1sZXZlbCBXQU4gZHJpdmVycy4gIFdBTlBJUEUgaXMgbm93IGltcGxlbWVudGVkIGFzIGEKK1dBTiBkcml2ZXIgY29tcGxpYW50IHdpdGggdGhlIFdBTiBMaW5rIERyaXZlciBpbnRlcmZhY2UuICBBbHNvIGEgZ2VuZXJhbAorcHVycG9zZSBXQU4gY29uZmlndXJhdGlvbiB1dGlsaXR5IGFuZCBhIHNldCBvZiBzaGVsbCBzY3JpcHRzIHdhcyBkZXZlbG9wZWQgdG8gCitzdXBwb3J0IFdBTiByb3V0ZXIgYXQgdGhlIHVzZXIgbGV2ZWwuCisKK01hbnkgdXNlZnVsIGlkZWFzIGNvbmNlcm5pbmcgaGFyZHdhcmUtaW5kZXBlbmRlbnQgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uCit3ZXJlIGdpdmVuIGJ5IE1pa2UgTWNMYWdhbiA8bWlrZS5tY2xhZ2FuQGxpbnV4Lm9yZz4gYW5kIGhpcyBpbXBsZW1lbnRhdGlvbgorb2YgdGhlIEZyYW1lIFJlbGF5IHJvdXRlciBhbmQgZHJpdmVycyBmb3IgU2FuZ29tYSBjYXJkcyAoZGxjaS9zZGxhKS4KKworV2l0aCB0aGUgbmV3IGltcGxlbWVudGF0aW9uIG9mIHRoZSBBUElzIGJlaW5nIGluY29ycG9yYXRlZCBpbnRvIHRoZSBXQU5QSVBFLAorYSBzcGVjaWFsIHRoYW5rIGdvZXMgdG8gQWxhbiBDb3ggaW4gcHJvdmlkaW5nIGluc2lnaHQgaW50byBCU0Qgc29ja2V0cy4KKworU3BlY2lhbCB0aGFua3MgdG8gYWxsIHRoZSBXQU5QSVBFIHVzZXJzIHdobyBwZXJmb3JtZWQgZmllbGQtdGVzdGluZywgcmVwb3J0ZWQKK2J1Z3MgYW5kIG1hZGUgdmFsdWFibGUgY29tbWVudHMgYW5kIHN1Z2dlc3Rpb25zIHRoYXQgaGVscCB1cyB0byBpbXByb3ZlIHRoaXMKK3Byb2R1Y3QuCisKKworCitORVcgSU4gVEhJUyBSRUxFQVNFCisKKwlvIFVwZGF0ZWQgdGhlIFdBTkNGRyB1dGlsaXR5CisJCUNhbGxzIHRoZSBwcHBjb25maWcgdG8gY29uZmlndXJlIHRoZSBQUFBECisJCWZvciBhc3luYyBjb25uZWN0aW9ucy4KKworCW8gQWRkZWQgdGhlIFBQUENPTkZJRyB1dGlsaXR5CisJCVVzZWQgdG8gY29uZmlndXJlIHRoZSBQUFBEIGRhbWVvbiBmb3IgdGhlCisJCVdBTlBJUEUgQXN5bmMgUFBQIGFuZCBzdGFuZGFyZCBzZXJpYWwgcG9ydC4KKwkJVGhlIHdhbmNmZyBjYWxscyB0aGUgcHBwY29uZmlnIHRvIGNvbmZpZ3VyZQorCQl0aGUgcHBwZC4KKworCW8gRml4ZWQgdGhlIFBDSSBhdXRvZGV0ZWN0IGZlYXR1cmUuICAKKwkJVGhlIFNMT1QgMCB3YXMgdXNlZCBhcyBhbiBhdXRvZGV0ZWN0IG9wdGlvbgorCQlob3dldmVyLCBzb21lIGhpZ2ggZW5kIFBDJ3Mgc2xvdCBudW1iZXJzIHN0YXJ0CisJCWZyb20gMC4gCisKKwlvIFRoaXMgcmVsZWFzZSBoYXMgYmVlbiB0ZXN0ZWQgd2l0aCB0aGUgbmV3IGJhY2t1cGQKKwkgIGRhZW1vbiByZWxlYXNlLgorCQorCitQUk9EVUNUIENPTVBPTkVOVFMgQU5EIFJFTEFURUQgRklMRVMKKworL2V0YzogKG9yIHVzZXIgZGVmaW5lZCkKKwl3YW5waXBlMS5jb25mCWRlZmF1bHQgcm91dGVyIGNvbmZpZ3VyYXRpb24gZmlsZQorCisvbGliL21vZHVsZXMvWC5ZLlovbWlzYzoKKwl3YW5yb3V0ZXIubwlyb3V0ZXIga2VybmVsIGxvYWRhYmxlIG1vZHVsZQorCWFmX3dhbnBpcGUubwl3YW5waXBlIGFwaSBzb2NrZXQgbW9kdWxlCisKKy9saWIvbW9kdWxlcy9YLlkuWi9uZXQ6CisJc2RsYWRydi5vCVNhbmdvbWEgU0RMQSBzdXBwb3J0IG1vZHVsZQorCXdhbnBpcGUubwlTYW5nb21hIFdBTlBJUEUodG0pIGRyaXZlciBtb2R1bGUKKworL3Byb2MvbmV0L3dhbnJvdXRlcgorCUNvbmZpZwkJcmVhZHMgY3VycmVudCByb3V0ZXIgY29uZmlndXJhdGlvbgorCVN0YXR1cwkJcmVhZHMgY3VycmVudCByb3V0ZXIgc3RhdHVzCisJe25hbWV9CQlyZWFkcyBXQU4gZHJpdmVyIHN0YXRpc3RpY3MKKworL3Vzci9zYmluOgorCXdhbnJvdXRlcgl3YW5yb3V0ZXIgc3RhcnQtdXAgc2NyaXB0CisJd2FuY29uZmlnCXdhbnJvdXRlciBjb25maWd1cmF0aW9uIHV0aWxpdHkKKwlzZGxhZHVtcAlXQU5QSVBFIGFkYXB0ZXIgbWVtb3J5IGR1bXAgdXRpbGl0eQorICAgICAgICBmcGlwZW1vbiAgICAgICAgTW9uaXRvciBmb3IgRnJhbWUgUmVsYXkKKyAgICAgICAgY3BpcGVtb24gICAgICAgIE1vbml0b3IgZm9yIENpc2NvIEhETEMKKwlwcGlwZW1vbiAJTW9uaXRvciBmb3IgUFBQCisJeHBpcGVtb24gCU1vbml0b3IgZm9yIFgyNQorCXdwa2JkbW9uICAgICAgICBXQU5QSVBFIGtleWJvYXJkIGxlZCBtb25pdG9yL2RlYnVnZ2VyCisKKy91c3IvbG9jYWwvd2Fucm91dGVyOgorCVJFQURNRQkJdGhpcyBmaWxlCisJQ09QWUlORwkJR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKwlTZXR1cAkJaW5zdGFsbGF0aW9uIHNjcmlwdAorCUZpbGVsaXN0CWRpc3RyaWJ1dGlvbiBkZWZpbml0aW9uIGZpbGUKKwl3YW5yb3V0ZXIucmMJbWV0YS1jb25maWd1cmF0aW9uIGZpbGUgCisJCQkodXNlZCBieSB0aGUgU2V0dXAgYW5kIHdhbnJvdXRlciBzY3JpcHQpCisKKy91c3IvbG9jYWwvd2Fucm91dGVyL2RvYzoKKwl3YW5waXBlRm9yTGludXgucGRmIAlXQU4gUm91dGVyIFVzZXIncyBNYW51YWwKKworL3Vzci9sb2NhbC93YW5yb3V0ZXIvcGF0Y2hlczoKKwl3YW5yb3V0ZXItdjIyMTMuZ3ogIAlwYXRjaCBmb3IgTGludXgga2VybmVscyAyLjIuMTEgdXAgdG8gMi4yLjEzLgorCXdhbnJvdXRlci12MjIxNC5neglwYXRjaCBmb3IgTGludXgga2VybmVsIDIuMi4xNC4gCisJd2Fucm91dGVyLXYyMjE1Lmd6CXBhdGNoIGZvciBMaW51eCBrZXJuZWxzIDIuMi4xNSB0byAyLjIuMTcuCisJd2Fucm91dGVyLXYyMjE4Lmd6CXBhdGNoIGZvciBMaW51eCBrZXJuZWxzIDIuMi4xOCBhbmQgdXAuCisJd2Fucm91dGVyLXYyNDAuZ3oJcGF0Y2ggZm9yIExpbnV4IGtlcm5lbCAyLjQuMC4gIAorCXdhbnJvdXRlci12MjQyLmd6CXBhdGNoIGZvciBMaW51eCBrZXJuZWwgMi40LjIgYW5kIHVwLgorCXdhbnJvdXRlci12MjAzNC5neglwYXRjaCBmb3IgTGludXgga2VybmVsIDIuMC4zNAorCXdhbnJvdXRlci12MjAzNi5neiAJcGF0Y2ggZm9yIExpbnV4IGtlcm5lbCAyLjAuMzYgYW5kIHVwLiAKKworL3Vzci9sb2NhbC93YW5yb3V0ZXIvcGF0Y2hlcy9rZHJpdmVyczoKKwlTb3VyY2VzIG9mIHRoZSBsYXRlc3QgV0FOUElQRSBkZXZpY2UgZHJpdmVycy4KKwlUaGVzZSBhcmUgdXNlZCB0byBVUEdSQURFIHRoZSBsaW51eCBrZXJuZWwgdG8gdGhlIG5ld2VzdAorCXZlcnNpb24gaWYgdGhlIGtlcm5lbCBzb3VyY2UgaGFzIGFscmVhZHkgYmVlbiBwYXRoY2VkIHdpdGgKKwlXQU5QSVBFIGRyaXZlcnMuCisKKy91c3IvbG9jYWwvd2Fucm91dGVyL3NhbXBsZXM6CisJaW50ZXJmYWNlCXNhbXBsZSBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiBmaWxlCisJd2FucGlwZTEuY3ByaSAJQ0hETEMgcHJpbWFyeSBwb3J0CisgICAgIAl3YW5waXBlMi5jc2VjIAlDSERMQyBzZWNvbmRhcnkgcG9ydAorICAgICAJd2FucGlwZTEuZnIgICAJRnJhbWUgUmVsYXkgcHJvdG9jb2wKKyAgICAgCXdhbnBpcGUxLnBwcCAgCVBQUCBwcm90b2NvbCApIAorCXdhbnBpcGUxLmFzeQlDSERMQyBBU1lOQyBwcm90b2NvbAorCXdhbnBpcGUxLngyNQlYMjUgcHJvdG9jb2wKKwl3YW5waXBlMS5zdHR5CVN5bmMgVFRZIGRyaXZlciAoVXNlZCBieSBLZXJuZWwgUFBQRCBkYWVtb24pCisJd2FucGlwZTEuYXR0eQlBc3luYyBUVFkgZHJpdmVyIChVc2VkIGJ5IEtlcm5lbCBQUFBEIGRhZW1vbikKKwl3YW5yb3V0ZXIucmMJc2FtcGxlIG1ldGEtY29uZmlndXJhdGlvbiBmaWxlCisKKy91c3IvbG9jYWwvd2Fucm91dGVyL3V0aWw6CisJKgkJd2FuLXRvb2xzIHV0aWxpdGllcyBzb3VyY2UgY29kZQorCisvdXNyL2xvY2FsL3dhbnJvdXRlci9hcGkveDI1OgorCSoJCXgyNSBhcGkgc2FtcGxlIHByb2dyYW1zLgorL3Vzci9sb2NhbC93YW5yb3V0ZXIvYXBpL2NoZGxjOgorCSoJCWNoZGxjIGFwaSBzYW1wbGUgcHJvZ3JhbXMuCisvdXNyL2xvY2FsL3dhbnJvdXRlci9hcGkvZnI6CisJKgkJZnIgYXBpIHNhbXBsZSBwcm9ncmFtcy4KKy91c3IvbG9jYWwvd2Fucm91dGVyL2NvbmZpZy93YW5jZmc6CisJd2FuY2ZnCQlXQU5QSVBFIEdVSSBjb25maWd1cmF0aW9uIHByb2dyYW0uCisgICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVzIHdhbnBpcGUjLmNvbmYgZmlsZXMuIAorL3Vzci9sb2NhbC93YW5yb3V0ZXIvY29uZmlnL2NmZ2Z0MToKKwljZmdmdDEJCUdVSSBDU1UvRFNVIGNvbmZpZ3VyYXRpb24gcHJvZ3JhbS4KKworL3Vzci9pbmNsdWRlL2xpbnV4OgorCXdhbnJvdXRlci5oCXJvdXRlciBBUEkgZGVmaW5pdGlvbnMKKwl3YW5waXBlLmgJV0FOUElQRSBBUEkgZGVmaW5pdGlvbnMKKwlzZGxhZHJ2LmgJU0RMQSBzdXBwb3J0IG1vZHVsZSBBUEkgZGVmaW5pdGlvbnMKKwlzZGxhc2ZtLmgJU0RMQSBmaXJtd2FyZSBtb2R1bGUgZGVmaW5pdGlvbnMKKwlpZl93YW5waXBlLmgJV0FOUElQRSBTb2NrZXQgZGVmaW5pdGlvbnMKKwlpZl93YW5waXBlX2NvbW1vbi5oCVdBTlBJUEUgU29ja2V0L0RyaXZlciBjb21tb24gZGVmaW5pdGlvbnMuCisJc2RsYXBjaS5oCVdBTlBJUEUgUENJIGRlZmluaXRpb25zCisJCisKKy91c3Ivc3JjL2xpbnV4L25ldC93YW5yb3V0ZXI6CisJKgkJd2Fucm91dGVyIHNvdXJjZSBjb2RlCisKKy92YXIvbG9nOgorCXdhbnJvdXRlcgl3YW5yb3V0ZXIgc3RhcnQtdXAgbG9nIChjcmVhdGVkIGJ5IHRoZSBTZXR1cCBzY3JpcHQpCisKKy92YXIvbG9jazogIChvciAvdmFyL2xvY2svc3Vic3lzIGZvciBSZWRIYXQpCisJd2Fucm91dGVyCXdhbnJvdXRlciBsb2NrIGZpbGUgKGNyZWF0ZWQgYnkgdGhlIFNldHVwIHNjcmlwdCkKKworL3Vzci9sb2NhbC93YW5yb3V0ZXIvZmlybXdhcmU6CisJZnI1MTQuc2ZtCUZyYW1lIHJlbGF5IGZpcm13YXJlIGZvciBTYW5nb21hIFM1MDgvUzUxNCBjYXJkCisJY2R1YWw1MTQuc2ZtCUR1YWwgUG9ydCBDaXNjbyBIRExDIGZpcm13YXJlIGZvciBTYW5nb21hIFM1MDgvUzUxNCBjYXJkCisJcHBwNTE0LnNmbSAgICAgIFBQUCBGaXJtd2FyZSBmb3IgU2FuZ29tYSBTNTA4IGFuZCBTNTE0IGNhcmRzCisJeDI1XzUwOC5zZm0JWDI1IEZpcm13YXJlIGZvciBTYW5nb21hIFM1MDggY2FyZC4KKworCitSRVZJU0lPTiBISVNUT1JZCisKKzEuMC4wCURlY2VtYmVyIDMxLCAxOTk2CUluaXRpYWwgdmVyc2lvbgorCisxLjAuMQlKYW51YXJ5IDMwLCAxOTk3CVN0YXR1cyBhbmQgc3RhdGlzdGljcyBjYW4gYmUgcmVhZCB2aWEgL3Byb2MKKwkJCQlmaWxlc3lzdGVtIGVudHJpZXMuCisKKzEuMC4yICAgQXByaWwgMzAsIDE5OTcgICAgICAgICAgQWRkZWQgVURQIG1hbmFnZW1lbnQgdmlhIG1vbml0b3JzLgorCisxLjAuMwlKdW5lIDMsIDE5OTcJCVVEUCBtYW5hZ2VtZW50IGZvciBtdWx0aXBsZSBib2FyZHMgdXNpbmcgRnJhbWUKKwkJCQlSZWxheSBhbmQgUFBQCisJCQkJRW5hYmxlZCBjb250aW51b3VzIHRyYW5zbWlzc2lvbiBvZiBDb25maWd1cmUgCisJCQkJUmVxdWVzdCBQYWNrZXQgZm9yIFBQUCAoZm9yIDUwOCBvbmx5KQorCQkJCUNvbm5lY3Rpb24gVGltZW91dCBmb3IgUFBQIGNoYW5nZWQgZnJvbSA5MDAgdG8gMAorCQkJCUZsb3cgQ29udHJvbCBQcm9ibGVtIGZpeGVkIGZvciBGcmFtZSBSZWxheQorCisxLjAuNAlKdWx5IDEwLCAxOTk3CQlTNTA4L0ZUMSBtb25pdG9yaW5nIGNhcGFiaWxpdHkgaW4gZnBpcGVtb24gYW5kCisJCQkJcHBpcGVtb24gdXRpbGl0aWVzLgorCQkJCUNvbmZpZ3VyYWJsZSBUVEwgZm9yIFVEUCBwYWNrZXRzLgorCQkJCU11bHRpY2FzdCBhbmQgQnJvYWRjYXN0IElQIHNvdXJjZSBhZGRyZXNzZXMgYXJlCisJCQkJc2lsZW50bHkgZGlzY2FyZGVkLgorCisxLjAuNQlKdWx5IDI4LCAxOTk3CQlDb25maWd1cmFibGUgVDM5MSxUMzkyLE4zOTEsTjM5MixOMzkzIGZvciBGcmFtZQorCQkJCVJlbGF5IGluIHJvdXRlci5jb25mLgorCQkJCUNvbmZpZ3VyYWJsZSBNZW1vcnkgQWRkcmVzcyB0aHJvdWdoIHJvdXRlci5jb25mIAorCQkJCWZvciBGcmFtZSBSZWxheSwgUFBQIGFuZCBYLjI1LiAoY29tbWVudGluZyB0aGlzCisgCQkJCW91dCBlbmFibGVzIGF1dG8tZGV0ZWN0aW9uKS4KKwkJCQlGaXhlZCBmcmVlaW5nIHVwIHJlY2VpdmVkIGJ1ZmZlcnMgdXNpbmcga2ZyZWUoKQorIAkJCQlmb3IgRnJhbWUgUmVsYXkgYW5kIFguMjUuCisJCQkJUHJvdGVjdCBzZGxhX3BlZWsoKSBieSBjYWxsaW5nIHNhdmVfZmxhZ3MoKSwKKwkJCQljbGkoKSBhbmQgcmVzdG9yZV9mbGFncygpLgorCQkJCUNoYW5nZWQgbnVtYmVyIG9mIFRyYWNlIGVsZW1lbnRzIGZyb20gMzIgdG8gMjAKKwkJCQlBZGRlZCBETENJIHNwZWNpZmljIGRhdGEgbW9uaXRvcmluZyBpbiBGUElQRU1PTi4gCisyLjAuMAlOb3YgMDcsIDE5OTcJCUltcGxlbWVudGVkIHByb3RlY3Rpb24gb2YgUkFDRSBjb25kaXRpb25zIGJ5IAorCQkJCWNyaXRpY2FsIGZsYWdzIGZvciBGUkFNRSBSRUxBWSBhbmQgUFBQLgorCQkJCURMQ0kgTGlzdCBpbnRlcnJ1cHQgbW9kZSBpbXBsZW1lbnRlZC4KKwkJCQlJUFggc3VwcG9ydCBpbiBGUkFNRSBSRUxBWSBhbmQgUFBQLgorCQkJCUlQWCBTZXJ2ZXIgU3VwcG9ydCAoTUFSUykKKwkJCQlNb3JlIGRyaXZlciBzcGVjaWZpYyBzdGF0cyBpbmNsdWRlZCBpbiBGUElQRU1PTgorCQkJCWFuZCBQSVBFTU9OLgorCisyLjAuMQlOb3YgMjgsIDE5OTcJCUJ1ZyBGaXhlcyBmb3IgdmVyc2lvbiAyLjAuMC4KKwkJCQlQcm90ZWN0aW9uIG9mICJlbmFibGVfaXJxKCkiIHdoaWxlIAorCQkJCSJkaXNhYmxlX2lycSgpIiBoYXMgYmVlbiBlbmFibGVkIGZyb20gYW55IG90aGVyCisJCQkJcm91dGluZSAoZm9yIEZyYW1lIFJlbGF5LCBQUFAgYW5kIFgyNSkuCisJCQkJQWRkZWQgYWRkaXRpb25hbCBTdGF0cyBmb3IgRnBpcGVtb24gYW5kIFBwaXBlbW9uCisJCQkJSW1wcm92ZWQgTG9hZCBTaGFyaW5nIGZvciBtdWx0aXBsZSBib2FyZHMKKworMi4wLjIJRGVjIDA5LCAxOTk3CQlTdXBwb3J0IGZvciBQQVAgYW5kIENIQVAgZm9yIHBwcCBoYXMgYmVlbgorCQkJCWltcGxlbWVudGVkLgorCisyLjAuMwlBdWcgMTUsIDE5OTgJCU5ldyByZWxlYXNlIHN1cHBvcnRpbmcgQ2lzY28gSERMQywgQ0lSIGZvciBGcmFtZQorCQkJCXJlbGF5LCBEeW5hbWljIElQIGFzc2lnbm1lbnQgZm9yIFBQUCBhbmQgSW52ZXJzZQorCQkJCUFycCBzdXBwb3J0IGZvciBGcmFtZS1yZWxheS4gIE1hbiBQYWdlcyBhcmUgCisJCQkJaW5jbHVkZWQgZm9yIGJldHRlciBzdXBwb3J0IGFuZCBhIG5ldyB1dGlsaXR5CisJCQkJZm9yIGNvbmZpZ3VyaW5nIEZUMSBjYXJkcy4KKworMi4wLjQJRGVjIDA5LCAxOTk4CSAgICAgICAgRHVhbCBQb3J0IHN1cHBvcnQgZm9yIENpc2NvIEhETEMuCisJCQkJU3VwcG9ydCBmb3IgSERMQyAoTEFQQikgQVBJLgorCQkJCVN1cHBvcnRzIEJpU3luYyBTdHJlYW1pbmcgY29kZSBmb3IgUzUwMkUgCisJCQkJYW5kIFM1MDMgY2FyZHMuCisJCQkJU3VwcG9ydCBmb3IgU3RyZWFtaW5nIEhETEMgQVBJLgorCQkJCVByb3ZpZGVzIGEgQlNEIHNvY2tldCBpbnRlcmZhY2UgZm9yIAorCQkJCWNyZWF0aW5nIGFwcGxpY2F0aW9ucyB1c2luZyBCaVN5bmMKKyAgIAkJCQlzdHJlYW1pbmcuICAgICAgICAKKworMi4wLjUgICBBdWcgMDQsIDE5OTkgCQlDSERMQyBpbml0aWFsaXphdGluIGJ1ZyBmaXguCisJCQkJUFBQIGludGVycnVwdCBkcml2ZW4gZHJpdmVyOiAKKyAgCQkJCUZpeCB0byB0aGUgUFBQIGxpbmUgaGFuZ3VwIHByb2JsZW0uCisJCQkJTmV3IFBQUCBmaXJtd2FyZQorCQkJCUFkZGVkIGNvbW1lbnRzIHRvIHRoZSBzdGFydHVwIFNZU1RFTSBFUlJPUiBtZXNzYWdlcworCQkJCVhwaXBlbW9uIGRlYnVnZ2luZyBhcHBsaWNhdGlvbiBmb3IgdGhlIFgyNSBwcm90b2NvbAorCQkJCU5ldyBVU0VSX01BTlVBTC50eHQKKwkJCQlGaXhlZCB0aGUgb2RkIGJvdW5kYXJ5IDRieXRlIHdyaXRlcyB0byB0aGUgYm9hcmQuCisJCQkJQmlTeW5jIFN0cmVhbWluZyBjb2RlIGhhcyBiZWVuIHRha2VuIG91dC4gIAorCQkJCSBBdmFpbGFibGUgYXMgYSBwYXRjaC4KKwkJCQlTdHJlYW1pbmcgSERMQyBBUEkgaGFzIGJlZW4gdGFrZW4gb3V0LiAgCisJCQkJIEF2YWlsYWJsZSBhcyBhIHBhdGNoLiAgICAgICAgICAgICAgICAgCisKKzIuMC42ICAgQXVnIDE3LCAxOTk5CQlJbmNyZWFzZWQgZGVidWdnaW5nIGluIHN0YXR1cCBzY3JpcHRzCisJCQkJRml4ZWQgaW5zYWxsYXRpb24gYnVncyBmcm9tIDIuMC41CisJCQkJS2VybmVsIHBhdGNoIHdvcmtzIGZvciBib3RoIDIuMi4xMCBhbmQgMi4yLjExIGtlcm5lbHMuCisJCQkJVGhlcmUgaXMgbm8gZnVuY3Rpb25hbCBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byBwYWNrYWdlcyAgICAgICAgIAorCisyLjAuNyAgIEF1ZyAyNiwgMTk5OQkJbyAgTWVyZ2VkIFgyNUFQSSBjb2RlIGludG8gV0FOUElQRS4KKwkJCQlvICBGaXhlZCBhIG1lbWVvcnkgbGVhayBmb3IgWDI1QVBJCisJCQkJbyAgVXBkYXRlZCB0aGUgWDI1QVBJIGNvZGUgZm9yIDIuMi5YIGtlcm5lbHMuCisJCQkJbyAgSW1wcm92ZWQgTkVNIGhhbmRsaW5nLiAgIAorCisyLjEuMAlPY3QgMjUsIDE5OTkJCW8gTmV3IGNvZGUgZm9yIFM1MTQgUENJIENhcmQKKwkJCQlvIE5ldyBDSERMQyBhbmQgRnJhbWUgUmVsYXkgZHJpdmVycworCQkJCW8gUFBQIGFuZCBYMjUgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyByZWxlYXNlICAgIAorCisyLjEuMQlOb3YgMzAsIDE5OTkJCW8gUFBQIHN1cHBvcnQgZm9yIFM1MTQgUENJIENhcmRzCisKKzIuMS4zICAgQXByIDA2LCAyMDAwCQlvIFNvY2tldCBiYXNlZCB4MjVhcGkgCisJCQkJbyBTb2NrZXQgYmFzZWQgY2hkbGMgYXBpCisJCQkJbyBTb2NrZXQgYmFzZWQgZnIgYXBpCisJCQkJbyBEdWFsIFBvcnQgUmVjZWl2ZSBvbmx5IENIRExDIHN1cHBvcnQuCisJCQkJbyBBc3luY2hyb25vdXMgQ0hETEMgc3VwcG9ydCAoU2Vjb25kYXJ5IFBvcnQpCisJCQkJbyBjZmdmdDEgR1VJIGNzdS9kc3UgY29uZmlndXJhdG9yCisJCQkJbyB3YW5jZmcgR1VJIGNvbmZpZ3VyYXRpb24gZmlsZSAKKwkJCQkgIGNvbmZpZ3VyYXRvci4KKwkJCQlvIEFyY2hpdGVjdHVhbCBkaXJlY3RvcnkgY2hhbmdlcy4KKworYmV0YS0yLjEuNCBKdWwgMjAwMAkJbyBEeW5hbWljIGludGVyZmFjZSBjb25maWd1cmF0aW9uOgorCQkJCQlOZXR3b3JrIGludGVyZmFjZXMgcmVmbGVjdCB0aGUgc3RhdGUKKwkJCQkJb2YgcHJvdG9jb2wgbGF5ZXIuICBJZiB0aGUgcHJvdG9jb2wgYmVjb21lcworCQkJCQlkaXNjb25uZWN0ZWQsIGRyaXZlciB3aWxsIGJyaW5nIGRvd24KKwkJCQkJdGhlIGludGVyZmFjZS4gIE9uY2UgdGhlIHByb3RvY29sIHJlY29ubmVjdHMKKwkJCQkJdGhlIGludGVyZmFjZSB3aWxsIGJlIGJyb3VnaHQgdXAuIAorCQkJCQkKKwkJCQkJTm90ZTogVGhpcyBvcHRpb24gaXMgdHVybmVkIG9mZiBieSBkZWZhdWx0LgorCisJCQkJbyBEeW5hbWljIHdhbnJvdXRlciBzZXR1cCB1c2luZyAnd2FuY29uZmlnJzoKKwkJCQkJd2FuY29uZmlnIHV0aWxpdHkgY2FuIGJlIHVzZWQgdG8KKwkJCQkJc2h1dGRvd24scmVzdGFydCxzdGFydCBvciByZWNvbmZpZ3VyZSAKKwkJCQkJYSB2aXJ0dWFsIGNpcmN1aXQgZHluYW1pY2FsbHkuCisJCQkJICAgICAKKwkJCQkJRnJhbWUgUmVsYXk6ICBFYWNoIERMQ0kgY2FuIGJlOiAKKwkJCQkJCSAgICAgIGNyZWF0ZWQsc3RvcHBlZCxyZXN0YXJ0ZWQgYW5kIHJlY29uZmlndXJlZAorCQkJCQkJICAgICAgZHluYW1pY2FsbHkgdXNpbmcgd2FuY29uZmlnLgorCQkJCQkKKwkJCQkJCSAgICAgIGV4OiB3YW5jb25maWcgY2FyZCB3YW5waXBlMSBkZXYgd3AxX2ZyMTYgdXAKKwkJCQkgIAorCQkJCW8gV2Fucm91dGVyIHN0YXJ0dXAgdmlhIGNvbW1hbmQgbGluZSBhcmd1bWVudHM6CisJCQkJCXdhbmNvbmZpZyBhbHNvIHN1cHBvcnRzIHdhbnJvdXRlciBzdGFydHVwIHZpYSBjb21tYW5kIGxpbmUKKwkJCQkJYXJndW1lbnRzLiAgVGh1cywgdGhlcmUgaXMgbm8gbmVlZCB0byBjcmVhdGUgYSB3YW5waXBlIy5jb25mCisJCQkJCWNvbmZpZ3VyYXRpb24gZmlsZS4gIAorCisJCQkJbyBTb2NrZXQgYmFzZWQgeDI1YXBpIHVwZGF0ZS9idWcgZml4ZXMuCisJCQkJCUFkZGVkIHN1cHBvcnQgZm9yIExDTiBudW1iZXJzIGdyZWF0ZXIgdGhhbiAyNTUuCisJCQkJCU9wdGlvbiB0byBwYXNzIHVwIG1vZGVtIG1lc3NhZ2VzLgorCQkJCQlQcm92aWRlZCBhIFBDSSBJUlEgY2hlY2ssIHNvIGEgc2luZ2xlIFM1MTQKKwkJCQkJY2FyZCBpcyBndWFyYW50ZWVkIHRvIGhhdmUgYSBub24tc2hhcmluZyBpbnRlcnJ1cHQuCisKKwkJCQlvIEZpeGVzIHRvIHRoZSB3YW5jZmcgdXRpbGl0eS4KKwkJCQlvIE5ldyBGVDEgZGVidWdnaW5nIHN1cHBvcnQgdmlhICpwaXBlbW9uIHV0aWxpdGllcy4KKwkJCQlvIEZyYW1lIFJlbGF5IEFSUCBzdXBwb3J0IEVuYWJsZWQuCisKK2JldGEzLTIuMS40IEp1bCAyMDAwCQlvIFgyNSBNX0JJVCBQcm9ibGVtIGZpeC4KKwkJCQlvIEFkZGVkIHRoZSBNdWx0aS1Qb3J0IFBQUAorCQkJCSAgVXBkYXRlZCB1dGlsaXRlcyBmb3IgdGhlIE11bHRpLVBvcnQgUFBQLgorCisyLjEuNAlBdXQgMjAwMAorCQkJCW8gSW4gWDI1QVBJOgorCQkJCQlNYXhpbXVtIHBhY2tldCBhbiBhcHBsaWNhdGlvbiBjYW4gc2VuZAorCQkJCQl0byB0aGUgZHJpdmVyIGhhcyBiZWVuIGV4dGVuZGVkIHRvIDQwOTYgYnl0ZXMuCisKKwkJCQkJRml4ZWQgdGhlIHgyNSBzdGFydHVwIGJ1Zy4gRW5hYmxlIAorCQkJCQljb21tdW5pY2F0aW9ucyBvbmx5IGFmdGVyIGFsbCBpbnRlcmZhY2VzCisJCQkJCWNvbWUgdXAuICBISUdIIFNWQy9QVkMgaXMgdXNlZCB0byBjYWxjdWxhdGUKKwkJCQkJdGhlIG51bWJlciBvZiBjaGFubmVscy4KKwkJCQkJRW5hYmxlIHByb3RvY29sIG9ubHkgYWZ0ZXIgYWxsIGludGVyZmFjZXMKKwkJCQkJYXJlIGVuYWJsZWQuCisKKwkJCQlvIEFkZGVkIGFuIGV4dHJhIHN0YXRlIHRvIHRoZSBGVDEgY29uZmlnLCBrZXJuZWwgbW9kdWxlLgorCQkJCW8gVXBkYXRlZCB0aGUgcGlwZW1vbiBkZWJ1Z2dlcnMuCisKKwkJCQlvIEJsb2NrZWQgdGhlIE11bHRpLVBvcnQgUFBQIGZyb20gcnVubmluZyBvbiBrZXJuZWxzCisJCQkJICAyLjIuMTYgb3IgZ3JlYXRlciwgZHVlIHRvIHN5bmNwcHAga2VybmVsIG1vZHVsZQorCQkJCSAgY2hhbmdlLiAKKwkgIAorYmV0YTEtMi4xLjUgCU5vdiAxNSAyMDAwCisJCQkJbyBGaXhlZCB0aGUgTXVsaXRQb3J0IFBQUCBTdXBwb3J0IGZvciBrZXJuZWxzIDIuMi4xNiBhbmQgYWJvdmUuCisJCQkJICAyLjIuWCBrZXJuZWxzIG9ubHkKKworCQkJCW8gU2VjdXJlZCB0aGUgZHJpdmVyIFVEUCBkZWJ1Z2dpbmcgY2FsbHMKKwkJCQkJLSBBbGwgaWxsZWdhbCBuZXRvd3JrIGRlYnVnZ2luZyBjYWxscyBhcmUgcmVwb3J0ZWQgdG8KKwkJCQkJICB0aGUgbG9nLgorCQkJCQktIERlZmluZWQgYSBzZXQgb2YgYWxsb3dlZCBjb21tYW5kcywgYWxsIG90aGVyIGRlbmllZC4KKwkJCQkJCisJCQkJbyBDcGlwZW1vbgorCQkJCQktIEFkZGVkIHNldCBGVDEgY29tbWFuZHMgdG8gdGhlIGNwaXBlbW9uLiBUaHVzIENTVS9EU1UKKwkJCQkJICBjb25maWd1cmFpdG9uIGNhbiBiZSBwZXJmb3JtZWQgdXNpbmcgY3BpcGVtb24uCisJCQkJCSAgQWxsIHN5c3RlbXMgdGhhdCBjYW5ub3QgcnVuIGNmZ2Z0MSBHVUkgdXRpbGl0eSBzaG91bGQKKwkJCQkJICB1c2UgY3BpcGVtb24gdG8gY29uZmlndXJlIHRoZSBvbiBib2FyZCBDU1UvRFNVLgorCisKKwkJCQlvIEtleWJvYXJkIExlZCBNb25pdG9yL0RlYnVnZ2VyCisJCQkJCS0gQSBuZXcgdXRpbHR5IC91c3Ivc2Jpbi93cGtiZG1vbiB1c2VzIGtleWJvYXJkIGxlZHMKKwkJCQkJICB0byBjb252ZXkgb3BlcmF0aW5hbCBzdGF0aXN0aWMgaW5mb3JtYXRpb24gb2YgdGhlIAorCQkJCQkgIFNhbmdvbWEgV0FOUElQRSBjYXJkcy4KKwkJCQkJTlVNX0xPQ0sgICAgPSBMaW5lIFN0YXRlICAoT249Y29ubmVjdGVkLCAgICBPZmY9ZGlzY29ubmVjdGVkKQorCQkJCQlDQVBTX0xPQ0sgICA9IFR4IGRhdGEgICAgIChPbj10cmFuc21pdHRpbmcsIE9mZj1ubyB0eCBkYXRhKQorCQkJCQlTQ1JPTExfTE9DSyA9IFJ4IGRhdGEgICAgIChPbj1yZWNlaXZpbmcsICAgIE9mZj1ubyByeCBkYXRhCisJCQkJCQorCQkJCW8gSGFyZHdhcmUgcHJvYmUgb24gbW9kdWxlIGxvYWQgYW5kIGR5bmFtaWMgZGV2aWNlIGFsbG9jYXRpb24KKwkJCQkJLSBEdXJpbmcgV0FOUElQRSBtb2R1bGUgbG9hZCwgYWxsIFNhbmdvbWEgY2FyZHMgYXJlIHByb2JlZAorCQkJCQkgIGFuZCBmb3VuZCBpbmZvcm1hdGlvbiBpcyBwcmludGVkIGluIHRoZSAvdmFyL2xvZy9tZXNzYWdlcy4KKwkJCQkJLSBJZiBubyBjYXJkcyBhcmUgZm91bmQsIHRoZSBtb2R1bGUgbG9hZCBmYWlscy4KKwkJCQkJLSBBcHByb3ByaWF0ZSBudW1iZXIgb2YgZGV2aWNlcyBhcmUgZHluYW1pY2FsbHkgbG9hZGVkIAorCQkJCQkgIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgU2FuZ29tYSBjYXJkcyBmb3VuZC4KKworCQkJCQkgIE5vdGU6IFRoZSBrZXJuZWwgY29uZmlndXJhaXRvbiBvcHRpb24gCisJCQkJCQlDT05GSUdfV0FOUElQRV9DQVJEUyBoYXMgYmVlbiB0YWtlbiBvdXQuCisJCQkJCQorCQkJCW8gRml4ZWQgdGhlIEZyYW1lIFJlbGF5IGFuZCBDaGRsYyBuZXR3b3JrIGludGVyZmFjZXMgc28gdGhleSBhcmUKKwkJCQkgIGNvbXBhdGlibGUgd2l0aCBsaWJwY2FwIGxpYnJhcmllcy4gIE1lYW5pbmcsIHRjcGR1bXAsIHNub3J0LAorCQkJCSAgZXRoZXJlYWwsIGFuZCBhbGwgb3RoZXIgcGFja2V0IHNuaWZmZXJzIGFuZCBkZWJ1Z2dlcnMgd29yayBvbgorCQkJCSAgYWxsIFdBTlBJUEUgbmV0b3dyayBpbnRlcmZhY2VzLgorCQkJCQktIFNldCB0aGUgbmV0d29yayBpbnRlcmZhY2UgZW5jb2RpbmcgdHlwZSB0byBBUlBIUkRfUFBQLgorCQkJCQkgIFRoaXMgdGVsbCB0aGUgc25pZmZlcnMgdGhhdCBkYXRhIG9idGFpbmVkIGZyb20gdGhlCisJCQkJCSAgbmV0d29yayBpbnRlcmZhY2UgaXMgaW4gcHVyZSBJUCBmb3JtYXQuCisJCQkJICBGaXggZm9yIDIuMi5YIGtlcm5lbHMgb25seS4KKwkJCQkKKwkJCQlvIFRydWUgaW50ZXJmYWNlIGVuY29kaW5nIG9wdGlvbiBmb3IgRnJhbWUgUmVsYXkgYW5kIENIRExDCisJCQkJCS0gVGhlIGFib3ZlIGZpeCBzZXRzIHRoZSBuZXR3b3JrIGludGVyZmFjZSBlbmNvZGluZworCQkJCQkgIHR5cGUgdG8gQVJQSFJEX1BQUCwgaG93ZXZlciBzb21lIGN1c3RvbWVycyB1c2UKKwkJCQkJICB0aGUgZW5jb2RpbmcgaW50ZXJmYWNlIHR5cGUgdG8gZGV0ZXJtaW5lIHRoZQorCQkJCQkgIHByb3RvY29sIHJ1bm5pbmcuICBUaGVyZWZvcmUsIHRoZSBUVVJFIEVOQ09ESU5HCisJCQkJCSAgb3B0aW9uIHdpbGwgc2V0IHRoZSBpbnRlcmZhY2UgdHlwZSBiYWNrIHRvIHRoZQorCQkJCQkgIG9yaWdpbmFsIHZhbHVlLiAgCisKKwkJCQkJICBOT1RFOiBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHdpdGggRnJhbWUgUmVsYXkgYW5kIENIRExDCisJCQkJCQlsaWJwY2FwIGxpYnJhcnkgc3VwcG9ydCB3aWxsIGJlIGJyb2tlbi4gIAorCQkJCQkJaS5lLiB0Y3BkdW1wIHdpbGwgbm90IHdvcmsuCisJCQkJCUZpeCBmb3IgMi4yLnggS2VybmVscyBvbmx5LgorCQkJCQkJCisJCQkJbyBFdGhlcm5ldCBCcmlkZ2luZCBvdmVyIEZyYW1lIFJlbGF5CisJCQkJCS0gVGhlIEZyYW1lIFJlbGF5IGJyaWRnaW5nIGhhcyBiZWVuIGRldmVsb3BlZCBieSAKKwkJCQkJICBLcmlzdGlhbiBIb2ZmbWFubiBhbmQgTWFyayBXZWxscy4gIAorCQkJCQktIFRoZSBMaW51eCBrZXJuZWwgYnJpZGdlIGlzIHVzZWQgdG8gc2VuZCBldGhlcm5ldCAKKwkJCQkJICBkYXRhIG92ZXIgdGhlIGZyYW1lIHJlbGF5IGxpbmtzLgorCQkJCQlGb3IgMi4yLlggS2VybmVscyBvbmx5LgorCisJCQkJbyBBZGRlZCBleHRlbnNpdmUgMi4wLlggc3VwcG9ydC4gTW9zdCBuZXcgZmVhdHVyZXMgb2YKKwkJCQkgIDIuMS41IGZvciBwcm90b2NvbHMgRnJhbWUgUmVsYXksIFBQUCBhbmQgQ0hETEMgYXJlCisJCQkJICBzdXBwb3J0ZWQgdW5kZXIgMi4wLlgga2VybmVscy4gCisKK2JldGExLTIuMi4wIAlEZWMgMzAgMjAwMAorCQkJCW8gVXBkYXRlZCBkcml2ZXJzIGZvciAyLjQuWCBrZXJuZWxzLgorCQkJCW8gVXBkYXRlZCBkcml2ZXJzIGZvciBTTVAgc3VwcG9ydC4KKwkJCQlvIFgyNUFQSSBpcyBub3cgYWJsZSB0byBzaGFyZSBQQ0kgaW50ZXJydXB0cy4KKwkJCQlvIFRvb2sgb3V0IGEgZ2VuZXJhbCBwb2xsaW5nIHJvdXRpbmUgdGhhdCB3YXMgdXNlZAorCQkJCSAgb25seSBieSBYMjVBUEkuIAorCQkJCW8gQWRkZWQgYXBwcm9wcmlhdGUgbG9ja3MgdG8gdGhlIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uCisJCQkJICBjb2RlLgorCQkJCW8gRml4ZWQgYSBidWcgaW4gdGhlIGtleWJvYXJkIGRlYnVnIG1vbml0b3IuCisKK2JldGEyLTIuMi4wCUphbiA4IDIwMDEKKwkJCQlvIFBhdGNoZXMgZm9yIDIuNC4wIGtlcm5lbAorCQkJCW8gUGF0Y2hlcyBmb3IgMi4yLjE4IGtlcm5lbAorCQkJCW8gTWlub3IgdXBkYXRlcyB0byBQUFAgYW5kIENITERDIGRyaXZlcnMuCisJCQkJICBOb3RlOiBObyBmdW5jdGluYWwgZGlmZmVyZW5jZS4gCisKK2JldGEzLTIuMi45CUphbiAxMCAyMDAxCisJCQkJbyBJIG1pc3NlZCB0aGUgMi4yLjE4IGtlcm5lbCBwYXRjaGVzIGluIGJldGEyLTIuMi4wCisJCQkJICByZWxlYXNlLiAgVGhleSBhcmUgaW5jbHVkZWQgaW4gdGhpcyByZWxlYXNlLgorCitTdGFibGUgUmVsZWFzZQorMi4yLjAJCUZlYiAwMSAyMDAxCisJCQkJbyBCdWcgZml4IGluIHdhbmNmZyBHVUkgY29uZmlndXJhdG9yLgorCQkJCQlUaGUgZWRpdCBmdW5jdGlvbiBkaWRuJ3Qgd29yayBwcm9wZXJseS4KKworCitiYXRhMS0yLjIuMQlGZWIgMDkgMjAwMQorCQkJbyBXQU5QSVBFIFRUWSBEcml2ZXIgZW11bGF0aW9uLiAKKwkJCSAgVHdvIG1vZGVzIG9mIG9wZXJhdGlvbiBTeW5jIGFuZCBBc3luYy4KKwkJCQlTeW5jOiBVc2luZyB0aGUgUFBQRCBkYWVtb24sIGtlcm5lbCBTeW5jUFBQIGxheWVyCisJCQkJICAgICAgYW5kIHRoZSBXYW5waXBlIHN5bmMgVFRZIGRyaXZlcjogYSBQUFAgcHJvdG9jb2wgCisJCQkJICAgICAgY29ubmVjdGlvbiBjYW4gYmUgZXN0YWJsaXNoZWQgdmlhIFNhbmdvbWEgYWRhcHRlciwgb3ZlcgorCQkJCSAgICAgIGEgVDEgbGVhc2VkIGxpbmUuCisJCQkKKwkJCQkgICAgICBUaGUgMi40LjAga2VybmVsIFBQUCBsYXllciBzdXBwb3J0cyBNVUxUSUxJTksKKwkJCQkgICAgICBwcm90b2NvbCwgdGhhdCBjYW4gYmUgdXNlZCB0byBidW5kbGUgYW55IG51bWJlciBvZiBTYW5nb21hCisJCQkJICAgICAgYWRhcHRlcnMgKFQxIGxpbmVzKSBpbnRvIG9uZSwgdW5kZXIgYSBzaW5nbGUgSVAgYWRkcmVzcy4KKwkJCQkgICAgICBUaHVzLCBlZmZpY2llbnRseSBvYnRhaW5pbmcgbXVsdGlwbGUgVDEgdGhyb3VnaHB1dC4gCisKKwkJCQkgICAgICBOT1RFOiBUaGUgcmVtb3RlIHNpZGUgbXVzdCBhbHNvIGltcGxlbWVudCBNVUxUSUxJTksgUFBQCisJCQkJCSAgICBwcm90b2NvbC4KKworCQkJCUFzeW5jOlVzaW5nIHRoZSBQUFBEIGRhZW1vbiwga2VybmVsIEFzeW5jUFBQIGxheWVyCisJCQkJICAgICAgYW5kIHRoZSBXQU5QSVBFIGFzeW5jIFRUWSBkcml2ZXI6IGEgUFBQIHByb3RvY29sCisJCQkJICAgICAgY29ubmVjdGlvbiBjYW4gYmUgZXN0YWJsaXNoZWQgdmlhIFNhbmdvbWEgYWRhcHRlciBhbmQKKwkJCQkgICAgICBhIG1vZGVtLCBvdmVyIGEgdGVsZXBob25lIGxpbmUuCisKKwkJCQkgICAgICBUaHVzLCB0aGUgV0FOUElQRSBhc3luYyBUVFkgZHJpdmVyIHNpbXVsYXRlcyBhIHNlcmlhbAorCQkJCSAgICAgIFRUWSBkcml2ZXIgdGhhdCB3b3VsZCBub3JtYWxseSBiZSB1c2VkIHRvIGludGVyZmFjZSB0aGUgCisJCQkJICAgICAgTU9ERU0gdG8gdGhlIGxpbnV4IGtlcm5lbC4KKwkJCQkKKwkJCW8gV0FOUElQRSBQUFAgQmFja3VwIFV0aWxpdHkKKwkJCQlUaGlzIHV0aWxpdHkgd2lsbCBtb25pdG9yIHRoZSBzdGF0ZSBvZiB0aGUgUFBQIFQxIGxpbmUuCisJCQkJSW4gY2FzZSBvZiBmYWlsdXJlLCBhIGRpYWwgdXAgY29ubmVjdGlvbiB3aWxsIGJlIGVzdGFibGlzaGVkCisJCQkJdmlhIHBwcGQgZGFlbW9uLCBldGhlciB2aWEgYSBzZXJpYWwgdHR5IGRyaXZlciAoc2VyaWFsIHBvcnQpLCAKKwkJCQlvciBhIFdBTlBJUEUgYXN5bmMgVFRZIGRyaXZlciAoaW4gY2FzZSBzZXJpYWwgcG9ydCBpcyB1bmF2YWlsYWJsZSkuCisJCQkJCisJCQkJRnVydGhlcm1vcmUsIHdoaWxlIGluIGRpYWwgdXAgbW9kZSwgdGhlIHByaW1hcnkgUFBQIFQxIGxpbmsKKwkJCQl3aWxsIGJlIG1vbml0b3JlZCBmb3Igc2lnbnMgb2YgbGlmZS4gIAorCisJCQkJSWYgdGhlIFBQUCBUMSBsaW5rIGNvbWVzIGJhY2sgdG8gbGlmZSwgdGhlIGRpYWwgdXAgY29ubmVjdGlvbgorCQkJCXdpbGwgYmUgc2h1dGRvd24gYW5kIFQxIGxpbmUgcmUtZXN0YWJsaXNoZWQuCisJCQkKKworCQkJbyBOZXcgU2V0dXAgaW5zdGFsbGF0aW9uIHNjcmlwdC4KKwkJCQlPcHRpb24gdG8gVVBHUkFERSBkZXZpY2UgZHJpdmVycyBpZiB0aGUga2VybmVsIHNvdXJjZSBoYXMKKwkJCQlhbHJlYWR5IGJlZW4gcGF0Y2hlZCB3aXRoIFdBTlBJUEUuCisKKwkJCQlPcHRpb24gdG8gQ09NUElMRSBXQU5QSVBFIG1vZHVsZXMgYWdhaW5zdCB0aGUgY3VycmVudGx5IAorCQkJCXJ1bm5pbmcga2VybmVsLCB0aHVzIG5vIG5lZWQgZm9yIG1hbnVhbCBrZXJuZWwgYW5kIG1vZHVsZQorCQkJCXJlLWNvbXBpbGF0aW4uCisJCQkKKwkJCW8gVXBkYXRlcyBhbmQgQnVnIEZpeGVzIHRvIHdhbmNmZyB1dGlsaXR5LgorCitiYXRhMi0yLjIuMQlGZWIgMjAgMjAwMQorCisJCQlvIEJ1ZyBmaXhlcyB0byB0aGUgQ0hETEMgZGV2aWNlIGRyaXZlcnMuCisJCQkJVGhlIGRyaXZlciBoYWQgY29tcGlsYXRpb24gcHJvYmxlbXMgdW5kZXIga2VybmVscworCQkJCTIuMi4xNCBvciBsb3dlci4KKworCQkJbyBCdWcgZml4ZXMgdG8gdGhlIFNldHVwIGluc3RhbGxhdGlvbiBzY3JpcHQuCisJCQkJVGhlIGRldmljZSBkcml2ZXJzIGNvbXBpbGF0aW9uIG9wdGlvbnMgZGlkbid0IHdvcmsKKwkJCQlwcm9wZXJseS4KKworCQkJbyBVcGRhdGUgdG8gdGhlIHdwYmFja3VwZCBkYWVtb24uICAKKwkJCQlPcHRpbWl6ZWQgdGhlIGNyb3NzLW92ZXIgdGltZXMsIGJldHdlZW4gdGhlIHByaW1hcnkKKwkJCQlsaW5rIGFuZCB0aGUgYmFja3VwIGRpYWx1cC4KKworYmV0YTMtMi4yLjEJTWFyIDAyIDIwMDEKKwkJCW8gUGF0Y2hlcyBmb3IgMi40LjIga2VybmVsLgorCisJCQlvIEJ1ZyBmaXhlcyB0byB1dGlsLyBtYWtlIGZpbGVzLgorCQkJbyBCdWcgZml4ZXMgdG8gdGhlIFNldHVwIGluc3RhbGxhdGlvbiBzY3JpcHQuCisKKwkJCW8gVG9vayBvdXQgdGhlIGJhY2t1cGQgc3VwcG9ydCBhbmQgbWFkZSBpdCBpbnRvCisJCQkgIGFzIHNlcGFyYXRlIHBhY2thZ2UuCisJCQkgIAorYmV0YTQtMi4yLjEgICAgIE1hciAxMiAyMDAxCisKKwkJbyBGaXggdG8gdGhlIEZyYW1lIFJlbGF5IERldmljZSBkcml2ZXIuCisJCQlJUFNBQyBzZW5kcyBhIHBhY2tldCBvZiB6ZXJvIGxlbmd0aAorCQkJaGVhZGVyIHRvIHRoZSBmcmFtZSByZWxheSBkcml2ZXIuICBUaGUKKwkJCWRyaXZlciB0cmllcyB0byBwdXNoIGl0cyBvd24gMiBieXRlIGhlYWRlcgorCQkJaW50byB0aGUgcGFja2V0LCB3aGljaCBjYXVzZXMgdGhlIGRyaXZlciB0bworCQkJY3Jhc2guCisKKwkJbyBGaXggdGhlIFdBTlBJUEUgcmUtY29uZmlndXJhdGlvbiBjb2RlLgorCQkJQnVnIHdhcyBmb3VuZCBieSB0cnlpbmcgdG8gcnVuICB0aGUgY2ZnZnQxIHdoaWxlIHRoZQorCQkJaW50ZXJmYWNlIHdhcyBhbHJlYWR5IHJ1bm5pbmcuICAKKworCQlvIFVwZGF0ZXMgdG8gY2ZnZnQxLgorCQkJV3JpdGVzIGEgd2FucGlwZSMuY2ZnZnQxIGNvbmZpZ3VyYXRpb24gZmlsZQorCQkJb25jZSB0aGUgQ1NVL0RTVSBpcyBjb25maWd1cmVkLiBUaGlzIGZpbGUgY2FuCisJCQlob2xkcyB0aGUgY3VycmVudCBDU1UvRFNVIGNvbmZpZ3VyYXRpb24uCisKKworCis+Pj4+Pj4gRU5EIE9GIFJFQURNRSA8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDwKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvd2FucGlwZS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvd2FucGlwZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVhMjBjZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy93YW5waXBlLnR4dApAQCAtMCwwICsxLDYyMiBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitMaW51eCBXQU4gUm91dGVyIFV0aWxpdGllcyBQYWNrYWdlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1ZlcnNpb24gMi4yLjEgCitNYXIgMjgsIDIwMDEKK0F1dGhvcjogTmVuYWQgQ29yYmljIDxuY29yYmljQHNhbmdvbWEuY29tPgorQ29weXJpZ2h0IChjKSAxOTk1LTIwMDEgU2FuZ29tYSBUZWNobm9sb2dpZXMgSW5jLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lOVFJPRFVDVElPTgorCitXaWRlIEFyZWEgTmV0d29ya3MgKFdBTnMpIGFyZSB1c2VkIHRvIGludGVyY29ubmVjdCBMb2NhbCBBcmVhIE5ldHdvcmtzIChMQU5zKQorYW5kL29yIHN0YW5kLWFsb25lIGhvc3RzIG92ZXIgdmFzdCBkaXN0YW5jZXMgd2l0aCBkYXRhIHRyYW5zZmVyIHJhdGVzCitzaWduaWZpY2FudGx5IGhpZ2hlciB0aGFuIHRob3NlIGFjaGlldmFibGUgd2l0aCBjb21tb25seSB1c2VkIGRpYWwtdXAKK2Nvbm5lY3Rpb25zLgorCitVc3VhbGx5IGFuIGV4dGVybmFsIGRldmljZSBjYWxsZWQgYFdBTiByb3V0ZXInIHNpdHRpbmcgb24geW91ciBsb2NhbCBuZXR3b3JrCitvciBjb25uZWN0ZWQgdG8geW91ciBtYWNoaW5lJ3Mgc2VyaWFsIHBvcnQgcHJvdmlkZXMgcGh5c2ljYWwgY29ubmVjdGlvbiB0bworV0FOLiAgQWx0aG91Z2ggcm91dGVyJ3Mgam9iIG1heSBiZSBhcyBzaW1wbGUgYXMgdGFraW5nIHlvdXIgbG9jYWwgbmV0d29yawordHJhZmZpYywgY29udmVydGluZyBpdCB0byBXQU4gZm9ybWF0IGFuZCBwaXBpbmcgaXQgdGhyb3VnaCB0aGUgV0FOIGxpbmssIHRoZXNlCitkZXZpY2VzIGFyZSBub3RvcmlvdXNseSBleHBlbnNpdmUsIHdpdGggcHJpY2VzIGFzIG11Y2ggYXMgMiAtIDUgdGltZXMgaGlnaGVyCit0aGVuIHRoZSBwcmljZSBvZiBhIHR5cGljYWwgUEMgYm94LgorCitBbHRlcm5hdGl2ZWx5LCBjb25zaWRlcmluZyByb2J1c3RuZXNzIGFuZCBtdWx0aXRhc2tpbmcgY2FwYWJpbGl0aWVzIG9mIExpbnV4LAorYW4gaW50ZXJuYWwgcm91dGVyIGNhbiBiZSBidWlsdCAobW9zdCByb3V0ZXJzIHVzZSBzb21lIHNvcnQgb2Ygc3RyaXBwZWQgZG93bgorVW5peC1saWtlIG9wZXJhdGluZyBzeXN0ZW0gYW55d2F5KS4gV2l0aCBhIG51bWJlciBvZiByZWxhdGl2ZWx5IGluZXhwZW5zaXZlIFdBTgoraW50ZXJmYWNlIGNhcmRzIGF2YWlsYWJsZSBvbiB0aGUgbWFya2V0LCBhIHBlcmZlY3RseSB1c2FibGUgcm91dGVyIGNhbiBiZQorYnVpbHQgZm9yIGxlc3MgdGhhbiBoYWxmIGEgcHJpY2Ugb2YgYW4gZXh0ZXJuYWwgcm91dGVyLiAgWWV0IGEgTGludXggYm94CithY3RpbmcgYXMgYSByb3V0ZXIgY2FuIHN0aWxsIGJlIHVzZWQgZm9yIG90aGVyIHB1cnBvc2VzLCBzdWNoIGFzIGZpcmUtd2FsbGluZywKK3J1bm5pbmcgRlRQLCBXV1cgb3IgRE5TIHNlcnZlciwgZXRjLgorCitUaGlzIGtlcm5lbCBtb2R1bGUgaW50cm9kdWNlcyB0aGUgbm90aW9uIG9mIGEgV0FOIExpbmsgRHJpdmVyIChXTEQpIHRvIExpbnV4CitvcGVyYXRpbmcgc3lzdGVtIGFuZCBwcm92aWRlcyBnZW5lcmljIGhhcmR3YXJlLWluZGVwZW5kZW50IHNlcnZpY2VzIGZvciBzdWNoCitkcml2ZXJzLiAgV2h5IGNhbiBleGlzdGluZyBMaW51eCBuZXR3b3JrIGRldmljZSBpbnRlcmZhY2Ugbm90IGJlIHVzZWQgZm9yCit0aGlzIHB1cnBvc2U/ICBXZWxsLCBpdCBjYW4uICBIb3dldmVyLCB0aGVyZSBhcmUgYSBmZXcga2V5IGRpZmZlcmVuY2VzIGJldHdlZW4KK2EgdHlwaWNhbCBuZXR3b3JrIGludGVyZmFjZSAoZS5nLiBFdGhlcm5ldCkgYW5kIGEgV0FOIGxpbmsuCisKK01hbnkgV0FOIHByb3RvY29scywgc3VjaCBhcyBYLjI1IGFuZCBmcmFtZSByZWxheSwgYWxsb3cgZm9yIG11bHRpcGxlIGxvZ2ljYWwKK2Nvbm5lY3Rpb25zIChrbm93biBhcyBgdmlydHVhbCBjaXJjdWl0cycgaW4gWC4yNSB0ZXJtaW5vbG9neSkgb3ZlciBhIHNpbmdsZQorcGh5c2ljYWwgbGluay4gIEVhY2ggc3VjaCB2aXJ0dWFsIGNpcmN1aXQgbWF5IChhbmQgYWxtb3N0IGFsd2F5cyBkb2VzKSBsZWFkCit0byBhIGRpZmZlcmVudCBnZW9ncmFwaGljYWwgbG9jYXRpb24gYW5kLCB0aGVyZWZvcmUsIGRpZmZlcmVudCBuZXR3b3JrLiAgQXMgYQorcmVzdWx0LCBpdCBpcyB0aGUgdmlydHVhbCBjaXJjdWl0LCBub3QgdGhlIHBoeXNpY2FsIGxpbmssIHRoYXQgcmVwcmVzZW50cyBhCityb3V0ZSBhbmQsIHRoZXJlZm9yZSwgYSBuZXR3b3JrIGludGVyZmFjZSBpbiBMaW51eCB0ZXJtcy4KKworVG8gZnVydGhlciBjb21wbGljYXRlIHRoaW5ncywgdmlydHVhbCBjaXJjdWl0cyBhcmUgdXN1YWxseSB2b2xhdGlsZSBpbiBuYXR1cmUKKyhleGNsdWRpbmcgc28gY2FsbGVkIGBwZXJtYW5lbnQnIHZpcnR1YWwgY2lyY3VpdHMgb3IgUFZDcykuICBXaXRoIGFsbW9zdCBubwordGltZSByZXF1aXJlZCB0byBzZXQgdXAgYW5kIHRlYXIgZG93biBhIHZpcnR1YWwgY2lyY3VpdCwgaXQgaXMgaGlnaGx5IGRlc2lyYWJsZQordG8gaW1wbGVtZW50IG9uLWRlbWFuZCBjb25uZWN0aW9ucyBpbiBvcmRlciB0byBtaW5pbWl6ZSBuZXR3b3JrIGNoYXJnZXMuICBTbwordW5saWtlIGEgdHlwaWNhbCBuZXR3b3JrIGRyaXZlciwgdGhlIFdBTiBkcml2ZXIgbXVzdCBiZSBhYmxlIHRvIGhhbmRsZSBtdWx0aXBsZQorbmV0d29yayBpbnRlcmZhY2VzIGFuZCBjb3BlIGFzIG11bHRpcGxlIHZpcnR1YWwgY2lyY3VpdHMgY29tZSBpbnRvIGV4aXN0ZW5jZQorYW5kIGdvIGF3YXkgZHluYW1pY2FsbHkuCisgCitMYXN0LCBidXQgbm90IGxlYXN0LCBXQU4gY29uZmlndXJhdGlvbiBpcyBtdWNoIG1vcmUgY29tcGxleCB0aGFuIHRoYXQgb2Ygc2F5CitFdGhlcm5ldCBhbmQgbWF5IHdlbGwgYW1vdW50IHRvIHNldmVyYWwgZG96ZW5zIG9mIHBhcmFtZXRlcnMuICBTb21lIG9mIHRoZW0KK2FyZSAibGluay13aWRlIiAgd2hpbGUgb3RoZXJzIGFyZSB2aXJ0dWFsIGNpcmN1aXQtc3BlY2lmaWMuICBUaGUgc2FtZSBob2xkcwordHJ1ZSBmb3IgV0FOIHN0YXRpc3RpY3Mgd2hpY2ggaXMgYnkgZmFyIG1vcmUgZXh0ZW5zaXZlIGFuZCBleHRyZW1lbHkgdXNlZnVsCit3aGVuIHRyb3VibGVzaG9vdGluZyBXQU4gY29ubmVjdGlvbnMuICBFeHRlbmRpbmcgdGhlIGlmY29uZmlnIHV0aWxpdHkgdG8gc3VpdAordGhlc2UgbmVlZHMgbWF5IGJlIHBvc3NpYmxlLCBidXQgZG9lcyBub3Qgc2VlbSBxdWl0ZSByZWFzb25hYmxlLiAgVGhlcmVmb3JlLCBhCitXQU4gY29uZmlndXJhdGlvbiB1dGlsaXR5IGFuZCBjb3JyZXNwb25kaW5nIGFwcGxpY2F0aW9uIHByb2dyYW1tZXIncyBpbnRlcmZhY2UKK2lzIG5lZWRlZCBmb3IgdGhpcyBwdXJwb3NlLgorCitNb3N0IG9mIHRoZXNlIHByb2JsZW1zIGFyZSB0YWtlbiBjYXJlIG9mIGJ5IHRoaXMgbW9kdWxlLiAgSXRzIGdvYWwgaXMgdG8KK3Byb3ZpZGUgYSB1c2VyIHdpdGggbW9yZS1vci1sZXNzIHN0YW5kYXJkIGxvb2sgYW5kIGZlZWwgZm9yIGFsbCBXQU4gZGV2aWNlcyBhbmQKK2Fzc2lzdCBhIFdBTiBkZXZpY2UgZHJpdmVyIHdyaXRlciBieSBwcm92aWRpbmcgY29tbW9uIHNlcnZpY2VzLCBzdWNoIGFzOgorCisgbyBVc2VyLWxldmVsIGludGVyZmFjZSB2aWEgL3Byb2MgZmlsZSBzeXN0ZW0KKyBvIENlbnRyYWxpemVkIGNvbmZpZ3VyYXRpb24KKyBvIERldmljZSBtYW5hZ2VtZW50IChzZXR1cCwgc2h1dGRvd24sIGV0Yy4pCisgbyBOZXR3b3JrIGludGVyZmFjZSBtYW5hZ2VtZW50IChkeW5hbWljIGNyZWF0aW9uL2Rlc3RydWN0aW9uKQorIG8gUHJvdG9jb2wgZW5jYXBzdWxhdGlvbi9kZWNhcHN1bGF0aW9uCisKK1RvIGJhIGFibGUgdG8gdXNlIHRoZSBMaW51eCBXQU4gUm91dGVyIHlvdSB3aWxsIGFsc28gbmVlZCBhIFdBTiBUb29scyBwYWNrYWdlCithdmFpbGFibGUgZnJvbQorCisJZnRwLnNhbmdvbWEuY29tL3B1Yi9saW51eC9jdXJyZW50X3dhbnBpcGUvd2FucGlwZS1YLlkuWi50Z3oKKword2hlcmUgdlguWS5aIHJlcHJlc2VudCB0aGUgd2FucGlwZSB2ZXJzaW9uIG51bWJlci4KKworRm9yIHRlY2huaWNhbCBxdWVzdGlvbnMgYW5kL29yIGNvbW1lbnRzIHBsZWFzZSBlLW1haWwgdG8gbmNvcmJpY0BzYW5nb21hLmNvbS4KK0ZvciBnZW5lcmFsIGlucXVpcmllcyBwbGVhc2UgY29udGFjdCBTYW5nb21hIFRlY2hub2xvZ2llcyBJbmMuIGJ5CisKKwlIb3RsaW5lOgkxLTgwMC0zODgtMjQ3NQkoVVNBIGFuZCBDYW5hZGEsIHRvbGwgZnJlZSkKKwlQaG9uZToJCSg5MDUpIDQ3NC0xOTkwICBleHQ6IDEwNgorCUZheDoJCSg5MDUpIDQ3NC05MjIzCisJRS1tYWlsOgkJZG1Ac2FuZ29tYS5jb20JKERhdmlkIE1hbmRlbHN0YW0pCisJV1dXOgkJaHR0cDovL3d3dy5zYW5nb21hLmNvbQorCisKK0lOU1RBTExBVElPTgorCitQbGVhc2UgcmVhZCB0aGUgV2FucGlwZUZvckxpbnV4LnBkZiBtYW51YWwgb24gaG93IHRvIAoraW5zdGFsbCB0aGUgV0FOUElQRSB0b29scyBhbmQgZHJpdmVycyBwcm9wZXJseS4gCisKKworQWZ0ZXIgaW5zdGFsbGluZyB3YW5waXBlIHBhY2thZ2U6IC91c3IvbG9jYWwvd2Fucm91dGVyL2RvYy4gCitPbiB0aGUgZnRwLnNhbmdvbWEuY29tIDogL2xpbnV4L2N1cnJlbnRfd2FucGlwZS9kb2MKKworCitDT1BZUklHSFQgQU5EIExJQ0VOU0lORyBJTkZPUk1BVElPTgorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKK0ZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCit0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MKK0F2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisKKworQUNLTk9XTEVER0VNRU5UUworCitUaGlzIHByb2R1Y3QgaXMgYmFzZWQgb24gdGhlIFdBTlBJUEUodG0pIE11bHRpcHJvdG9jb2wgV0FOIFJvdXRlciBkZXZlbG9wZWQKK2J5IFNhbmdvbWEgVGVjaG5vbG9naWVzIEluYy4gZm9yIExpbnV4IDIuMC54IGFuZCAyLjIueC4gIFN1Y2Nlc3Mgb2YgdGhlIFdBTlBJUEUKK3RvZ2V0aGVyIHdpdGggdGhlIG5leHQgbWFqb3IgcmVsZWFzZSBvZiBMaW51eCBrZXJuZWwgaW4gc3VtbWVyIDE5OTYgY29tbWFuZGVkCithZGVxdWF0ZSBjaGFuZ2VzIHRvIHRoZSBXQU5QSVBFIGNvZGUgdG8gdGFrZSBmdWxsIGFkdmFudGFnZSBvZiBuZXcgTGludXgKK2ZlYXR1cmVzLgorCitJbnN0ZWFkIG9mIGNvbnRpbnVpbmcgZGV2ZWxvcGluZyBwcm9wcmlldGFyeSBpbnRlcmZhY2UgdGllZCB0byBTYW5nb21hIFdBTgorY2FyZHMsIHdlIGRlY2lkZWQgdG8gc2VwYXJhdGUgYWxsIGhhcmR3YXJlLWluZGVwZW5kZW50IGNvZGUgaW50byBhIHNlcGFyYXRlCittb2R1bGUgYW5kIGRlZmluZWQgdHdvIGxldmVscyBvZiBpbnRlcmZhY2VzIC0gb25lIGZvciB1c2VyLWxldmVsIGFwcGxpY2F0aW9ucworYW5kIGFub3RoZXIgZm9yIGtlcm5lbC1sZXZlbCBXQU4gZHJpdmVycy4gIFdBTlBJUEUgaXMgbm93IGltcGxlbWVudGVkIGFzIGEKK1dBTiBkcml2ZXIgY29tcGxpYW50IHdpdGggdGhlIFdBTiBMaW5rIERyaXZlciBpbnRlcmZhY2UuICBBbHNvIGEgZ2VuZXJhbAorcHVycG9zZSBXQU4gY29uZmlndXJhdGlvbiB1dGlsaXR5IGFuZCBhIHNldCBvZiBzaGVsbCBzY3JpcHRzIHdhcyBkZXZlbG9wZWQgdG8gCitzdXBwb3J0IFdBTiByb3V0ZXIgYXQgdGhlIHVzZXIgbGV2ZWwuCisKK01hbnkgdXNlZnVsIGlkZWFzIGNvbmNlcm5pbmcgaGFyZHdhcmUtaW5kZXBlbmRlbnQgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uCit3ZXJlIGdpdmVuIGJ5IE1pa2UgTWNMYWdhbiA8bWlrZS5tY2xhZ2FuQGxpbnV4Lm9yZz4gYW5kIGhpcyBpbXBsZW1lbnRhdGlvbgorb2YgdGhlIEZyYW1lIFJlbGF5IHJvdXRlciBhbmQgZHJpdmVycyBmb3IgU2FuZ29tYSBjYXJkcyAoZGxjaS9zZGxhKS4KKworV2l0aCB0aGUgbmV3IGltcGxlbWVudGF0aW9uIG9mIHRoZSBBUElzIGJlaW5nIGluY29ycG9yYXRlZCBpbnRvIHRoZSBXQU5QSVBFLAorYSBzcGVjaWFsIHRoYW5rIGdvZXMgdG8gQWxhbiBDb3ggaW4gcHJvdmlkaW5nIGluc2lnaHQgaW50byBCU0Qgc29ja2V0cy4KKworU3BlY2lhbCB0aGFua3MgdG8gYWxsIHRoZSBXQU5QSVBFIHVzZXJzIHdobyBwZXJmb3JtZWQgZmllbGQtdGVzdGluZywgcmVwb3J0ZWQKK2J1Z3MgYW5kIG1hZGUgdmFsdWFibGUgY29tbWVudHMgYW5kIHN1Z2dlc3Rpb25zIHRoYXQgaGVscCB1cyB0byBpbXByb3ZlIHRoaXMKK3Byb2R1Y3QuCisKKworCitORVcgSU4gVEhJUyBSRUxFQVNFCisKKwlvIFVwZGF0ZWQgdGhlIFdBTkNGRyB1dGlsaXR5CisJCUNhbGxzIHRoZSBwcHBjb25maWcgdG8gY29uZmlndXJlIHRoZSBQUFBECisJCWZvciBhc3luYyBjb25uZWN0aW9ucy4KKworCW8gQWRkZWQgdGhlIFBQUENPTkZJRyB1dGlsaXR5CisJCVVzZWQgdG8gY29uZmlndXJlIHRoZSBQUFBEIGRhbWVvbiBmb3IgdGhlCisJCVdBTlBJUEUgQXN5bmMgUFBQIGFuZCBzdGFuZGFyZCBzZXJpYWwgcG9ydC4KKwkJVGhlIHdhbmNmZyBjYWxscyB0aGUgcHBwY29uZmlnIHRvIGNvbmZpZ3VyZQorCQl0aGUgcHBwZC4KKworCW8gRml4ZWQgdGhlIFBDSSBhdXRvZGV0ZWN0IGZlYXR1cmUuICAKKwkJVGhlIFNMT1QgMCB3YXMgdXNlZCBhcyBhbiBhdXRvZGV0ZWN0IG9wdGlvbgorCQlob3dldmVyLCBzb21lIGhpZ2ggZW5kIFBDJ3Mgc2xvdCBudW1iZXJzIHN0YXJ0CisJCWZyb20gMC4gCisKKwlvIFRoaXMgcmVsZWFzZSBoYXMgYmVlbiB0ZXN0ZWQgd2l0aCB0aGUgbmV3IGJhY2t1cGQKKwkgIGRhZW1vbiByZWxlYXNlLgorCQorCitQUk9EVUNUIENPTVBPTkVOVFMgQU5EIFJFTEFURUQgRklMRVMKKworL2V0YzogKG9yIHVzZXIgZGVmaW5lZCkKKwl3YW5waXBlMS5jb25mCWRlZmF1bHQgcm91dGVyIGNvbmZpZ3VyYXRpb24gZmlsZQorCisvbGliL21vZHVsZXMvWC5ZLlovbWlzYzoKKwl3YW5yb3V0ZXIubwlyb3V0ZXIga2VybmVsIGxvYWRhYmxlIG1vZHVsZQorCWFmX3dhbnBpcGUubwl3YW5waXBlIGFwaSBzb2NrZXQgbW9kdWxlCisKKy9saWIvbW9kdWxlcy9YLlkuWi9uZXQ6CisJc2RsYWRydi5vCVNhbmdvbWEgU0RMQSBzdXBwb3J0IG1vZHVsZQorCXdhbnBpcGUubwlTYW5nb21hIFdBTlBJUEUodG0pIGRyaXZlciBtb2R1bGUKKworL3Byb2MvbmV0L3dhbnJvdXRlcgorCUNvbmZpZwkJcmVhZHMgY3VycmVudCByb3V0ZXIgY29uZmlndXJhdGlvbgorCVN0YXR1cwkJcmVhZHMgY3VycmVudCByb3V0ZXIgc3RhdHVzCisJe25hbWV9CQlyZWFkcyBXQU4gZHJpdmVyIHN0YXRpc3RpY3MKKworL3Vzci9zYmluOgorCXdhbnJvdXRlcgl3YW5yb3V0ZXIgc3RhcnQtdXAgc2NyaXB0CisJd2FuY29uZmlnCXdhbnJvdXRlciBjb25maWd1cmF0aW9uIHV0aWxpdHkKKwlzZGxhZHVtcAlXQU5QSVBFIGFkYXB0ZXIgbWVtb3J5IGR1bXAgdXRpbGl0eQorICAgICAgICBmcGlwZW1vbiAgICAgICAgTW9uaXRvciBmb3IgRnJhbWUgUmVsYXkKKyAgICAgICAgY3BpcGVtb24gICAgICAgIE1vbml0b3IgZm9yIENpc2NvIEhETEMKKwlwcGlwZW1vbiAJTW9uaXRvciBmb3IgUFBQCisJeHBpcGVtb24gCU1vbml0b3IgZm9yIFgyNQorCXdwa2JkbW9uICAgICAgICBXQU5QSVBFIGtleWJvYXJkIGxlZCBtb25pdG9yL2RlYnVnZ2VyCisKKy91c3IvbG9jYWwvd2Fucm91dGVyOgorCVJFQURNRQkJdGhpcyBmaWxlCisJQ09QWUlORwkJR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKwlTZXR1cAkJaW5zdGFsbGF0aW9uIHNjcmlwdAorCUZpbGVsaXN0CWRpc3RyaWJ1dGlvbiBkZWZpbml0aW9uIGZpbGUKKwl3YW5yb3V0ZXIucmMJbWV0YS1jb25maWd1cmF0aW9uIGZpbGUgCisJCQkodXNlZCBieSB0aGUgU2V0dXAgYW5kIHdhbnJvdXRlciBzY3JpcHQpCisKKy91c3IvbG9jYWwvd2Fucm91dGVyL2RvYzoKKwl3YW5waXBlRm9yTGludXgucGRmIAlXQU4gUm91dGVyIFVzZXIncyBNYW51YWwKKworL3Vzci9sb2NhbC93YW5yb3V0ZXIvcGF0Y2hlczoKKwl3YW5yb3V0ZXItdjIyMTMuZ3ogIAlwYXRjaCBmb3IgTGludXgga2VybmVscyAyLjIuMTEgdXAgdG8gMi4yLjEzLgorCXdhbnJvdXRlci12MjIxNC5neglwYXRjaCBmb3IgTGludXgga2VybmVsIDIuMi4xNC4gCisJd2Fucm91dGVyLXYyMjE1Lmd6CXBhdGNoIGZvciBMaW51eCBrZXJuZWxzIDIuMi4xNSB0byAyLjIuMTcuCisJd2Fucm91dGVyLXYyMjE4Lmd6CXBhdGNoIGZvciBMaW51eCBrZXJuZWxzIDIuMi4xOCBhbmQgdXAuCisJd2Fucm91dGVyLXYyNDAuZ3oJcGF0Y2ggZm9yIExpbnV4IGtlcm5lbCAyLjQuMC4gIAorCXdhbnJvdXRlci12MjQyLmd6CXBhdGNoIGZvciBMaW51eCBrZXJuZWwgMi40LjIgYW5kIHVwLgorCXdhbnJvdXRlci12MjAzNC5neglwYXRjaCBmb3IgTGludXgga2VybmVsIDIuMC4zNAorCXdhbnJvdXRlci12MjAzNi5neiAJcGF0Y2ggZm9yIExpbnV4IGtlcm5lbCAyLjAuMzYgYW5kIHVwLiAKKworL3Vzci9sb2NhbC93YW5yb3V0ZXIvcGF0Y2hlcy9rZHJpdmVyczoKKwlTb3VyY2VzIG9mIHRoZSBsYXRlc3QgV0FOUElQRSBkZXZpY2UgZHJpdmVycy4KKwlUaGVzZSBhcmUgdXNlZCB0byBVUEdSQURFIHRoZSBsaW51eCBrZXJuZWwgdG8gdGhlIG5ld2VzdAorCXZlcnNpb24gaWYgdGhlIGtlcm5lbCBzb3VyY2UgaGFzIGFscmVhZHkgYmVlbiBwYXRoY2VkIHdpdGgKKwlXQU5QSVBFIGRyaXZlcnMuCisKKy91c3IvbG9jYWwvd2Fucm91dGVyL3NhbXBsZXM6CisJaW50ZXJmYWNlCXNhbXBsZSBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiBmaWxlCisJd2FucGlwZTEuY3ByaSAJQ0hETEMgcHJpbWFyeSBwb3J0CisgICAgIAl3YW5waXBlMi5jc2VjIAlDSERMQyBzZWNvbmRhcnkgcG9ydAorICAgICAJd2FucGlwZTEuZnIgICAJRnJhbWUgUmVsYXkgcHJvdG9jb2wKKyAgICAgCXdhbnBpcGUxLnBwcCAgCVBQUCBwcm90b2NvbCApIAorCXdhbnBpcGUxLmFzeQlDSERMQyBBU1lOQyBwcm90b2NvbAorCXdhbnBpcGUxLngyNQlYMjUgcHJvdG9jb2wKKwl3YW5waXBlMS5zdHR5CVN5bmMgVFRZIGRyaXZlciAoVXNlZCBieSBLZXJuZWwgUFBQRCBkYWVtb24pCisJd2FucGlwZTEuYXR0eQlBc3luYyBUVFkgZHJpdmVyIChVc2VkIGJ5IEtlcm5lbCBQUFBEIGRhZW1vbikKKwl3YW5yb3V0ZXIucmMJc2FtcGxlIG1ldGEtY29uZmlndXJhdGlvbiBmaWxlCisKKy91c3IvbG9jYWwvd2Fucm91dGVyL3V0aWw6CisJKgkJd2FuLXRvb2xzIHV0aWxpdGllcyBzb3VyY2UgY29kZQorCisvdXNyL2xvY2FsL3dhbnJvdXRlci9hcGkveDI1OgorCSoJCXgyNSBhcGkgc2FtcGxlIHByb2dyYW1zLgorL3Vzci9sb2NhbC93YW5yb3V0ZXIvYXBpL2NoZGxjOgorCSoJCWNoZGxjIGFwaSBzYW1wbGUgcHJvZ3JhbXMuCisvdXNyL2xvY2FsL3dhbnJvdXRlci9hcGkvZnI6CisJKgkJZnIgYXBpIHNhbXBsZSBwcm9ncmFtcy4KKy91c3IvbG9jYWwvd2Fucm91dGVyL2NvbmZpZy93YW5jZmc6CisJd2FuY2ZnCQlXQU5QSVBFIEdVSSBjb25maWd1cmF0aW9uIHByb2dyYW0uCisgICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGVzIHdhbnBpcGUjLmNvbmYgZmlsZXMuIAorL3Vzci9sb2NhbC93YW5yb3V0ZXIvY29uZmlnL2NmZ2Z0MToKKwljZmdmdDEJCUdVSSBDU1UvRFNVIGNvbmZpZ3VyYXRpb24gcHJvZ3JhbS4KKworL3Vzci9pbmNsdWRlL2xpbnV4OgorCXdhbnJvdXRlci5oCXJvdXRlciBBUEkgZGVmaW5pdGlvbnMKKwl3YW5waXBlLmgJV0FOUElQRSBBUEkgZGVmaW5pdGlvbnMKKwlzZGxhZHJ2LmgJU0RMQSBzdXBwb3J0IG1vZHVsZSBBUEkgZGVmaW5pdGlvbnMKKwlzZGxhc2ZtLmgJU0RMQSBmaXJtd2FyZSBtb2R1bGUgZGVmaW5pdGlvbnMKKwlpZl93YW5waXBlLmgJV0FOUElQRSBTb2NrZXQgZGVmaW5pdGlvbnMKKwlpZl93YW5waXBlX2NvbW1vbi5oCVdBTlBJUEUgU29ja2V0L0RyaXZlciBjb21tb24gZGVmaW5pdGlvbnMuCisJc2RsYXBjaS5oCVdBTlBJUEUgUENJIGRlZmluaXRpb25zCisJCisKKy91c3Ivc3JjL2xpbnV4L25ldC93YW5yb3V0ZXI6CisJKgkJd2Fucm91dGVyIHNvdXJjZSBjb2RlCisKKy92YXIvbG9nOgorCXdhbnJvdXRlcgl3YW5yb3V0ZXIgc3RhcnQtdXAgbG9nIChjcmVhdGVkIGJ5IHRoZSBTZXR1cCBzY3JpcHQpCisKKy92YXIvbG9jazogIChvciAvdmFyL2xvY2svc3Vic3lzIGZvciBSZWRIYXQpCisJd2Fucm91dGVyCXdhbnJvdXRlciBsb2NrIGZpbGUgKGNyZWF0ZWQgYnkgdGhlIFNldHVwIHNjcmlwdCkKKworL3Vzci9sb2NhbC93YW5yb3V0ZXIvZmlybXdhcmU6CisJZnI1MTQuc2ZtCUZyYW1lIHJlbGF5IGZpcm13YXJlIGZvciBTYW5nb21hIFM1MDgvUzUxNCBjYXJkCisJY2R1YWw1MTQuc2ZtCUR1YWwgUG9ydCBDaXNjbyBIRExDIGZpcm13YXJlIGZvciBTYW5nb21hIFM1MDgvUzUxNCBjYXJkCisJcHBwNTE0LnNmbSAgICAgIFBQUCBGaXJtd2FyZSBmb3IgU2FuZ29tYSBTNTA4IGFuZCBTNTE0IGNhcmRzCisJeDI1XzUwOC5zZm0JWDI1IEZpcm13YXJlIGZvciBTYW5nb21hIFM1MDggY2FyZC4KKworCitSRVZJU0lPTiBISVNUT1JZCisKKzEuMC4wCURlY2VtYmVyIDMxLCAxOTk2CUluaXRpYWwgdmVyc2lvbgorCisxLjAuMQlKYW51YXJ5IDMwLCAxOTk3CVN0YXR1cyBhbmQgc3RhdGlzdGljcyBjYW4gYmUgcmVhZCB2aWEgL3Byb2MKKwkJCQlmaWxlc3lzdGVtIGVudHJpZXMuCisKKzEuMC4yICAgQXByaWwgMzAsIDE5OTcgICAgICAgICAgQWRkZWQgVURQIG1hbmFnZW1lbnQgdmlhIG1vbml0b3JzLgorCisxLjAuMwlKdW5lIDMsIDE5OTcJCVVEUCBtYW5hZ2VtZW50IGZvciBtdWx0aXBsZSBib2FyZHMgdXNpbmcgRnJhbWUKKwkJCQlSZWxheSBhbmQgUFBQCisJCQkJRW5hYmxlZCBjb250aW51b3VzIHRyYW5zbWlzc2lvbiBvZiBDb25maWd1cmUgCisJCQkJUmVxdWVzdCBQYWNrZXQgZm9yIFBQUCAoZm9yIDUwOCBvbmx5KQorCQkJCUNvbm5lY3Rpb24gVGltZW91dCBmb3IgUFBQIGNoYW5nZWQgZnJvbSA5MDAgdG8gMAorCQkJCUZsb3cgQ29udHJvbCBQcm9ibGVtIGZpeGVkIGZvciBGcmFtZSBSZWxheQorCisxLjAuNAlKdWx5IDEwLCAxOTk3CQlTNTA4L0ZUMSBtb25pdG9yaW5nIGNhcGFiaWxpdHkgaW4gZnBpcGVtb24gYW5kCisJCQkJcHBpcGVtb24gdXRpbGl0aWVzLgorCQkJCUNvbmZpZ3VyYWJsZSBUVEwgZm9yIFVEUCBwYWNrZXRzLgorCQkJCU11bHRpY2FzdCBhbmQgQnJvYWRjYXN0IElQIHNvdXJjZSBhZGRyZXNzZXMgYXJlCisJCQkJc2lsZW50bHkgZGlzY2FyZGVkLgorCisxLjAuNQlKdWx5IDI4LCAxOTk3CQlDb25maWd1cmFibGUgVDM5MSxUMzkyLE4zOTEsTjM5MixOMzkzIGZvciBGcmFtZQorCQkJCVJlbGF5IGluIHJvdXRlci5jb25mLgorCQkJCUNvbmZpZ3VyYWJsZSBNZW1vcnkgQWRkcmVzcyB0aHJvdWdoIHJvdXRlci5jb25mIAorCQkJCWZvciBGcmFtZSBSZWxheSwgUFBQIGFuZCBYLjI1LiAoY29tbWVudGluZyB0aGlzCisgCQkJCW91dCBlbmFibGVzIGF1dG8tZGV0ZWN0aW9uKS4KKwkJCQlGaXhlZCBmcmVlaW5nIHVwIHJlY2VpdmVkIGJ1ZmZlcnMgdXNpbmcga2ZyZWUoKQorIAkJCQlmb3IgRnJhbWUgUmVsYXkgYW5kIFguMjUuCisJCQkJUHJvdGVjdCBzZGxhX3BlZWsoKSBieSBjYWxsaW5nIHNhdmVfZmxhZ3MoKSwKKwkJCQljbGkoKSBhbmQgcmVzdG9yZV9mbGFncygpLgorCQkJCUNoYW5nZWQgbnVtYmVyIG9mIFRyYWNlIGVsZW1lbnRzIGZyb20gMzIgdG8gMjAKKwkJCQlBZGRlZCBETENJIHNwZWNpZmljIGRhdGEgbW9uaXRvcmluZyBpbiBGUElQRU1PTi4gCisyLjAuMAlOb3YgMDcsIDE5OTcJCUltcGxlbWVudGVkIHByb3RlY3Rpb24gb2YgUkFDRSBjb25kaXRpb25zIGJ5IAorCQkJCWNyaXRpY2FsIGZsYWdzIGZvciBGUkFNRSBSRUxBWSBhbmQgUFBQLgorCQkJCURMQ0kgTGlzdCBpbnRlcnJ1cHQgbW9kZSBpbXBsZW1lbnRlZC4KKwkJCQlJUFggc3VwcG9ydCBpbiBGUkFNRSBSRUxBWSBhbmQgUFBQLgorCQkJCUlQWCBTZXJ2ZXIgU3VwcG9ydCAoTUFSUykKKwkJCQlNb3JlIGRyaXZlciBzcGVjaWZpYyBzdGF0cyBpbmNsdWRlZCBpbiBGUElQRU1PTgorCQkJCWFuZCBQSVBFTU9OLgorCisyLjAuMQlOb3YgMjgsIDE5OTcJCUJ1ZyBGaXhlcyBmb3IgdmVyc2lvbiAyLjAuMC4KKwkJCQlQcm90ZWN0aW9uIG9mICJlbmFibGVfaXJxKCkiIHdoaWxlIAorCQkJCSJkaXNhYmxlX2lycSgpIiBoYXMgYmVlbiBlbmFibGVkIGZyb20gYW55IG90aGVyCisJCQkJcm91dGluZSAoZm9yIEZyYW1lIFJlbGF5LCBQUFAgYW5kIFgyNSkuCisJCQkJQWRkZWQgYWRkaXRpb25hbCBTdGF0cyBmb3IgRnBpcGVtb24gYW5kIFBwaXBlbW9uCisJCQkJSW1wcm92ZWQgTG9hZCBTaGFyaW5nIGZvciBtdWx0aXBsZSBib2FyZHMKKworMi4wLjIJRGVjIDA5LCAxOTk3CQlTdXBwb3J0IGZvciBQQVAgYW5kIENIQVAgZm9yIHBwcCBoYXMgYmVlbgorCQkJCWltcGxlbWVudGVkLgorCisyLjAuMwlBdWcgMTUsIDE5OTgJCU5ldyByZWxlYXNlIHN1cHBvcnRpbmcgQ2lzY28gSERMQywgQ0lSIGZvciBGcmFtZQorCQkJCXJlbGF5LCBEeW5hbWljIElQIGFzc2lnbm1lbnQgZm9yIFBQUCBhbmQgSW52ZXJzZQorCQkJCUFycCBzdXBwb3J0IGZvciBGcmFtZS1yZWxheS4gIE1hbiBQYWdlcyBhcmUgCisJCQkJaW5jbHVkZWQgZm9yIGJldHRlciBzdXBwb3J0IGFuZCBhIG5ldyB1dGlsaXR5CisJCQkJZm9yIGNvbmZpZ3VyaW5nIEZUMSBjYXJkcy4KKworMi4wLjQJRGVjIDA5LCAxOTk4CSAgICAgICAgRHVhbCBQb3J0IHN1cHBvcnQgZm9yIENpc2NvIEhETEMuCisJCQkJU3VwcG9ydCBmb3IgSERMQyAoTEFQQikgQVBJLgorCQkJCVN1cHBvcnRzIEJpU3luYyBTdHJlYW1pbmcgY29kZSBmb3IgUzUwMkUgCisJCQkJYW5kIFM1MDMgY2FyZHMuCisJCQkJU3VwcG9ydCBmb3IgU3RyZWFtaW5nIEhETEMgQVBJLgorCQkJCVByb3ZpZGVzIGEgQlNEIHNvY2tldCBpbnRlcmZhY2UgZm9yIAorCQkJCWNyZWF0aW5nIGFwcGxpY2F0aW9ucyB1c2luZyBCaVN5bmMKKyAgIAkJCQlzdHJlYW1pbmcuICAgICAgICAKKworMi4wLjUgICBBdWcgMDQsIDE5OTkgCQlDSERMQyBpbml0aWFsaXphdGluIGJ1ZyBmaXguCisJCQkJUFBQIGludGVycnVwdCBkcml2ZW4gZHJpdmVyOiAKKyAgCQkJCUZpeCB0byB0aGUgUFBQIGxpbmUgaGFuZ3VwIHByb2JsZW0uCisJCQkJTmV3IFBQUCBmaXJtd2FyZQorCQkJCUFkZGVkIGNvbW1lbnRzIHRvIHRoZSBzdGFydHVwIFNZU1RFTSBFUlJPUiBtZXNzYWdlcworCQkJCVhwaXBlbW9uIGRlYnVnZ2luZyBhcHBsaWNhdGlvbiBmb3IgdGhlIFgyNSBwcm90b2NvbAorCQkJCU5ldyBVU0VSX01BTlVBTC50eHQKKwkJCQlGaXhlZCB0aGUgb2RkIGJvdW5kYXJ5IDRieXRlIHdyaXRlcyB0byB0aGUgYm9hcmQuCisJCQkJQmlTeW5jIFN0cmVhbWluZyBjb2RlIGhhcyBiZWVuIHRha2VuIG91dC4gIAorCQkJCSBBdmFpbGFibGUgYXMgYSBwYXRjaC4KKwkJCQlTdHJlYW1pbmcgSERMQyBBUEkgaGFzIGJlZW4gdGFrZW4gb3V0LiAgCisJCQkJIEF2YWlsYWJsZSBhcyBhIHBhdGNoLiAgICAgICAgICAgICAgICAgCisKKzIuMC42ICAgQXVnIDE3LCAxOTk5CQlJbmNyZWFzZWQgZGVidWdnaW5nIGluIHN0YXR1cCBzY3JpcHRzCisJCQkJRml4ZWQgaW5zYWxsYXRpb24gYnVncyBmcm9tIDIuMC41CisJCQkJS2VybmVsIHBhdGNoIHdvcmtzIGZvciBib3RoIDIuMi4xMCBhbmQgMi4yLjExIGtlcm5lbHMuCisJCQkJVGhlcmUgaXMgbm8gZnVuY3Rpb25hbCBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byBwYWNrYWdlcyAgICAgICAgIAorCisyLjAuNyAgIEF1ZyAyNiwgMTk5OQkJbyAgTWVyZ2VkIFgyNUFQSSBjb2RlIGludG8gV0FOUElQRS4KKwkJCQlvICBGaXhlZCBhIG1lbWVvcnkgbGVhayBmb3IgWDI1QVBJCisJCQkJbyAgVXBkYXRlZCB0aGUgWDI1QVBJIGNvZGUgZm9yIDIuMi5YIGtlcm5lbHMuCisJCQkJbyAgSW1wcm92ZWQgTkVNIGhhbmRsaW5nLiAgIAorCisyLjEuMAlPY3QgMjUsIDE5OTkJCW8gTmV3IGNvZGUgZm9yIFM1MTQgUENJIENhcmQKKwkJCQlvIE5ldyBDSERMQyBhbmQgRnJhbWUgUmVsYXkgZHJpdmVycworCQkJCW8gUFBQIGFuZCBYMjUgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyByZWxlYXNlICAgIAorCisyLjEuMQlOb3YgMzAsIDE5OTkJCW8gUFBQIHN1cHBvcnQgZm9yIFM1MTQgUENJIENhcmRzCisKKzIuMS4zICAgQXByIDA2LCAyMDAwCQlvIFNvY2tldCBiYXNlZCB4MjVhcGkgCisJCQkJbyBTb2NrZXQgYmFzZWQgY2hkbGMgYXBpCisJCQkJbyBTb2NrZXQgYmFzZWQgZnIgYXBpCisJCQkJbyBEdWFsIFBvcnQgUmVjZWl2ZSBvbmx5IENIRExDIHN1cHBvcnQuCisJCQkJbyBBc3luY2hyb25vdXMgQ0hETEMgc3VwcG9ydCAoU2Vjb25kYXJ5IFBvcnQpCisJCQkJbyBjZmdmdDEgR1VJIGNzdS9kc3UgY29uZmlndXJhdG9yCisJCQkJbyB3YW5jZmcgR1VJIGNvbmZpZ3VyYXRpb24gZmlsZSAKKwkJCQkgIGNvbmZpZ3VyYXRvci4KKwkJCQlvIEFyY2hpdGVjdHVhbCBkaXJlY3RvcnkgY2hhbmdlcy4KKworYmV0YS0yLjEuNCBKdWwgMjAwMAkJbyBEeW5hbWljIGludGVyZmFjZSBjb25maWd1cmF0aW9uOgorCQkJCQlOZXR3b3JrIGludGVyZmFjZXMgcmVmbGVjdCB0aGUgc3RhdGUKKwkJCQkJb2YgcHJvdG9jb2wgbGF5ZXIuICBJZiB0aGUgcHJvdG9jb2wgYmVjb21lcworCQkJCQlkaXNjb25uZWN0ZWQsIGRyaXZlciB3aWxsIGJyaW5nIGRvd24KKwkJCQkJdGhlIGludGVyZmFjZS4gIE9uY2UgdGhlIHByb3RvY29sIHJlY29ubmVjdHMKKwkJCQkJdGhlIGludGVyZmFjZSB3aWxsIGJlIGJyb3VnaHQgdXAuIAorCQkJCQkKKwkJCQkJTm90ZTogVGhpcyBvcHRpb24gaXMgdHVybmVkIG9mZiBieSBkZWZhdWx0LgorCisJCQkJbyBEeW5hbWljIHdhbnJvdXRlciBzZXR1cCB1c2luZyAnd2FuY29uZmlnJzoKKwkJCQkJd2FuY29uZmlnIHV0aWxpdHkgY2FuIGJlIHVzZWQgdG8KKwkJCQkJc2h1dGRvd24scmVzdGFydCxzdGFydCBvciByZWNvbmZpZ3VyZSAKKwkJCQkJYSB2aXJ0dWFsIGNpcmN1aXQgZHluYW1pY2FsbHkuCisJCQkJICAgICAKKwkJCQkJRnJhbWUgUmVsYXk6ICBFYWNoIERMQ0kgY2FuIGJlOiAKKwkJCQkJCSAgICAgIGNyZWF0ZWQsc3RvcHBlZCxyZXN0YXJ0ZWQgYW5kIHJlY29uZmlndXJlZAorCQkJCQkJICAgICAgZHluYW1pY2FsbHkgdXNpbmcgd2FuY29uZmlnLgorCQkJCQkKKwkJCQkJCSAgICAgIGV4OiB3YW5jb25maWcgY2FyZCB3YW5waXBlMSBkZXYgd3AxX2ZyMTYgdXAKKwkJCQkgIAorCQkJCW8gV2Fucm91dGVyIHN0YXJ0dXAgdmlhIGNvbW1hbmQgbGluZSBhcmd1bWVudHM6CisJCQkJCXdhbmNvbmZpZyBhbHNvIHN1cHBvcnRzIHdhbnJvdXRlciBzdGFydHVwIHZpYSBjb21tYW5kIGxpbmUKKwkJCQkJYXJndW1lbnRzLiAgVGh1cywgdGhlcmUgaXMgbm8gbmVlZCB0byBjcmVhdGUgYSB3YW5waXBlIy5jb25mCisJCQkJCWNvbmZpZ3VyYXRpb24gZmlsZS4gIAorCisJCQkJbyBTb2NrZXQgYmFzZWQgeDI1YXBpIHVwZGF0ZS9idWcgZml4ZXMuCisJCQkJCUFkZGVkIHN1cHBvcnQgZm9yIExDTiBudW1iZXJzIGdyZWF0ZXIgdGhhbiAyNTUuCisJCQkJCU9wdGlvbiB0byBwYXNzIHVwIG1vZGVtIG1lc3NhZ2VzLgorCQkJCQlQcm92aWRlZCBhIFBDSSBJUlEgY2hlY2ssIHNvIGEgc2luZ2xlIFM1MTQKKwkJCQkJY2FyZCBpcyBndWFyYW50ZWVkIHRvIGhhdmUgYSBub24tc2hhcmluZyBpbnRlcnJ1cHQuCisKKwkJCQlvIEZpeGVzIHRvIHRoZSB3YW5jZmcgdXRpbGl0eS4KKwkJCQlvIE5ldyBGVDEgZGVidWdnaW5nIHN1cHBvcnQgdmlhICpwaXBlbW9uIHV0aWxpdGllcy4KKwkJCQlvIEZyYW1lIFJlbGF5IEFSUCBzdXBwb3J0IEVuYWJsZWQuCisKK2JldGEzLTIuMS40IEp1bCAyMDAwCQlvIFgyNSBNX0JJVCBQcm9ibGVtIGZpeC4KKwkJCQlvIEFkZGVkIHRoZSBNdWx0aS1Qb3J0IFBQUAorCQkJCSAgVXBkYXRlZCB1dGlsaXRlcyBmb3IgdGhlIE11bHRpLVBvcnQgUFBQLgorCisyLjEuNAlBdXQgMjAwMAorCQkJCW8gSW4gWDI1QVBJOgorCQkJCQlNYXhpbXVtIHBhY2tldCBhbiBhcHBsaWNhdGlvbiBjYW4gc2VuZAorCQkJCQl0byB0aGUgZHJpdmVyIGhhcyBiZWVuIGV4dGVuZGVkIHRvIDQwOTYgYnl0ZXMuCisKKwkJCQkJRml4ZWQgdGhlIHgyNSBzdGFydHVwIGJ1Zy4gRW5hYmxlIAorCQkJCQljb21tdW5pY2F0aW9ucyBvbmx5IGFmdGVyIGFsbCBpbnRlcmZhY2VzCisJCQkJCWNvbWUgdXAuICBISUdIIFNWQy9QVkMgaXMgdXNlZCB0byBjYWxjdWxhdGUKKwkJCQkJdGhlIG51bWJlciBvZiBjaGFubmVscy4KKwkJCQkJRW5hYmxlIHByb3RvY29sIG9ubHkgYWZ0ZXIgYWxsIGludGVyZmFjZXMKKwkJCQkJYXJlIGVuYWJsZWQuCisKKwkJCQlvIEFkZGVkIGFuIGV4dHJhIHN0YXRlIHRvIHRoZSBGVDEgY29uZmlnLCBrZXJuZWwgbW9kdWxlLgorCQkJCW8gVXBkYXRlZCB0aGUgcGlwZW1vbiBkZWJ1Z2dlcnMuCisKKwkJCQlvIEJsb2NrZWQgdGhlIE11bHRpLVBvcnQgUFBQIGZyb20gcnVubmluZyBvbiBrZXJuZWxzCisJCQkJICAyLjIuMTYgb3IgZ3JlYXRlciwgZHVlIHRvIHN5bmNwcHAga2VybmVsIG1vZHVsZQorCQkJCSAgY2hhbmdlLiAKKwkgIAorYmV0YTEtMi4xLjUgCU5vdiAxNSAyMDAwCisJCQkJbyBGaXhlZCB0aGUgTXVsaXRQb3J0IFBQUCBTdXBwb3J0IGZvciBrZXJuZWxzIDIuMi4xNiBhbmQgYWJvdmUuCisJCQkJICAyLjIuWCBrZXJuZWxzIG9ubHkKKworCQkJCW8gU2VjdXJlZCB0aGUgZHJpdmVyIFVEUCBkZWJ1Z2dpbmcgY2FsbHMKKwkJCQkJLSBBbGwgaWxsZWdhbCBuZXRvd3JrIGRlYnVnZ2luZyBjYWxscyBhcmUgcmVwb3J0ZWQgdG8KKwkJCQkJICB0aGUgbG9nLgorCQkJCQktIERlZmluZWQgYSBzZXQgb2YgYWxsb3dlZCBjb21tYW5kcywgYWxsIG90aGVyIGRlbmllZC4KKwkJCQkJCisJCQkJbyBDcGlwZW1vbgorCQkJCQktIEFkZGVkIHNldCBGVDEgY29tbWFuZHMgdG8gdGhlIGNwaXBlbW9uLiBUaHVzIENTVS9EU1UKKwkJCQkJICBjb25maWd1cmFpdG9uIGNhbiBiZSBwZXJmb3JtZWQgdXNpbmcgY3BpcGVtb24uCisJCQkJCSAgQWxsIHN5c3RlbXMgdGhhdCBjYW5ub3QgcnVuIGNmZ2Z0MSBHVUkgdXRpbGl0eSBzaG91bGQKKwkJCQkJICB1c2UgY3BpcGVtb24gdG8gY29uZmlndXJlIHRoZSBvbiBib2FyZCBDU1UvRFNVLgorCisKKwkJCQlvIEtleWJvYXJkIExlZCBNb25pdG9yL0RlYnVnZ2VyCisJCQkJCS0gQSBuZXcgdXRpbHR5IC91c3Ivc2Jpbi93cGtiZG1vbiB1c2VzIGtleWJvYXJkIGxlZHMKKwkJCQkJICB0byBjb252ZXkgb3BlcmF0aW5hbCBzdGF0aXN0aWMgaW5mb3JtYXRpb24gb2YgdGhlIAorCQkJCQkgIFNhbmdvbWEgV0FOUElQRSBjYXJkcy4KKwkJCQkJTlVNX0xPQ0sgICAgPSBMaW5lIFN0YXRlICAoT249Y29ubmVjdGVkLCAgICBPZmY9ZGlzY29ubmVjdGVkKQorCQkJCQlDQVBTX0xPQ0sgICA9IFR4IGRhdGEgICAgIChPbj10cmFuc21pdHRpbmcsIE9mZj1ubyB0eCBkYXRhKQorCQkJCQlTQ1JPTExfTE9DSyA9IFJ4IGRhdGEgICAgIChPbj1yZWNlaXZpbmcsICAgIE9mZj1ubyByeCBkYXRhCisJCQkJCQorCQkJCW8gSGFyZHdhcmUgcHJvYmUgb24gbW9kdWxlIGxvYWQgYW5kIGR5bmFtaWMgZGV2aWNlIGFsbG9jYXRpb24KKwkJCQkJLSBEdXJpbmcgV0FOUElQRSBtb2R1bGUgbG9hZCwgYWxsIFNhbmdvbWEgY2FyZHMgYXJlIHByb2JlZAorCQkJCQkgIGFuZCBmb3VuZCBpbmZvcm1hdGlvbiBpcyBwcmludGVkIGluIHRoZSAvdmFyL2xvZy9tZXNzYWdlcy4KKwkJCQkJLSBJZiBubyBjYXJkcyBhcmUgZm91bmQsIHRoZSBtb2R1bGUgbG9hZCBmYWlscy4KKwkJCQkJLSBBcHByb3ByaWF0ZSBudW1iZXIgb2YgZGV2aWNlcyBhcmUgZHluYW1pY2FsbHkgbG9hZGVkIAorCQkJCQkgIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgU2FuZ29tYSBjYXJkcyBmb3VuZC4KKworCQkJCQkgIE5vdGU6IFRoZSBrZXJuZWwgY29uZmlndXJhaXRvbiBvcHRpb24gCisJCQkJCQlDT05GSUdfV0FOUElQRV9DQVJEUyBoYXMgYmVlbiB0YWtlbiBvdXQuCisJCQkJCQorCQkJCW8gRml4ZWQgdGhlIEZyYW1lIFJlbGF5IGFuZCBDaGRsYyBuZXR3b3JrIGludGVyZmFjZXMgc28gdGhleSBhcmUKKwkJCQkgIGNvbXBhdGlibGUgd2l0aCBsaWJwY2FwIGxpYnJhcmllcy4gIE1lYW5pbmcsIHRjcGR1bXAsIHNub3J0LAorCQkJCSAgZXRoZXJlYWwsIGFuZCBhbGwgb3RoZXIgcGFja2V0IHNuaWZmZXJzIGFuZCBkZWJ1Z2dlcnMgd29yayBvbgorCQkJCSAgYWxsIFdBTlBJUEUgbmV0b3dyayBpbnRlcmZhY2VzLgorCQkJCQktIFNldCB0aGUgbmV0d29yayBpbnRlcmZhY2UgZW5jb2RpbmcgdHlwZSB0byBBUlBIUkRfUFBQLgorCQkJCQkgIFRoaXMgdGVsbCB0aGUgc25pZmZlcnMgdGhhdCBkYXRhIG9idGFpbmVkIGZyb20gdGhlCisJCQkJCSAgbmV0d29yayBpbnRlcmZhY2UgaXMgaW4gcHVyZSBJUCBmb3JtYXQuCisJCQkJICBGaXggZm9yIDIuMi5YIGtlcm5lbHMgb25seS4KKwkJCQkKKwkJCQlvIFRydWUgaW50ZXJmYWNlIGVuY29kaW5nIG9wdGlvbiBmb3IgRnJhbWUgUmVsYXkgYW5kIENIRExDCisJCQkJCS0gVGhlIGFib3ZlIGZpeCBzZXRzIHRoZSBuZXR3b3JrIGludGVyZmFjZSBlbmNvZGluZworCQkJCQkgIHR5cGUgdG8gQVJQSFJEX1BQUCwgaG93ZXZlciBzb21lIGN1c3RvbWVycyB1c2UKKwkJCQkJICB0aGUgZW5jb2RpbmcgaW50ZXJmYWNlIHR5cGUgdG8gZGV0ZXJtaW5lIHRoZQorCQkJCQkgIHByb3RvY29sIHJ1bm5pbmcuICBUaGVyZWZvcmUsIHRoZSBUVVJFIEVOQ09ESU5HCisJCQkJCSAgb3B0aW9uIHdpbGwgc2V0IHRoZSBpbnRlcmZhY2UgdHlwZSBiYWNrIHRvIHRoZQorCQkJCQkgIG9yaWdpbmFsIHZhbHVlLiAgCisKKwkJCQkJICBOT1RFOiBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkIHdpdGggRnJhbWUgUmVsYXkgYW5kIENIRExDCisJCQkJCQlsaWJwY2FwIGxpYnJhcnkgc3VwcG9ydCB3aWxsIGJlIGJyb2tlbi4gIAorCQkJCQkJaS5lLiB0Y3BkdW1wIHdpbGwgbm90IHdvcmsuCisJCQkJCUZpeCBmb3IgMi4yLnggS2VybmVscyBvbmx5LgorCQkJCQkJCisJCQkJbyBFdGhlcm5ldCBCcmlkZ2luZCBvdmVyIEZyYW1lIFJlbGF5CisJCQkJCS0gVGhlIEZyYW1lIFJlbGF5IGJyaWRnaW5nIGhhcyBiZWVuIGRldmVsb3BlZCBieSAKKwkJCQkJICBLcmlzdGlhbiBIb2ZmbWFubiBhbmQgTWFyayBXZWxscy4gIAorCQkJCQktIFRoZSBMaW51eCBrZXJuZWwgYnJpZGdlIGlzIHVzZWQgdG8gc2VuZCBldGhlcm5ldCAKKwkJCQkJICBkYXRhIG92ZXIgdGhlIGZyYW1lIHJlbGF5IGxpbmtzLgorCQkJCQlGb3IgMi4yLlggS2VybmVscyBvbmx5LgorCisJCQkJbyBBZGRlZCBleHRlbnNpdmUgMi4wLlggc3VwcG9ydC4gTW9zdCBuZXcgZmVhdHVyZXMgb2YKKwkJCQkgIDIuMS41IGZvciBwcm90b2NvbHMgRnJhbWUgUmVsYXksIFBQUCBhbmQgQ0hETEMgYXJlCisJCQkJICBzdXBwb3J0ZWQgdW5kZXIgMi4wLlgga2VybmVscy4gCisKK2JldGExLTIuMi4wIAlEZWMgMzAgMjAwMAorCQkJCW8gVXBkYXRlZCBkcml2ZXJzIGZvciAyLjQuWCBrZXJuZWxzLgorCQkJCW8gVXBkYXRlZCBkcml2ZXJzIGZvciBTTVAgc3VwcG9ydC4KKwkJCQlvIFgyNUFQSSBpcyBub3cgYWJsZSB0byBzaGFyZSBQQ0kgaW50ZXJydXB0cy4KKwkJCQlvIFRvb2sgb3V0IGEgZ2VuZXJhbCBwb2xsaW5nIHJvdXRpbmUgdGhhdCB3YXMgdXNlZAorCQkJCSAgb25seSBieSBYMjVBUEkuIAorCQkJCW8gQWRkZWQgYXBwcm9wcmlhdGUgbG9ja3MgdG8gdGhlIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uCisJCQkJICBjb2RlLgorCQkJCW8gRml4ZWQgYSBidWcgaW4gdGhlIGtleWJvYXJkIGRlYnVnIG1vbml0b3IuCisKK2JldGEyLTIuMi4wCUphbiA4IDIwMDEKKwkJCQlvIFBhdGNoZXMgZm9yIDIuNC4wIGtlcm5lbAorCQkJCW8gUGF0Y2hlcyBmb3IgMi4yLjE4IGtlcm5lbAorCQkJCW8gTWlub3IgdXBkYXRlcyB0byBQUFAgYW5kIENITERDIGRyaXZlcnMuCisJCQkJICBOb3RlOiBObyBmdW5jdGluYWwgZGlmZmVyZW5jZS4gCisKK2JldGEzLTIuMi45CUphbiAxMCAyMDAxCisJCQkJbyBJIG1pc3NlZCB0aGUgMi4yLjE4IGtlcm5lbCBwYXRjaGVzIGluIGJldGEyLTIuMi4wCisJCQkJICByZWxlYXNlLiAgVGhleSBhcmUgaW5jbHVkZWQgaW4gdGhpcyByZWxlYXNlLgorCitTdGFibGUgUmVsZWFzZQorMi4yLjAJCUZlYiAwMSAyMDAxCisJCQkJbyBCdWcgZml4IGluIHdhbmNmZyBHVUkgY29uZmlndXJhdG9yLgorCQkJCQlUaGUgZWRpdCBmdW5jdGlvbiBkaWRuJ3Qgd29yayBwcm9wZXJseS4KKworCitiYXRhMS0yLjIuMQlGZWIgMDkgMjAwMQorCQkJbyBXQU5QSVBFIFRUWSBEcml2ZXIgZW11bGF0aW9uLiAKKwkJCSAgVHdvIG1vZGVzIG9mIG9wZXJhdGlvbiBTeW5jIGFuZCBBc3luYy4KKwkJCQlTeW5jOiBVc2luZyB0aGUgUFBQRCBkYWVtb24sIGtlcm5lbCBTeW5jUFBQIGxheWVyCisJCQkJICAgICAgYW5kIHRoZSBXYW5waXBlIHN5bmMgVFRZIGRyaXZlcjogYSBQUFAgcHJvdG9jb2wgCisJCQkJICAgICAgY29ubmVjdGlvbiBjYW4gYmUgZXN0YWJsaXNoZWQgdmlhIFNhbmdvbWEgYWRhcHRlciwgb3ZlcgorCQkJCSAgICAgIGEgVDEgbGVhc2VkIGxpbmUuCisJCQkKKwkJCQkgICAgICBUaGUgMi40LjAga2VybmVsIFBQUCBsYXllciBzdXBwb3J0cyBNVUxUSUxJTksKKwkJCQkgICAgICBwcm90b2NvbCwgdGhhdCBjYW4gYmUgdXNlZCB0byBidW5kbGUgYW55IG51bWJlciBvZiBTYW5nb21hCisJCQkJICAgICAgYWRhcHRlcnMgKFQxIGxpbmVzKSBpbnRvIG9uZSwgdW5kZXIgYSBzaW5nbGUgSVAgYWRkcmVzcy4KKwkJCQkgICAgICBUaHVzLCBlZmZpY2llbnRseSBvYnRhaW5pbmcgbXVsdGlwbGUgVDEgdGhyb3VnaHB1dC4gCisKKwkJCQkgICAgICBOT1RFOiBUaGUgcmVtb3RlIHNpZGUgbXVzdCBhbHNvIGltcGxlbWVudCBNVUxUSUxJTksgUFBQCisJCQkJCSAgICBwcm90b2NvbC4KKworCQkJCUFzeW5jOlVzaW5nIHRoZSBQUFBEIGRhZW1vbiwga2VybmVsIEFzeW5jUFBQIGxheWVyCisJCQkJICAgICAgYW5kIHRoZSBXQU5QSVBFIGFzeW5jIFRUWSBkcml2ZXI6IGEgUFBQIHByb3RvY29sCisJCQkJICAgICAgY29ubmVjdGlvbiBjYW4gYmUgZXN0YWJsaXNoZWQgdmlhIFNhbmdvbWEgYWRhcHRlciBhbmQKKwkJCQkgICAgICBhIG1vZGVtLCBvdmVyIGEgdGVsZXBob25lIGxpbmUuCisKKwkJCQkgICAgICBUaHVzLCB0aGUgV0FOUElQRSBhc3luYyBUVFkgZHJpdmVyIHNpbXVsYXRlcyBhIHNlcmlhbAorCQkJCSAgICAgIFRUWSBkcml2ZXIgdGhhdCB3b3VsZCBub3JtYWxseSBiZSB1c2VkIHRvIGludGVyZmFjZSB0aGUgCisJCQkJICAgICAgTU9ERU0gdG8gdGhlIGxpbnV4IGtlcm5lbC4KKwkJCQkKKwkJCW8gV0FOUElQRSBQUFAgQmFja3VwIFV0aWxpdHkKKwkJCQlUaGlzIHV0aWxpdHkgd2lsbCBtb25pdG9yIHRoZSBzdGF0ZSBvZiB0aGUgUFBQIFQxIGxpbmUuCisJCQkJSW4gY2FzZSBvZiBmYWlsdXJlLCBhIGRpYWwgdXAgY29ubmVjdGlvbiB3aWxsIGJlIGVzdGFibGlzaGVkCisJCQkJdmlhIHBwcGQgZGFlbW9uLCBldGhlciB2aWEgYSBzZXJpYWwgdHR5IGRyaXZlciAoc2VyaWFsIHBvcnQpLCAKKwkJCQlvciBhIFdBTlBJUEUgYXN5bmMgVFRZIGRyaXZlciAoaW4gY2FzZSBzZXJpYWwgcG9ydCBpcyB1bmF2YWlsYWJsZSkuCisJCQkJCisJCQkJRnVydGhlcm1vcmUsIHdoaWxlIGluIGRpYWwgdXAgbW9kZSwgdGhlIHByaW1hcnkgUFBQIFQxIGxpbmsKKwkJCQl3aWxsIGJlIG1vbml0b3JlZCBmb3Igc2lnbnMgb2YgbGlmZS4gIAorCisJCQkJSWYgdGhlIFBQUCBUMSBsaW5rIGNvbWVzIGJhY2sgdG8gbGlmZSwgdGhlIGRpYWwgdXAgY29ubmVjdGlvbgorCQkJCXdpbGwgYmUgc2h1dGRvd24gYW5kIFQxIGxpbmUgcmUtZXN0YWJsaXNoZWQuCisJCQkKKworCQkJbyBOZXcgU2V0dXAgaW5zdGFsbGF0aW9uIHNjcmlwdC4KKwkJCQlPcHRpb24gdG8gVVBHUkFERSBkZXZpY2UgZHJpdmVycyBpZiB0aGUga2VybmVsIHNvdXJjZSBoYXMKKwkJCQlhbHJlYWR5IGJlZW4gcGF0Y2hlZCB3aXRoIFdBTlBJUEUuCisKKwkJCQlPcHRpb24gdG8gQ09NUElMRSBXQU5QSVBFIG1vZHVsZXMgYWdhaW5zdCB0aGUgY3VycmVudGx5IAorCQkJCXJ1bm5pbmcga2VybmVsLCB0aHVzIG5vIG5lZWQgZm9yIG1hbnVhbCBrZXJuZWwgYW5kIG1vZHVsZQorCQkJCXJlLWNvbXBpbGF0aW4uCisJCQkKKwkJCW8gVXBkYXRlcyBhbmQgQnVnIEZpeGVzIHRvIHdhbmNmZyB1dGlsaXR5LgorCitiYXRhMi0yLjIuMQlGZWIgMjAgMjAwMQorCisJCQlvIEJ1ZyBmaXhlcyB0byB0aGUgQ0hETEMgZGV2aWNlIGRyaXZlcnMuCisJCQkJVGhlIGRyaXZlciBoYWQgY29tcGlsYXRpb24gcHJvYmxlbXMgdW5kZXIga2VybmVscworCQkJCTIuMi4xNCBvciBsb3dlci4KKworCQkJbyBCdWcgZml4ZXMgdG8gdGhlIFNldHVwIGluc3RhbGxhdGlvbiBzY3JpcHQuCisJCQkJVGhlIGRldmljZSBkcml2ZXJzIGNvbXBpbGF0aW9uIG9wdGlvbnMgZGlkbid0IHdvcmsKKwkJCQlwcm9wZXJseS4KKworCQkJbyBVcGRhdGUgdG8gdGhlIHdwYmFja3VwZCBkYWVtb24uICAKKwkJCQlPcHRpbWl6ZWQgdGhlIGNyb3NzLW92ZXIgdGltZXMsIGJldHdlZW4gdGhlIHByaW1hcnkKKwkJCQlsaW5rIGFuZCB0aGUgYmFja3VwIGRpYWx1cC4KKworYmV0YTMtMi4yLjEJTWFyIDAyIDIwMDEKKwkJCW8gUGF0Y2hlcyBmb3IgMi40LjIga2VybmVsLgorCisJCQlvIEJ1ZyBmaXhlcyB0byB1dGlsLyBtYWtlIGZpbGVzLgorCQkJbyBCdWcgZml4ZXMgdG8gdGhlIFNldHVwIGluc3RhbGxhdGlvbiBzY3JpcHQuCisKKwkJCW8gVG9vayBvdXQgdGhlIGJhY2t1cGQgc3VwcG9ydCBhbmQgbWFkZSBpdCBpbnRvCisJCQkgIGFzIHNlcGFyYXRlIHBhY2thZ2UuCisJCQkgIAorYmV0YTQtMi4yLjEgICAgIE1hciAxMiAyMDAxCisKKwkJbyBGaXggdG8gdGhlIEZyYW1lIFJlbGF5IERldmljZSBkcml2ZXIuCisJCQlJUFNBQyBzZW5kcyBhIHBhY2tldCBvZiB6ZXJvIGxlbmd0aAorCQkJaGVhZGVyIHRvIHRoZSBmcmFtZSByZWxheSBkcml2ZXIuICBUaGUKKwkJCWRyaXZlciB0cmllcyB0byBwdXNoIGl0cyBvd24gMiBieXRlIGhlYWRlcgorCQkJaW50byB0aGUgcGFja2V0LCB3aGljaCBjYXVzZXMgdGhlIGRyaXZlciB0bworCQkJY3Jhc2guCisKKwkJbyBGaXggdGhlIFdBTlBJUEUgcmUtY29uZmlndXJhdGlvbiBjb2RlLgorCQkJQnVnIHdhcyBmb3VuZCBieSB0cnlpbmcgdG8gcnVuICB0aGUgY2ZnZnQxIHdoaWxlIHRoZQorCQkJaW50ZXJmYWNlIHdhcyBhbHJlYWR5IHJ1bm5pbmcuICAKKworCQlvIFVwZGF0ZXMgdG8gY2ZnZnQxLgorCQkJV3JpdGVzIGEgd2FucGlwZSMuY2ZnZnQxIGNvbmZpZ3VyYXRpb24gZmlsZQorCQkJb25jZSB0aGUgQ1NVL0RTVSBpcyBjb25maWd1cmVkLiBUaGlzIGZpbGUgY2FuCisJCQlob2xkcyB0aGUgY3VycmVudCBDU1UvRFNVIGNvbmZpZ3VyYXRpb24uCisKKworCis+Pj4+Pj4gRU5EIE9GIFJFQURNRSA8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDwKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvd2F2ZWxhbi50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvd2F2ZWxhbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFhY2Y1ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy93YXZlbGFuLnR4dApAQCAtMCwwICsxLDczIEBACisJVGhlIFdhdmVsYW4gZHJpdmVycyBzYWdhCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlCeSBKZWFuIFRvdXJyaWxoZXMgPGp0QGhwbC5ocC5jb20+CisKKwlUaGUgV2F2ZWxhbiBpcyBhIFJhZGlvIG5ldHdvcmsgYWRhcHRlciBkZXNpZ25lZCBieQorTHVjZW50LiBVbmRlciB0aGlzIGdlbmVyaWMgbmFtZSBpcyBoaWRkZW4gcXVpdGUgYSB2YXJpZXR5IG9mIGhhcmR3YXJlLAorYW5kIG1hbnkgTGludXggZHJpdmVyIHRvIHN1cHBvcnQgaXQuCisJVGhlIGdldCB0aGUgZnVsbCBzdG9yeSBvbiBXaXJlbGVzcyBMQU5zLCBwbGVhc2UgY29uc3VsdCA6CisJCWh0dHA6Ly93d3cuaHBsLmhwLmNvbS9wZXJzb25hbC9KZWFuX1RvdXJyaWxoZXMvTGludXgvCisKKyJ3YXZlbGFuIiBkcml2ZXIgKG9sZCBJU0EgV2F2ZWxhbikKKy0tLS0tLS0tLS0tLS0tLS0KKwlvIENvbmZpZyA6CU5ldHdvcmsgZGV2aWNlIC0+IFdpcmVsZXNzIExBTiAtPiBBVCZUIFdhdmVMQU4KKwlvIExvY2F0aW9uIDoJLi4uL2RyaXZlcnMvbmV0L3dhdmVsYW4qCisJbyBpbi1saW5lIGRvYyA6CS4uLi9kcml2ZXJzL25ldC93YXZlbGFuLnAuaAorCW8gb24tbGluZSBkb2MgOgorCSAgICBodHRwOi8vd3d3LmhwbC5ocC5jb20vcGVyc29uYWwvSmVhbl9Ub3VycmlsaGVzL0xpbnV4L1dhdmVsYW4uaHRtbAorCisJVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgSVNBIHZlcnNpb24gb2YgdGhlIGZpcnN0IGdlbmVyYXRpb24KK29mIHRoZSBXYXZlbGFuLCBub3cgZGlzY29udGludWVkLiBUaGUgZGV2aWNlIGlzIDIgTWIvcywgY29tcG9zZWQgb2YgYQorSW50ZWwgODI1ODYgY29udHJvbGxlciBhbmQgYSBMdWNlbnQgTW9kZW0sIGFuZCBpcyBOT1QgODAyLjExIGNvbXBsaWFudC4KKwlUaGUgZHJpdmVyIGhhcyBiZWVuIHRlc3RlZCB3aXRoIHRoZSBmb2xsb3dpbmcgaGFyZHdhcmUgOgorCW8gV2F2ZWxhbiBJU0EgOTE1IE1IeiAoZnVsbCBsZW5ndGggSVNBIGNhcmQpIAorCW8gV2F2ZWxhbiBJU0EgOTE1IE1IeiAyLjAgKGhhbGYgbGVuZ3RoIElTQSBjYXJkKSAKKwlvIFdhdmVsYW4gSVNBIDIuNCBHSHogKGZ1bGwgbGVuZ3RoIElTQSBjYXJkLCBmaXhlZCBmcmVxdWVuY3kpIAorCW8gV2F2ZWxhbiBJU0EgMi40IEdIeiAyLjAgKGhhbGYgbGVuZ3RoIElTQSBjYXJkLCBmcmVxdWVuY3kgc2VsZWN0YWJsZSkgCisJbyBBYm92ZSBjYXJkcyB3aXRoIHRoZSBvcHRpb25hbCBERVMgZW5jcnlwdGlvbiBmZWF0dXJlIAorCisid2F2ZWxhbl9jcyIgZHJpdmVyIChvbGQgUGNtY2lhIFdhdmVsYW4pCistLS0tLS0tLS0tLS0tLS0tLS0tCisJbyBDb25maWcgOglOZXR3b3JrIGRldmljZSAtPiBQQ01DSUEgbmV0d29yayAtPgorCQkJCVBjbWNpYSBXaXJlbGVzcyBMQU4gLT4gQVQmVC9MdWNlbnQgV2F2ZUxBTgorCW8gTG9jYXRpb24gOgkuLi4vZHJpdmVycy9uZXQvcGNtY2lhL3dhdmVsYW4qCisJbyBpbi1saW5lIGRvYyA6CS4uLi9kcml2ZXJzL25ldC9wY21jaWEvd2F2ZWxhbl9jcy5oCisJbyBvbi1saW5lIGRvYyA6CisJICAgIGh0dHA6Ly93d3cuaHBsLmhwLmNvbS9wZXJzb25hbC9KZWFuX1RvdXJyaWxoZXMvTGludXgvV2F2ZWxhbi5odG1sCisKKwlUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBQQ01DSUEgdmVyc2lvbiBvZiB0aGUgZmlyc3QKK2dlbmVyYXRpb24gb2YgdGhlIFdhdmVsYW4sIG5vdyBkaXNjb250aW51ZWQuIFRoZSBkZXZpY2UgaXMgMiBNYi9zLAorY29tcG9zZWQgb2YgYSBJbnRlbCA4MjU5MyBjb250cm9sbGVyICh0b3RhbGx5IGRpZmZlcmVudCBmcm9tIHRoZSA4MjU4NikKK2FuZCBhIEx1Y2VudCBNb2RlbSwgYW5kIE5PVCA4MDIuMTEgY29tcGF0aWJsZS4KKwlUaGUgZHJpdmVyIGhhcyBiZWVuIHRlc3RlZCB3aXRoIHRoZSBmb2xsb3dpbmcgaGFyZHdhcmUgOgorCW8gV2F2ZWxhbiBQY21jaWEgOTE1IE1IeiAyLjAgKFBjbWNpYSBjYXJkICsgc2VwYXJhdGUKKwkJCQkJbW9kZW0vYW50ZW5uYSBibG9jaykgCisJbyBXYXZlbGFuIFBjbWNpYSAyLjQgR0h6IDIuMCAoUGNtY2lhIGNhcmQgKyBzZXBhcmF0ZQorCQkJCQltb2RlbS9hbnRlbm5hIGJsb2NrKSAKKworInd2bGFuX2NzIiBkcml2ZXIgKFdhdmVsYW4gSUVFRSwgR1BMKQorLS0tLS0tLS0tLS0tLS0tLS0KKwlvIENvbmZpZyA6CU5vdCB5ZXQgaW4ga2VybmVsCisJbyBMb2NhdGlvbiA6CVBjbWNpYSBwYWNrYWdlIDMuMS4xMCsKKwlvIG9uLWxpbmUgZG9jIDoJaHR0cDovL3d3dy5mYXN0YS5maC1kb3J0bXVuZC5kZS91c2Vycy9hbmR5L3d2bGFuLworCisJVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgY3VycmVudCBnZW5lcmF0aW9uIG9mIFdhdmVsYW4gSUVFRSwKK3doaWNoIGlzIDgwMi4xMSBjb21wYXRpYmxlLiBEZXBlbmRpbmcgb24gdmVyc2lvbiwgaXQgaXMgMiBNYi9zIG9yIDExCitNYi9zLCB3aXRoIG9yIHdpdGhvdXQgZW5jcnlwdGlvbiwgYWxsIGltcGxlbWVudGVkIGluIEx1Y2VudCBzcGVjaWZpYworRFNQICh0aGUgSGVybWVzKS4KKwlUaGlzIGlzIGEgR1BMIGZ1bGwgc291cmNlIFBDTUNJQSBkcml2ZXIgKElTQSBpcyBqdXN0IGEgUGNtY2lhCitjYXJkIHdpdGggSVNBLVBjbWNpYSBicmlkZ2UpLgorCisid2F2ZWxhbjJfY3MiIGRyaXZlciAoV2F2ZWxhbiBJRUVFLCBiaW5hcnkpCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCW8gQ29uZmlnIDoJTm90IHlldCBpbiBrZXJuZWwKKwlvIExvY2F0aW9uIDoJZnRwOi8vc291cmNlZm9yZ2Uub3JnL3BjbWNpYS9jb250cmliLworCisJVGhpcyBkcml2ZXIgc3VwcG9ydCBleGFjdGx5IHRoZSBzYW1lIGhhcmR3YXJlIGFzIHRoZSBwcmV2aW91cworZHJpdmVyLCB0aGUgbWFpbiBkaWZmZXJlbmNlIGlzIHRoYXQgaXQgaXMgYmFzZWQgb24gYSBiaW5hcnkgbGlicmFyeQorYW5kIHN1cHBvcnRlZCBieSBMdWNlbnQuCisKKwlJIGhvcGUgaXQgY2xlYXJzIHRoZSBjb25mdXNpb24gOy0pCisKKwlKZWFuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveDI1LWlmYWNlLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy94MjUtaWZhY2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NWNjODcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcveDI1LWlmYWNlLnR4dApAQCAtMCwwICsxLDEyMyBAQAorCQkJWC4yNSBEZXZpY2UgRHJpdmVyIEludGVyZmFjZSAxLjEKKworCQkJICAgSm9uYXRoYW4gTmF5bG9yIDI2LjEyLjk2CisKK1RoaXMgaXMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgbWVzc2FnZXMgdG8gYmUgcGFzc2VkIGJldHdlZW4gdGhlIFguMjUgUGFja2V0CitMYXllciBhbmQgdGhlIFguMjUgZGV2aWNlIGRyaXZlci4gVGhleSBhcmUgZGVzaWduZWQgdG8gYWxsb3cgZm9yIHRoZSBlYXN5CitzZXR0aW5nIG9mIHRoZSBMQVBCIG1vZGUgZnJvbSB3aXRoaW4gdGhlIFBhY2tldCBMYXllci4KKworVGhlIFguMjUgZGV2aWNlIGRyaXZlciB3aWxsIGJlIGNvZGVkIG5vcm1hbGx5IGFzIHBlciB0aGUgTGludXggZGV2aWNlIGRyaXZlcgorc3RhbmRhcmRzLiBNb3N0IFguMjUgZGV2aWNlIGRyaXZlcnMgd2lsbCBiZSBtb2RlcmF0ZWx5IHNpbWlsYXIgdG8gdGhlCithbHJlYWR5IGV4aXN0aW5nIEV0aGVybmV0IGRldmljZSBkcml2ZXJzLiBIb3dldmVyIHVubGlrZSB0aG9zZSBkcml2ZXJzLCB0aGUKK1guMjUgZGV2aWNlIGRyaXZlciBoYXMgYSBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggaXQsIGFuZCB0aGlzIGluZm9ybWF0aW9uCituZWVkcyB0byBiZSBwYXNzZWQgdG8gYW5kIGZyb20gdGhlIFBhY2tldCBMYXllciBmb3IgcHJvcGVyIG9wZXJhdGlvbi4KKworQWxsIG1lc3NhZ2VzIGFyZSBoZWxkIGluIHNrX2J1ZmYncyBqdXN0IGxpa2UgcmVhbCBkYXRhIHRvIGJlIHRyYW5zbWl0dGVkCitvdmVyIHRoZSBMQVBCIGxpbmsuIFRoZSBmaXJzdCBieXRlIG9mIHRoZSBza2J1ZmYgaW5kaWNhdGVzIHRoZSBtZWFuaW5nIG9mCit0aGUgcmVzdCBvZiB0aGUgc2tidWZmLCBpZiBhbnkgbW9yZSBpbmZvcm1hdGlvbiBkb2VzIGV4aXN0LgorCisKK1BhY2tldCBMYXllciB0byBEZXZpY2UgRHJpdmVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGaXJzdCBCeXRlID0gMHgwMAorCitUaGlzIGluZGljYXRlcyB0aGF0IHRoZSByZXN0IG9mIHRoZSBza2J1ZmYgY29udGFpbnMgZGF0YSB0byBiZSB0cmFuc21pdHRlZAorb3ZlciB0aGUgTEFQQiBsaW5rLiBUaGUgTEFQQiBsaW5rIHNob3VsZCBhbHJlYWR5IGV4aXN0IGJlZm9yZSBhbnkgZGF0YSBpcworcGFzc2VkIGRvd24uCisKK0ZpcnN0IEJ5dGUgPSAweDAxCisKK0VzdGFibGlzaCB0aGUgTEFQQiBsaW5rLiBJZiB0aGUgbGluayBpcyBhbHJlYWR5IGVzdGFibGlzaGVkIHRoZW4gdGhlIGNvbm5lY3QKK2NvbmZpcm1hdGlvbiBtZXNzYWdlIHNob3VsZCBiZSByZXR1cm5lZCBhcyBzb29uIGFzIHBvc3NpYmxlLgorCitGaXJzdCBCeXRlID0gMHgwMgorCitUZXJtaW5hdGUgdGhlIExBUEIgbGluay4gSWYgaXQgaXMgYWxyZWFkeSBkaXNjb25uZWN0ZWQgdGhlbiB0aGUgZGlzY29ubmVjdAorY29uZmlybWF0aW9uIG1lc3NhZ2Ugc2hvdWxkIGJlIHJldHVybmVkIGFzIHNvb24gYXMgcG9zc2libGUuCisKK0ZpcnN0IEJ5dGUgPSAweDAzCisKK0xBUEIgcGFyYW1ldGVycy4gVG8gYmUgZGVmaW5lZC4KKworCitEZXZpY2UgRHJpdmVyIHRvIFBhY2tldCBMYXllcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRmlyc3QgQnl0ZSA9IDB4MDAKKworVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgcmVzdCBvZiB0aGUgc2tidWZmIGNvbnRhaW5zIGRhdGEgdGhhdCBoYXMgYmVlbgorcmVjZWl2ZWQgb3ZlciB0aGUgTEFQQiBsaW5rLgorCitGaXJzdCBCeXRlID0gMHgwMQorCitMQVBCIGxpbmsgaGFzIGJlZW4gZXN0YWJsaXNoZWQuIFRoZSBzYW1lIG1lc3NhZ2UgaXMgdXNlZCBmb3IgYm90aCBhIExBUEIKK2xpbmsgY29ubmVjdF9jb25maXJtYXRpb24gYW5kIGEgY29ubmVjdF9pbmRpY2F0aW9uLgorCitGaXJzdCBCeXRlID0gMHgwMgorCitMQVBCIGxpbmsgaGFzIGJlZW4gdGVybWluYXRlZC4gVGhpcyBzYW1lIG1lc3NhZ2UgaXMgdXNlZCBmb3IgYm90aCBhIExBUEIKK2xpbmsgZGlzY29ubmVjdF9jb25maXJtYXRpb24gYW5kIGEgZGlzY29ubmVjdF9pbmRpY2F0aW9uLgorCitGaXJzdCBCeXRlID0gMHgwMworCitMQVBCIHBhcmFtZXRlcnMuIFRvIGJlIGRlZmluZWQuCisKKworCitQb3NzaWJsZSBQcm9ibGVtcworPT09PT09PT09PT09PT09PT0KKworKEhlbm5lciBFaXNlbiwgMjAwMC0xMC0yOCkKKworVGhlIFguMjUgcGFja2V0IGxheWVyIHByb3RvY29sIGRlcGVuZHMgb24gYSByZWxpYWJsZSBkYXRhbGluayBzZXJ2aWNlLgorVGhlIExBUEIgcHJvdG9jb2wgcHJvdmlkZXMgc3VjaCByZWxpYWJsZSBzZXJ2aWNlLiBCdXQgdGhpcyByZWxpYWJpbGl0eQoraXMgbm90IHByZXNlcnZlZCBieSB0aGUgTGludXggbmV0d29yayBkZXZpY2UgZHJpdmVyIGludGVyZmFjZToKKworLSBXaXRoIExpbnV4IDIuNC54IChhbmQgYWJvdmUpIFNNUCBrZXJuZWxzLCBwYWNrZXQgb3JkZXJpbmcgaXMgbm90CisgIHByZXNlcnZlZC4gRXZlbiBpZiBhIGRldmljZSBkcml2ZXIgY2FsbHMgbmV0aWZfcngoc2tiMSkgYW5kIGxhdGVyCisgIG5ldGlmX3J4KHNrYjIpLCBza2IyIG1pZ2h0IGJlIGRlbGl2ZXJlZCB0byB0aGUgbmV0d29yayBsYXllcgorICBlYXJsaWVyIHRoYXQgc2tiMS4KKy0gRGF0YSBwYXNzZWQgdXBzdHJlYW0gYnkgbWVhbnMgb2YgbmV0aWZfcngoKSBtaWdodCBiZSBkcm9wcGVkIGJ5IHRoZQorICBrZXJuZWwgaWYgdGhlIGJhY2tsb2cgcXVldWUgaXMgY29uZ2VzdGVkLgorCitUaGUgWC4yNSBwYWNrZXQgbGF5ZXIgcHJvdG9jb2wgd2lsbCBkZXRlY3QgdGhpcyBhbmQgcmVzZXQgdGhlIHZpcnR1YWwKK2NhbGwgaW4gcXVlc3Rpb24uIEJ1dCBtYW55IHVwcGVyIGxheWVyIHByb3RvY29scyBhcmUgbm90IGRlc2lnbmVkIHRvCitoYW5kbGUgc3VjaCBOLVJlc2V0IGV2ZW50cyBncmFjZWZ1bGx5LiBBbmQgZnJlcXVlbnQgTi1SZXNldCBldmVudHMKK3dpbGwgYWx3YXlzIGRlZ3JhZGUgcGVyZm9ybWFuY2UuCisKK1RodXMsIGRyaXZlciBhdXRob3JzIHNob3VsZCBtYWtlIG5ldGlmX3J4KCkgYXMgcmVsaWFibGUgYXMgcG9zc2libGU6CisKK1NNUCByZS1vcmRlcmluZyB3aWxsIG5vdCBvY2N1ciBpZiB0aGUgZHJpdmVyJ3MgaW50ZXJydXB0IGhhbmRsZXIgaXMKK2Fsd2F5cyBleGVjdXRlZCBvbiB0aGUgc2FtZSBDUFUuIFRodXMsCisKKy0gRHJpdmVyIGF1dGhvcnMgc2hvdWxkIHVzZSBpcnEgYWZmaW5pdHkgZm9yIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4KKworVGhlIHByb2JhYmlsaXR5IG9mIHBhY2tldCBsb3NzIGR1ZSB0byBiYWNrbG9nIGNvbmdlc3Rpb24gY2FuIGJlCityZWR1Y2VkIGJ5IHRoZSBmb2xsb3dpbmcgbWVhc3VyZXMgb3IgYSBjb21iaW5hdGlvbiB0aGVyZW9mOgorCisoMSkgRHJpdmVycyBmb3Iga2VybmVsIHZlcnNpb25zIDIuNC54IGFuZCBhYm92ZSBzaG91bGQgYWx3YXlzIGNoZWNrIHRoZQorICAgIHJldHVybiB2YWx1ZSBvZiBuZXRpZl9yeCgpLiBJZiBpdCByZXR1cm5zIE5FVF9SWF9EUk9QLCB0aGUKKyAgICBkcml2ZXIncyBMQVBCIHByb3RvY29sIG11c3Qgbm90IGNvbmZpcm0gcmVjZXB0aW9uIG9mIHRoZSBmcmFtZQorICAgIHRvIHRoZSBwZWVyLiAKKyAgICBUaGlzIHdpbGwgcmVsaWFibHkgc3VwcHJlc3MgcGFja2V0IGxvc3MuIFRoZSBMQVBCIHByb3RvY29sIHdpbGwKKyAgICBhdXRvbWF0aWNhbGx5IGNhdXNlIHRoZSBwZWVyIHRvIHJlLXRyYW5zbWl0IHRoZSBkcm9wcGVkIHBhY2tldAorICAgIGxhdGVyLgorICAgIFRoZSBsYXBiIG1vZHVsZSBpbnRlcmZhY2Ugd2FzIG1vZGlmaWVkIHRvIHN1cHBvcnQgdGhpcy4gSXRzCisgICAgZGF0YV9pbmRpY2F0aW9uKCkgbWV0aG9kIHNob3VsZCBub3cgdHJhbnNwYXJlbnRseSBwYXNzIHRoZQorICAgIG5ldGlmX3J4KCkgcmV0dXJuIHZhbHVlIHRvIHRoZSAobGFwYiBtb3BkdWxlKSBjYWxsZXIuCisoMikgRHJpdmVycyBmb3Iga2VybmVsIHZlcnNpb25zIDIuMi54IHNob3VsZCBhbHdheXMgY2hlY2sgdGhlIGdsb2JhbAorICAgIHZhcmlhYmxlIG5ldGRldl9kcm9wcGluZyB3aGVuIGEgbmV3IGZyYW1lIGlzIHJlY2VpdmVkLiBUaGUgZHJpdmVyCisgICAgc2hvdWxkIG9ubHkgY2FsbCBuZXRpZl9yeCgpIGlmIG5ldGRldl9kcm9wcGluZyBpcyB6ZXJvLiBPdGhlcndpc2UKKyAgICB0aGUgZHJpdmVyIHNob3VsZCBub3QgY29uZmlybSBkZWxpdmVyeSBvZiB0aGUgZnJhbWUgYW5kIGRyb3AgaXQuCisgICAgQWx0ZXJuYXRpdmVseSwgdGhlIGRyaXZlciBjYW4gcXVldWUgdGhlIGZyYW1lIGludGVybmFsbHkgYW5kIGNhbGwKKyAgICBuZXRpZl9yeCgpIGxhdGVyIHdoZW4gbmV0aWZfZHJvcHBpbmcgaXMgMCBhZ2Fpbi4gSW4gdGhhdCBjYXNlLCBkZWxpdmVyeQorICAgIGNvbmZpcm1hdGlvbiBzaG91bGQgYWxzbyBiZSBkZWZlcnJlZCBzdWNoIHRoYXQgdGhlIGludGVybmFsIHF1ZXVlCisgICAgY2Fubm90IGdyb3cgdG8gbXVjaC4KKyAgICBUaGlzIHdpbGwgbm90IHJlbGlhYmx5IGF2b2lkIHBhY2tldCBsb3NzLCBidXQgdGhlIHByb2JhYmlsaXR5CisgICAgb2YgcGFja2V0IGxvc3MgaW4gbmV0aWZfcngoKSBwYXRoIHdpbGwgYmUgc2lnbmlmaWNhbnRseSByZWR1Y2VkLgorKDMpIEFkZGl0aW9uYWxseSwgZHJpdmVyIGF1dGhvcnMgbWlnaHQgY29uc2lkZXIgdG8gc3VwcG9ydAorICAgIENPTkZJR19ORVRfSFdfRkxPV0NPTlRST0wuIFRoaXMgYWxsb3dzIHRoZSBkcml2ZXIgdG8gYmUgd29rZW4gdXAKKyAgICB3aGVuIGEgcHJldmlvdXNseSBjb25nZXN0ZWQgYmFja2xvZyBxdWV1ZSBiZWNvbWVzIGVtcHR5IGFnYWluLgorICAgIFRoZSBkcml2ZXIgY291bGQgdXNlcyB0aGlzIGZvciBmbG93LWNvbnRyb2xsaW5nIHRoZSBwZWVyIGJ5IG1lYW5zCisgICAgb2YgdGhlIExBUEIgcHJvdG9jb2wncyBmbG93LWNvbnRyb2wgc2VydmljZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy94MjUudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3gyNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkxYzZkNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy94MjUudHh0CkBAIC0wLDAgKzEsNDQgQEAKK0xpbnV4IFguMjUgUHJvamVjdAorCitBcyBteSB0aGlyZCB5ZWFyIGRpc3NlcnRhdGlvbiBhdCBVbml2ZXJzaXR5IEkgaGF2ZSB0YWtlbiBpdCB1cG9uIG15c2VsZiB0bword3JpdGUgYW4gWC4yNSBpbXBsZW1lbnRhdGlvbiBmb3IgTGludXguIE15IGFpbSBpcyB0byBwcm92aWRlIGEgY29tcGxldGUgWC4yNQorUGFja2V0IExheWVyIGFuZCBhIExBUEIgbW9kdWxlIHRvIGFsbG93IGZvciAibm9ybWFsIiBYLjI1IHRvIGJlIHJ1biB1c2luZworTGludXguIFRoZXJlIGFyZSB0d28gc29ydHMgb2YgWC4yNSBjYXJkcyBhdmFpbGFibGUsIGludGVsbGlnZW50IG9uZXMgdGhhdAoraW1wbGVtZW50IExBUEIgb24gdGhlIGNhcmQgaXRzZWxmLCBhbmQgdW5pbnRlbGxpZ2VudCBvbmVzIHRoYXQgc2ltcGx5IGRvCitmcmFtaW5nLCBiaXQtc3R1ZmZpbmcgYW5kIGNoZWNrc3VtbWluZy4gVGhlc2UgYm90aCBuZWVkIHRvIGJlIGhhbmRsZWQgYnkgdGhlCitzeXN0ZW0uCisKK0kgdGhlcmVmb3JlIGRlY2lkZWQgdG8gd3JpdGUgdGhlIGltcGxlbWVudGF0aW9uIHN1Y2ggdGhhdCBhcyBmYXIgYXMgdGhlCitQYWNrZXQgTGF5ZXIgaXMgY29uY2VybmVkLCB0aGUgbGluayBsYXllciB3YXMgYmVpbmcgcGVyZm9ybWVkIGJ5IGEgbG93ZXIKK2xheWVyIG9mIHRoZSBMaW51eCBrZXJuZWwgYW5kIHRoZXJlZm9yZSBpdCBkaWQgbm90IGNvbmNlcm4gaXRzZWxmIHdpdGgKK2ltcGxlbWVudGF0aW9uIG9mIExBUEIuIFRoZXJlZm9yZSB0aGUgTEFQQiBtb2R1bGVzIHdvdWxkIGJlIGNhbGxlZCBieQordW5pbnRlbGxpZ2VudCBYLjI1IGNhcmQgZHJpdmVycyBhbmQgbm90IGJ5IGludGVsbGlnZW50IG9uZXMsIHRoaXMgd291bGQKK3Byb3ZpZGUgYSB1bmlmb3JtIGRldmljZSBkcml2ZXIgaW50ZXJmYWNlLCBhbmQgc2ltcGxpZnkgY29uZmlndXJhdGlvbi4KKworVG8gY29uZnVzZSBtYXR0ZXJzIGEgbGl0dGxlLCBhbiA4MDIuMiBMTEMgaW1wbGVtZW50YXRpb24gZm9yIExpbnV4IGlzIGJlaW5nCit3cml0dGVuIHdoaWNoIHdpbGwgYWxsb3cgWC4yNSB0byBiZSBydW4gb3ZlciBhbiBFdGhlcm5ldCAob3IgVG9rZW4gUmluZykgYW5kCitjb25mb3JtIHdpdGggdGhlIEpOVCAiUGluayBCb29rIiwgdGhpcyB3aWxsIGhhdmUgYSBkaWZmZXJlbnQgaW50ZXJmYWNlIHRvCit0aGUgUGFja2V0IExheWVyIGJ1dCB0aGVyZSB3aWxsIGJlIG5vIGNvbmZ1c2lvbiBzaW5jZSB0aGUgY2xhc3Mgb2YgZGV2aWNlCitiZWluZyBzZXJ2ZWQgYnkgdGhlIExMQyB3aWxsIGJlIGNvbXBsZXRlbHkgc2VwYXJhdGUgZnJvbSBMQVBCLiBUaGUgTExDCitpbXBsZW1lbnRhdGlvbiBpcyBiZWluZyBkb25lIGFzIHBhcnQgb2YgYW5vdGhlciBwcm90b2NvbCBwcm9qZWN0IChTTkEpIGFuZAorYnkgYSBkaWZmZXJlbnQgYXV0aG9yLgorCitKdXN0IHdoZW4geW91IHRob3VnaHQgdGhhdCBpdCBjb3VsZCBub3QgYmVjb21lIG1vcmUgY29uZnVzaW5nLCBhbm90aGVyCitvcHRpb24gYXBwZWFyZWQsIFhPVC4gVGhpcyBhbGxvd3MgWC4yNSBQYWNrZXQgTGF5ZXIgZnJhbWVzIHRvIG9wZXJhdGUgb3ZlcgordGhlIEludGVybmV0IHVzaW5nIFRDUC9JUCBhcyBhIHJlbGlhYmxlIGxpbmsgbGF5ZXIuIFJGQzE2MTMgc3BlY2lmaWVzIHRoZQorZm9ybWF0IGFuZCBiZWhhdmlvdXIgb2YgdGhlIHByb3RvY29sLiBJZiB0aW1lIHBlcm1pdHMgdGhpcyBvcHRpb24gd2lsbCBhbHNvCitiZSBhY3RpdmVseSBjb25zaWRlcmVkLgorCitBIGxpbnV4LXgyNSBtYWlsaW5nIGxpc3QgaGFzIGJlZW4gY3JlYXRlZCBhdCB2Z2VyLmtlcm5lbC5vcmcgdG8gc3VwcG9ydCB0aGUKK2RldmVsb3BtZW50IGFuZCB1c2Ugb2YgTGludXggWC4yNS4gSXQgaXMgZWFybHkgZGF5cyB5ZXQsIGJ1dCBpbnRlcmVzdGVkCitwYXJ0aWVzIGFyZSB3ZWxjb21lIHRvIHN1YnNjcmliZSB0byBpdC4gSnVzdCBzZW5kIGEgbWVzc2FnZSB0bworbWFqb3Jkb21vQHZnZXIua2VybmVsLm9yZyB3aXRoIHRoZSBmb2xsb3dpbmcgaW4gdGhlIG1lc3NhZ2UgYm9keToKKworc3Vic2NyaWJlIGxpbnV4LXgyNQorZW5kCisKK1RoZSBjb250ZW50cyBvZiB0aGUgU3ViamVjdCBsaW5lIGFyZSBpZ25vcmVkLgorCitKb25hdGhhbgorCitnNGtseEBnNGtseC5kZW1vbi5jby51awpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3o4NTMwZHJ2LnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy96ODUzMGRydi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIwNmFiYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy96ODUzMGRydi50eHQKQEAgLTAsMCArMSw2NTcgQEAKK1RoaXMgaXMgYSBzdWJzZXQgb2YgdGhlIGRvY3VtZW50YXRpb24uIFRvIHVzZSB0aGlzIGRyaXZlciB5b3UgTVVTVCBoYXZlIHRoZQorZnVsbCBwYWNrYWdlIGZyb206CisKK0ludGVybmV0OgorPT09PT09PT09CisKKzEuIGZ0cDovL2Z0cC5jY2FjLnJ3dGgtYWFjaGVuLmRlL3B1Yi9qci96ODUzMGRydi11dGlsc18zLjAtMy50YXIuZ3oKKworMi4gZnRwOi8vZnRwLnBzcHQuZmkvcHViL2hhbS9saW51eC9heDI1L3o4NTMwZHJ2LXV0aWxzXzMuMC0zLnRhci5negorCitQbGVhc2Ugbm90ZSB0aGF0IHRoZSBpbmZvcm1hdGlvbiBpbiB0aGlzIGRvY3VtZW50IG1heSBiZSBob3BlbGVzc2x5IG91dGRhdGVkLgorQSBuZXcgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnRhdGlvbiwgYWxvbmcgd2l0aCBsaW5rcyB0byBvdGhlciBpbXBvcnRhbnQKK0xpbnV4IEtlcm5lbCBBWC4yNSBkb2N1bWVudGF0aW9uIGFuZCBwcm9ncmFtcywgaXMgYXZhaWxhYmxlIG9uCitodHRwOi8veWFpbmEuZGUvanJldXRlcgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKwkgU0NDLkMgLSBMaW51eCBkcml2ZXIgZm9yIFo4NTMwIGJhc2VkIEhETEMgY2FyZHMgZm9yIEFYLjI1ICAgICAgCisKKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgICAgICAgKGMpIDE5OTMsMjAwMCBieSBKb2VyZyBSZXV0ZXIgREwxQktFIDxqcmV1dGVyQHlhaW5hLmRlPgorCisgICAgICAgIHBvcnRpb25zIChjKSAxOTkzIEd1aWRvIHRlbiBEb2xsZSBQRTFOTloKKworICAgICAgICBmb3IgdGhlIGNvbXBsZXRlIGNvcHlyaWdodCBub3RpY2Ugc2VlID4+IENvcHlpbmcuWjg1MzBEUlYgPDwKKworICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCisKKworMS4gSW5pdGlhbGl6YXRpb24gb2YgdGhlIGRyaXZlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUbyB1c2UgdGhlIGRyaXZlciwgMyBzdGVwcyBtdXN0IGJlIHBlcmZvcm1lZDoKKworICAgICAxLiBpZiBjb21waWxlZCBhcyBtb2R1bGU6IGxvYWRpbmcgdGhlIG1vZHVsZQorICAgICAyLiBTZXR1cCBvZiBoYXJkd2FyZSwgTU9ERU0gYW5kIEtJU1MgcGFyYW1ldGVycyB3aXRoIHNjY2luaXQKKyAgICAgMy4gQXR0YWNoIGVhY2ggY2hhbm5lbCB0byB0aGUgTGludXgga2VybmVsIEFYLjI1IHdpdGggImlmY29uZmlnIgorCitVbmxpa2UgdGhlIHZlcnNpb25zIGJlbG93IDIuNCB0aGlzIGRyaXZlciBpcyBhIHJlYWwgbmV0d29yayBkZXZpY2UKK2RyaXZlci4gSWYgeW91IHdhbnQgdG8gcnVuIHhOT1MgaW5zdGVhZCBvZiBvdXIgZmluZSBrZXJuZWwgQVguMjUKK3VzZSBhIDIueCB2ZXJzaW9uIChhdmFpbGFibGUgZnJvbSBhYm92ZSBzaXRlcykgb3IgcmVhZCB0aGUKK0FYLjI1LUhPV1RPIG9uIGhvdyB0byBlbXVsYXRlIGEgS0lTUyBUTkMgb24gbmV0d29yayBkZXZpY2UgZHJpdmVycy4KKworCisxLjEgTG9hZGluZyB0aGUgbW9kdWxlCis9PT09PT09PT09PT09PT09PT09PT09CisKKyhJZiB5b3UncmUgZ29pbmcgdG8gY29tcGlsZSB0aGUgZHJpdmVyIGFzIGEgcGFydCBvZiB0aGUga2VybmVsIGltYWdlLAorIHNraXAgdGhpcyBjaGFwdGVyIGFuZCBjb250aW51ZSB3aXRoIDEuMikKKworQmVmb3JlIHlvdSBjYW4gdXNlIGEgbW9kdWxlLCB5b3UnbGwgaGF2ZSB0byBsb2FkIGl0IHdpdGgKKworCWluc21vZCBzY2MubworCitwbGVhc2UgcmVhZCAnbWFuIGluc21vZCcgdGhhdCBjb21lcyB3aXRoIG1vZHVsZS1pbml0LXRvb2xzLgorCitZb3Ugc2hvdWxkIGluY2x1ZGUgdGhlIGluc21vZCBpbiBvbmUgb2YgdGhlIC9ldGMvcmMuZC9yYy4qIGZpbGVzLAorYW5kIGRvbid0IGZvcmdldCB0byBpbnNlcnQgYSBjYWxsIG9mIHNjY2luaXQgYWZ0ZXIgdGhhdC4gSXQKK3dpbGwgcmVhZCB5b3VyIC9ldGMvejg1MzBkcnYuY29uZi4KKworMS4yLiAvZXRjL3o4NTMwZHJ2LmNvbmYKKz09PT09PT09PT09PT09PT09PT09PT09CisKK1RvIHNldHVwIGFsbCBwYXJhbWV0ZXJzIHlvdSBtdXN0IHJ1biAvc2Jpbi9zY2Npbml0IGZyb20gb25lCitvZiB5b3VyIHJjLiotZmlsZXMuIFRoaXMgaGFzIHRvIGJlIGRvbmUgQkVGT1JFIHlvdSBjYW4KKyJpZmNvbmZpZyIgYW4gaW50ZXJmYWNlLiBTY2Npbml0IHJlYWRzIHRoZSBmaWxlIC9ldGMvejg1MzBkcnYuY29uZgorYW5kIHNldHMgdGhlIGhhcmR3YXJlLCBNT0RFTSBhbmQgS0lTUyBwYXJhbWV0ZXJzLiBBIHNhbXBsZSBmaWxlIGlzCitkZWxpdmVyZWQgd2l0aCB0aGlzIHBhY2thZ2UuIENoYW5nZSBpdCB0byB5b3VyIG5lZWRzLgorCitUaGUgZmlsZSBpdHNlbGYgY29uc2lzdHMgb2YgdHdvIG1haW4gc2VjdGlvbnMuCisKKzEuMi4xIGNvbmZpZ3VyYXRpb24gb2YgaGFyZHdhcmUgcGFyYW1ldGVycworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBoYXJkd2FyZSBzZXR1cCBzZWN0aW9uIGRlZmluZXMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGZvciBlYWNoCitaODUzMDoKKworY2hpcCAgICAxCitkYXRhX2EgIDB4MzAwICAgICAgICAgICAgICAgICAgICMgZGF0YSBwb3J0IEEKK2N0cmxfYSAgMHgzMDQgICAgICAgICAgICAgICAgICAgIyBjb250cm9sIHBvcnQgQQorZGF0YV9iICAweDMwMSAgICAgICAgICAgICAgICAgICAjIGRhdGEgcG9ydCBCCitjdHJsX2IgIDB4MzA1ICAgICAgICAgICAgICAgICAgICMgY29udHJvbCBwb3J0IEIKK2lycSAgICAgNSAgICAgICAgICAgICAgICAgICAgICAgIyBJUlEgTm8uIDUKK3BjbG9jayAgNDkxNTIwMCAgICAgICAgICAgICAgICAgIyBjbG9jaworYm9hcmQgICBCQVlDT00gICAgICAgICAgICAgICAgICAjIGhhcmR3YXJlIHR5cGUKK2VzY2MgICAgbm8gICAgICAgICAgICAgICAgICAgICAgIyBlbmhhbmNlZCBTQ0MgY2hpcD8gKDg1ODAvODUxODAvODUyODApCit2ZWN0b3IgIDAgICAgICAgICAgICAgICAgICAgICAgICMgbGF0Y2ggZm9yIGludGVycnVwdCB2ZWN0b3IKK3NwZWNpYWwgbm8gICAgICAgICAgICAgICAgICAgICAgIyBhZGRyZXNzIG9mIHNwZWNpYWwgZnVuY3Rpb24gcmVnaXN0ZXIKK29wdGlvbiAgMCAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb24gdG8gc2V0IHZpYSBzZnIKKworCitjaGlwCS0gdGhpcyBpcyBqdXN0IGEgZGVsaW1pdGVyIHRvIG1ha2Ugc2NjaW5pdCBhIGJpdCBzaW1wbGVyIHRvCisJICBwcm9ncmFtLiBBIHBhcmFtZXRlciBoYXMgbm8gZWZmZWN0LgorCitkYXRhX2EgIC0gdGhlIGFkZHJlc3Mgb2YgdGhlIGRhdGEgcG9ydCBBIG9mIHRoaXMgWjg1MzAgKG5lZWRlZCkKK2N0cmxfYSAgLSB0aGUgYWRkcmVzcyBvZiB0aGUgY29udHJvbCBwb3J0IEEgKG5lZWRlZCkKK2RhdGFfYiAgLSB0aGUgYWRkcmVzcyBvZiB0aGUgZGF0YSBwb3J0IEIgKG5lZWRlZCkKK2N0cmxfYiAgLSB0aGUgYWRkcmVzcyBvZiB0aGUgY29udHJvbCBwb3J0IEIgKG5lZWRlZCkKKworaXJxICAgICAtIHRoZSB1c2VkIElSUSBmb3IgdGhpcyBjaGlwLiBEaWZmZXJlbnQgY2hpcHMgY2FuIHVzZSBkaWZmZXJlbnQKKyAgICAgICAgICBJUlFzIG9yIHRoZSBzYW1lLiBJZiB0aGV5IHNoYXJlIGFuIGludGVycnVwdCwgaXQgbmVlZHMgdG8gYmUKKwkgIHNwZWNpZmllZCB3aXRoaW4gb25lIGNoaXAtZGVmaW5pdGlvbiBvbmx5LgorCitwY2xvY2sgIC0gdGhlIGNsb2NrIGF0IHRoZSBQQ0xLIHBpbiBvZiB0aGUgWjg1MzAgKG9wdGlvbiwgNDkxNTIwMCBpcworICAgICAgICAgIGRlZmF1bHQpLCBtZWFzdXJlZCBpbiBIZXJ0egorCitib2FyZCAgIC0gdGhlICJ0eXBlIiBvZiB0aGUgYm9hcmQ6CisKKwkgICBTQ0MgdHlwZSAgICAgICAgICAgICAgICAgdmFsdWUKKwkgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgICBQQTBIWlAgU0NDIGNhcmQgICAgICAgICAgUEEwSFpQCisJICAgRUFHTEUgY2FyZCAgICAgICAgICAgICAgIEVBR0xFCisJICAgUEMxMDAgY2FyZCAgICAgICAgICAgICAgIFBDMTAwCisJICAgUFJJTVVTLVBDIChERzlCTCkgY2FyZCAgIFBSSU1VUworCSAgIEJheUNvbSAoVSlTQ0MgY2FyZCAgICAgICBCQVlDT00KKworZXNjYyAgICAtIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIEVTQ0MgY2hpcHMgKDg1ODAsIDg1MTgwLCA4NTI4MCksIHNldAorICAgICAgICAgIHRoaXMgdG8gInllcyIgKG9wdGlvbiwgZGVmYXVsdHMgdG8gIm5vIikKKwordmVjdG9yICAtIGFkZHJlc3Mgb2YgdGhlIHZlY3RvciBsYXRjaCAoYWthICJpbnRhY2sgcG9ydCIpIGZvciBQQTBIWlAKKyAgICAgICAgICBjYXJkcy4gVGhlcmUgY2FuIGJlIG9ubHkgb25lIHZlY3RvciBsYXRjaCBmb3IgYWxsIGNoaXBzIQorCSAgKG9wdGlvbiwgZGVmYXVsdHMgdG8gMCkKKworc3BlY2lhbCAtIGFkZHJlc3Mgb2YgdGhlIHNwZWNpYWwgZnVuY3Rpb24gcmVnaXN0ZXIgb24gc2V2ZXJhbCBjYXJkcy4KKyAgICAgICAgICAob3B0aW9uLCBkZWZhdWx0cyB0byAwKQorCitvcHRpb24gIC0gVGhlIHZhbHVlIHlvdSB3cml0ZSBpbnRvIHRoYXQgcmVnaXN0ZXIgKG9wdGlvbiwgZGVmYXVsdCBpcyAwKQorCitZb3UgY2FuIHNwZWNpZnkgdXAgdG8gZm91ciBjaGlwcyAoOCBjaGFubmVscykuIElmIHRoaXMgaXMgbm90IGVub3VnaCwKK2p1c3QgY2hhbmdlCisKKwkjZGVmaW5lIE1BWFNDQyA0CisKK3RvIGEgaGlnaGVyIHZhbHVlLgorCitFeGFtcGxlIGZvciB0aGUgQkFZQ09NIFVTQ0M6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NoaXAgICAgMQorZGF0YV9hICAweDMwMCAgICAgICAgICAgICAgICAgICAjIGRhdGEgcG9ydCBBCitjdHJsX2EgIDB4MzA0ICAgICAgICAgICAgICAgICAgICMgY29udHJvbCBwb3J0IEEKK2RhdGFfYiAgMHgzMDEgICAgICAgICAgICAgICAgICAgIyBkYXRhIHBvcnQgQgorY3RybF9iICAweDMwNSAgICAgICAgICAgICAgICAgICAjIGNvbnRyb2wgcG9ydCBCCitpcnEgICAgIDUgICAgICAgICAgICAgICAgICAgICAgICMgSVJRIE5vLiA1ICgjKQorYm9hcmQgICBCQVlDT00gICAgICAgICAgICAgICAgICAjIGhhcmR3YXJlIHR5cGUgKCopCisjCisjIFNDQyBjaGlwIDIKKyMKK2NoaXAgICAgMgorZGF0YV9hICAweDMwMgorY3RybF9hICAweDMwNgorZGF0YV9iICAweDMwMworY3RybF9iICAweDMwNworYm9hcmQgICBCQVlDT00KKworQW4gZXhhbXBsZSBmb3IgYSBQQTBIWlAgY2FyZDoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NoaXAgMQorZGF0YV9hIDB4MTUzCitkYXRhX2IgMHgxNTEKK2N0cmxfYSAweDE1MgorY3RybF9iIDB4MTUwCitpcnEgOQorcGNsb2NrIDQ5MTUyMDAKK2JvYXJkIFBBMEhaUAordmVjdG9yIDB4MTY4Citlc2NjIG5vCisjCisjCisjCitjaGlwIDIKK2RhdGFfYSAweDE1NworZGF0YV9iIDB4MTU1CitjdHJsX2EgMHgxNTYKK2N0cmxfYiAweDE1NAoraXJxIDkKK3BjbG9jayA0OTE1MjAwCitib2FyZCBQQTBIWlAKK3ZlY3RvciAweDE2OAorZXNjYyBubworCitBIERSU0kgd291bGQgc2hvdWxkIHByb2JhYmx5IHdvcmsgd2l0aCB0aGlzOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyhhY3R1YWxseTogdHdvIERSU0kgY2FyZHMuLi4pCisKK2NoaXAgMQorZGF0YV9hIDB4MzAzCitkYXRhX2IgMHgzMDEKK2N0cmxfYSAweDMwMgorY3RybF9iIDB4MzAwCitpcnEgNworcGNsb2NrIDQ5MTUyMDAKK2JvYXJkIERSU0kKK2VzY2Mgbm8KKyMKKyMKKyMKK2NoaXAgMgorZGF0YV9hIDB4MzEzCitkYXRhX2IgMHgzMTEKK2N0cmxfYSAweDMxMgorY3RybF9iIDB4MzEwCitpcnEgNworcGNsb2NrIDQ5MTUyMDAKK2JvYXJkIERSU0kKK2VzY2Mgbm8KKworTm90ZSB0aGF0IHlvdSBjYW5ub3QgdXNlIHRoZSBvbi1ib2FyZCBiYXVkcmF0ZSBnZW5lcmF0b3Igb2ZmIERSU0kKK2NhcmRzLiBVc2UgIm1vZGUgZHBsbCIgZm9yIGNsb2NrIHNvdXJjZSAoc2VlIGJlbG93KS4KKworVGhpcyBpcyBiYXNlZCBvbiBpbmZvcm1hdGlvbiBwcm92aWRlZCBieSBNaWtlIEJpbG93IChhbmQgdmVyaWZpZWQKK2J5IFBhdWwgSGVsYXkpCisKK1RoZSB1dGlsaXR5ICJnZW5jZmciCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3Ugb25seSBrbm93IHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgUEUxQ0hMIGRyaXZlciBmb3IgRE9TLAorcnVuIGdlbmNmZy4gSXQgd2lsbCBnZW5lcmF0ZSB0aGUgY29ycmVjdCBwb3J0IGFkZHJlc3NlcyAoSSBob3BlKS4KK0l0cyBwYXJhbWV0ZXJzIGFyZSBleGFjdGx5IHRoZSBzYW1lIGFzIHRoZSBvbmVzIHlvdSB1c2Ugd2l0aAordGhlICJhdHRhY2ggc2NjIiBjb21tYW5kIGluIG5ldCwgZXhjZXB0IHRoYXQgdGhlIHN0cmluZyAiaW5pdCIgbXVzdCAKK25vdCBhcHBlYXIuIEV4YW1wbGU6CisKK2dlbmNmZyAyIDB4MTUwIDQgMiAwIDEgMHgxNjggOSA0OTE1MjAwIAorCit3aWxsIHByaW50IGEgc2tlbGV0b24gejg1MzBkcnYuY29uZiBmb3IgdGhlIE9wdG9TQ0MgdG8gc3Rkb3V0LgorCitnZW5jZmcgMiAweDMwMCAyIDQgNSAtNCAwIDcgNDkxNTIwMCAweDEwCisKK2RvZXMgdGhlIHNhbWUgZm9yIHRoZSBCQVlDT00gVVNDQyBjYXJkLiBJbiBteSBvcGluaW9uIGl0IGlzIG11Y2ggZWFzaWVyCit0byBlZGl0IHNjY19jb25maWcuaC4uLiAKKworCisxLjIuMiBjaGFubmVsIGNvbmZpZ3VyYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgY2hhbm5lbCBkZWZpbml0aW9uIGlzIGRpdmlkZWQgaW50byB0aHJlZSBzdWIgc2VjdGlvbnMgZm9yIGVhY2gKK2NoYW5uZWw6CisKK0FuIGV4YW1wbGUgZm9yIHNjYzA6CisKKyMgREVWSUNFCisKK2RldmljZSBzY2MwCSMgdGhlIGRldmljZSBmb3IgdGhlIGZvbGxvd2luZyBwYXJhbXMKKworIyBNT0RFTSAvIEJVRkZFUlMKKworc3BlZWQgMTIwMAkJIyB0aGUgZGVmYXVsdCBiYXVkcmF0ZQorY2xvY2sgZHBsbAkJIyBjbG9jayBzb3VyY2U6IAorCQkJIyAJZHBsbCAgICAgPSBub3JtYWwgaGFsZiBkdXBsZXggb3BlcmF0aW9uCisJCQkjIAlleHRlcm5hbCA9IE1PREVNIHByb3ZpZGVzIG93biBSeC9UeCBjbG9jaworCQkJIwlkaXZpZGVyICA9IHVzZSBmdWxsIGR1cGxleCBkaXZpZGVyIGlmCisJCQkjCQkgICBpbnN0YWxsZWQgKDEpCittb2RlIG5yemkJCSMgSERMQyBlbmNvZGluZyBtb2RlCisJCQkjCW5yemkgPSAxazIgTU9ERU0sIEczUlVIIDlrNiBNT0RFTQorCQkJIwlucnogID0gREY5SUMgOWs2IE1PREVNCisJCQkjCitidWZzaXplCTM4NAkJIyBzaXplIG9mIGJ1ZmZlcnMuIE5vdGUgdGhhdCB0aGlzIG11c3QgaW5jbHVkZQorCQkJIyB0aGUgQVguMjUgaGVhZGVyLCBub3Qgb25seSB0aGUgZGF0YSBmaWVsZCEKKwkJCSMgKG9wdGlvbmFsLCBkZWZhdWx0cyB0byAzODQpCisKKyMgS0lTUyAoTGF5ZXIgMSkKKwordHhkZWxheSAzNiAgICAgICAgICAgICAgIyAoc2VlIGNoYXB0ZXIgMS40KQorcGVyc2lzdCA2NAorc2xvdCAgICA4Cit0YWlsICAgIDgKK2Z1bGxkdXAgMAord2FpdCAgICAxMgorbWluICAgICAzCittYXhrZXkgIDcKK2lkbGUgICAgMworbWF4ZGVmICAxMjAKK2dyb3VwICAgMAordHhvZmYgICBvZmYKK3NvZnRkY2Qgb24gICAgICAgICAgICAgICAgICAgCitzbGlwICAgIG9mZgorCitUaGUgb3JkZXIgV0lUSElOIHRoZXNlIHNlY3Rpb25zIGlzIHVuaW1wb3J0YW50LiBUaGUgb3JkZXIgT0YgdGhlc2UKK3NlY3Rpb25zIElTIGltcG9ydGFudC4gVGhlIE1PREVNIHBhcmFtZXRlcnMgYXJlIHNldCB3aXRoIHRoZSBmaXJzdAorcmVjb2duaXplZCBLSVNTIHBhcmFtZXRlci4uLgorCitQbGVhc2Ugbm90ZSB0aGF0IHlvdSBjYW4gaW5pdGlhbGl6ZSB0aGUgYm9hcmQgb25seSBvbmNlIGFmdGVyIGJvb3QKKyhvciBpbnNtb2QpLiBZb3UgY2FuIGNoYW5nZSBhbGwgcGFyYW1ldGVycyBidXQgIm1vZGUiIGFuZCAiY2xvY2siIAorbGF0ZXIgd2l0aCB0aGUgU2NjcGFyYW0gcHJvZ3JhbSBvciB0aHJvdWdoIEtJU1MuIEp1c3QgdG8gYXZvaWQgCitzZWN1cml0eSBob2xlcy4uLiAKKworKDEpIHRoaXMgZGl2aWRlciBpcyB1c3VhbGx5IG1vdW50ZWQgb24gdGhlIFNDQy1QQkMgKFBBMEhaUCkgb3Igbm90CisgICAgcHJlc2VudCBhdCBhbGwgKEJheUNvbSkuIEl0IGZlZWRzIGJhY2sgdGhlIG91dHB1dCBvZiB0aGUgRFBMTCAKKyAgICAoZGlnaXRhbCBwbGwpIGFzIHRyYW5zbWl0IGNsb2NrLiBVc2luZyB0aGlzIG1vZGUgd2l0aG91dCBhIGRpdmlkZXIgCisgICAgaW5zdGFsbGVkIHdpbGwgbm9ybWFsbHkgcmVzdWx0IGluIGtleWluZyB0aGUgdHJhbnNjZWl2ZXIgdW50aWwgCisgICAgbWF4a2V5IGV4cGlyZXMgLS0tIG9mIGNvdXJzZSB3aXRob3V0IHNlbmRpbmcgYW55dGhpbmcgKHVzZWZ1bCkuCisKKzIuIEF0dGFjaG1lbnQgb2YgYSBjaGFubmVsIGJ5IHlvdXIgQVguMjUgc29mdHdhcmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworMi4xIEtlcm5lbCBBWC4yNQorPT09PT09PT09PT09PT09PQorCitUbyBzZXQgdXAgYW4gQVguMjUgZGV2aWNlIHlvdSBjYW4gc2ltcGx5IHR5cGU6CisKKwlpZmNvbmZpZyBzY2MwIDQ0LjEyOC4xLjEgaHcgYXgyNSBkbDB0aGEtNworCitUaGlzIHdpbGwgY3JlYXRlIGEgbmV0d29yayBpbnRlcmZhY2Ugd2l0aCB0aGUgSVAgbnVtYmVyIDQ0LjEyOC4yMC4xMDcgCithbmQgdGhlIGNhbGxzaWduICJkbDB0aGEiLiBJZiB5b3UgZG8gbm90IGhhdmUgYW55IElQIG51bWJlciAoeWV0KSB5b3UgCitjYW4gdXNlIGFueSBvZiB0aGUgNDQuMTI4LjAuMCBuZXR3b3JrLiBOb3RlIHRoYXQgeW91IGRvIG5vdCBuZWVkIAorYXhhdHRhY2guIFRoZSBwdXJwb3NlIG9mIGF4YXR0YWNoIChsaWtlIHNsYXR0YWNoKSBpcyB0byBjcmVhdGUgYSBLSVNTIAorbmV0d29yayBkZXZpY2UgbGlua2VkIHRvIGEgVFRZLiBQbGVhc2UgcmVhZCB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgCitheDI1LXV0aWxzIGFuZCB0aGUgQVguMjUtSE9XVE8gdG8gbGVhcm4gaG93IHRvIHNldCB0aGUgcGFyYW1ldGVycyBvZgordGhlIGtlcm5lbCBBWC4yNS4KKworMi4yIE5PUywgTkVUIGFuZCBURktJU1MKKz09PT09PT09PT09PT09PT09PT09PT09CisKK1NpbmNlIHRoZSBUVFkgZHJpdmVyIChha2EgS0lTUyBUTkMgZW11bGF0aW9uKSBpcyBnb25lIHlvdSBuZWVkCit0byBlbXVsYXRlIHRoZSBvbGQgYmVoYXZpb3VyLiBUaGUgY29zdCBvZiB1c2luZyB0aGVzZSBwcm9ncmFtcyBpcwordGhhdCB5b3UgcHJvYmFibHkgbmVlZCB0byBjb21waWxlIHRoZSBrZXJuZWwgQVguMjUsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlcgoreW91IGFjdHVhbGx5IHVzZSBpdCBvciBub3QuIEZpcnN0IHNldHVwIHlvdXIgL2V0Yy9heDI1L2F4cG9ydHMsCitmb3IgZXhhbXBsZToKKworCTlrNglkbDB0aGEtOSAgOTYwMCAgMjU1IDQgOTYwMCBiYXVkIHBvcnQgKHNjYzMpCisJYXhsaW5rCWRsMHRoYS0xNSAzODQwMCAyNTUgNCBMaW5rIHRvIE5PUworCitOb3cgImlmY29uZmlnIiB0aGUgc2NjIGRldmljZToKKworCWlmY29uZmlnIHNjYzMgNDQuMTI4LjEuMSBodyBheDI1IGRsMHRoYS05CisKK1lvdSBjYW4gbm93IGF4YXR0YWNoIGEgcHNldWRvLVRUWToKKworCWF4YXR0YWNoIC9kZXYvcHR5czAgYXhsaW5rCisKK2FuZCBzdGFydCB5b3VyIE5PUyBhbmQgYXR0YWNoIC9kZXYvcHR5czAgdGhlcmUuIFRoZSBwcm9ibGVtIGlzIHRoYXQKK05PUyBpcyByZWFjaGFibGUgb25seSB2aWEgZGlnaXBlYXRpbmcgdGhyb3VnaCB0aGUga2VybmVsIEFYLjI1CisoZGlzYXN0cm91cyBvbiBhIERBTUEgY29udHJvbGxlZCBjaGFubmVsKS4gVG8gc29sdmUgdGhpcyBwcm9ibGVtLAorY29uZmlndXJlICJyeGVjaG8iIHRvIGVjaG8gdGhlIGluY29taW5nIGZyYW1lcyBmcm9tICI5azYiIHRvICJheGxpbmsiCithbmQgb3V0Z29pbmcgZnJhbWVzIGZyb20gImF4bGluayIgdG8gIjlrNiIgYW5kIHN0YXJ0OgorCisJcnhlY2hvCisKK09yIHNpbXBseSB1c2UgImtpc3NicmlkZ2UiIGNvbWluZyB3aXRoIHo4NTMwZHJ2LXV0aWxzOgorCisJaWZjb25maWcgc2NjMyBodyBheDI1IGRsMHRoYS05CisJa2lzc2JyaWRnZSBzY2MzIC9kZXYvcHR5czAKKworCiszLiBBZGp1c3RtZW50IGFuZCBEaXNwbGF5IG9mIHBhcmFtZXRlcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCiszLjEgRGlzcGxheWluZyBTQ0MgUGFyYW1ldGVyczoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitPbmNlIGEgU0NDIGNoYW5uZWwgaGFzIGJlZW4gYXR0YWNoZWQsIHRoZSBwYXJhbWV0ZXIgc2V0dGluZ3MgYW5kIAorc29tZSBzdGF0aXN0aWMgaW5mb3JtYXRpb24gY2FuIGJlIHNob3duIHVzaW5nIHRoZSBwYXJhbSBwcm9ncmFtOgorCitkbDFia2UtdTp+JCBzY2NzdGF0IHNjYzAKKworUGFyYW1ldGVyczoKKworc3BlZWQgICAgICAgOiAxMjAwIGJhdWQKK3R4ZGVsYXkgICAgIDogMzYKK3BlcnNpc3QgICAgIDogMjU1CitzbG90dGltZSAgICA6IDAKK3R4dGFpbCAgICAgIDogOAorZnVsbGR1cCAgICAgOiAxCit3YWl0dGltZSAgICA6IDEyCittaW50aW1lICAgICA6IDMgc2VjCittYXhrZXl1cCAgICA6IDcgc2VjCitpZGxldGltZSAgICA6IDMgc2VjCittYXhkZWZlciAgICA6IDEyMCBzZWMKK2dyb3VwICAgICAgIDogMHgwMAordHhvZmYgICAgICAgOiBvZmYKK3NvZnRkY2QgICAgIDogb24KK1NMSVAgICAgICAgIDogb2ZmCisKK1N0YXR1czoKKworSERMQyAgICAgICAgICAgICAgICAgIFo4NTMwICAgICAgICAgICBJbnRlcnJ1cHRzICAgICAgICAgQnVmZmVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1NlbnQgICAgICAgOiAgICAgMjczICBSeE92ZXIgOiAgICAgMCAgUnhJbnRzIDogICAxMjUwNzQgIFNpemUgICAgOiAgMzg0CitSZWNlaXZlZCAgIDogICAgMTA5NSAgVHhVbmRlcjogICAgIDAgIFR4SW50cyA6ICAgICA0Njg0ICBOb1NwYWNlIDogICAgMAorUnhFcnJvcnMgICA6ICAgIDE1OTEgICAgICAgICAgICAgICAgICBFeEludHMgOiAgICAxMTc3NgorVHhFcnJvcnMgICA6ICAgICAgIDAgICAgICAgICAgICAgICAgICBTcEludHMgOiAgICAgMTUwMworVHggU3RhdGUgICA6ICAgIGlkbGUKKworCitUaGUgc3RhdHVzIGluZm8gc2hvd24gaXM6CisKK1NlbnQJCS0gbnVtYmVyIG9mIGZyYW1lcyB0cmFuc21pdHRlZAorUmVjZWl2ZWQJLSBudW1iZXIgb2YgZnJhbWVzIHJlY2VpdmVkCitSeEVycm9ycwktIG51bWJlciBvZiByZWNlaXZlIGVycm9ycyAoQ1JDLCBBQk9SVCkKK1R4RXJyb3JzCS0gbnVtYmVyIG9mIGRpc2NhcmRlZCBUeCBmcmFtZXMgKGR1ZSB0byB2YXJpb3VzIHJlYXNvbnMpIAorVHggU3RhdGUJLSBzdGF0dXMgb2YgdGhlIFR4IGludGVycnVwdCBoYW5kbGVyOiBpZGxlL2J1c3kvYWN0aXZlL3RhaWwgKDIpCitSeE92ZXIJCS0gbnVtYmVyIG9mIHJlY2VpdmVyIG92ZXJydW5zCitUeFVuZGVyCQktIG51bWJlciBvZiB0cmFuc21pdHRlciB1bmRlcnJ1bnMKK1J4SW50cwkJLSBudW1iZXIgb2YgcmVjZWl2ZXIgaW50ZXJydXB0cworVHhJbnRzCQktIG51bWJlciBvZiB0cmFuc21pdHRlciBpbnRlcnJ1cHRzCitFcEludHMJCS0gbnVtYmVyIG9mIHJlY2VpdmVyIHNwZWNpYWwgY29uZGl0aW9uIGludGVycnVwdHMKK1NwSW50cwkJLSBudW1iZXIgb2YgZXh0ZXJuYWwvc3RhdHVzIGludGVycnVwdHMKK1NpemUJCS0gbWF4aW11bSBzaXplIG9mIGFuIEFYLjI1IGZyYW1lICgqd2l0aCogQVguMjUgaGVhZGVycyEpCitOb1NwYWNlCQktIG51bWJlciBvZiB0aW1lcyBhIGJ1ZmZlciBjb3VsZCBub3QgZ2V0IGFsbG9jYXRlZAorCitBbiBvdmVycnVuIGlzIGFibm9ybWFsLiBJZiBsb3RzIG9mIHRoZXNlIG9jY3VyLCB0aGUgcHJvZHVjdCBvZgorYmF1ZHJhdGUgYW5kIG51bWJlciBvZiBpbnRlcmZhY2VzIGlzIHRvbyBoaWdoIGZvciB0aGUgcHJvY2Vzc2luZworcG93ZXIgb2YgeW91ciBjb21wdXRlci4gTm9TcGFjZSBlcnJvcnMgYXJlIHVubGlrZWx5IHRvIGJlIGNhdXNlZCBieSB0aGUKK2RyaXZlciBvciB0aGUga2VybmVsIEFYLjI1LgorCisKKzMuMiBTZXR0aW5nIFBhcmFtZXRlcnMKKz09PT09PT09PT09PT09PT09PT09PT0KKworCitUaGUgc2V0dGluZyBvZiBwYXJhbWV0ZXJzIG9mIHRoZSBlbXVsYXRlZCBLSVNTIFROQyBpcyBkb25lIGluIHRoZSAKK3NhbWUgd2F5IGluIHRoZSBTQ0MgZHJpdmVyLiBZb3UgY2FuIGNoYW5nZSBwYXJhbWV0ZXJzIGJ5IHVzaW5nCit0aGUga2lzc3Bhcm1zIHByb2dyYW0gZnJvbSB0aGUgYXgyNS11dGlscyBwYWNrYWdlIG9yIHVzZSB0aGUgcHJvZ3JhbSAKKyJzY2NwYXJhbSI6CisKKyAgICAgc2NjcGFyYW0gPGRldmljZT4gPHBhcmFtbmFtZT4gPGRlY2ltYWwtfGhleGFkZWNpbWFsIHZhbHVlPgorCitZb3UgY2FuIGNoYW5nZSB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6CisKK3BhcmFtCSAgICA6IHZhbHVlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3NwZWVkICAgICAgIDogMTIwMAordHhkZWxheSAgICAgOiAzNgorcGVyc2lzdCAgICAgOiAyNTUKK3Nsb3R0aW1lICAgIDogMAordHh0YWlsICAgICAgOiA4CitmdWxsZHVwICAgICA6IDEKK3dhaXR0aW1lICAgIDogMTIKK21pbnRpbWUgICAgIDogMworbWF4a2V5dXAgICAgOiA3CitpZGxldGltZSAgICA6IDMKK21heGRlZmVyICAgIDogMTIwCitncm91cCAgICAgICA6IDB4MDAKK3R4b2ZmICAgICAgIDogb2ZmCitzb2Z0ZGNkICAgICA6IG9uCitTTElQICAgICAgICA6IG9mZgorCisKK1RoZSBwYXJhbWV0ZXJzIGhhdmUgdGhlIGZvbGxvd2luZyBtZWFuaW5nOgorCitzcGVlZDoKKyAgICAgVGhlIGJhdWRyYXRlIG9uIHRoaXMgY2hhbm5lbCBpbiBiaXRzL3NlYworCisgICAgIEV4YW1wbGU6IHNjY3BhcmFtIC9kZXYvc2NjMyBzcGVlZCA5NjAwCisKK3R4ZGVsYXk6CisgICAgIFRoZSBkZWxheSAoaW4gdW5pdHMgb2YgMTAgbXMpIGFmdGVyIGtleWluZyBvZiB0aGUgCisgICAgIHRyYW5zbWl0dGVyLCB1bnRpbCB0aGUgZmlyc3QgYnl0ZSBpcyBzZW50LiBUaGlzIGlzIHVzdWFsbHkgCisgICAgIGNhbGxlZCAiVFhERUxBWSIgaW4gYSBUTkMuICBXaGVuIDAgaXMgc3BlY2lmaWVkLCB0aGUgZHJpdmVyIAorICAgICB3aWxsIGp1c3Qgd2FpdCB1bnRpbCB0aGUgQ1RTIHNpZ25hbCBpcyBhc3NlcnRlZC4gVGhpcyAKKyAgICAgYXNzdW1lcyB0aGUgcHJlc2VuY2Ugb2YgYSB0aW1lciBvciBvdGhlciBjaXJjdWl0cnkgaW4gdGhlIAorICAgICBNT0RFTSBhbmQvb3IgdHJhbnNtaXR0ZXIsIHRoYXQgYXNzZXJ0cyBDVFMgd2hlbiB0aGUgCisgICAgIHRyYW5zbWl0dGVyIGlzIHJlYWR5IGZvciBkYXRhLgorICAgICBBIG5vcm1hbCB2YWx1ZSBvZiB0aGlzIHBhcmFtZXRlciBpcyAzMC0zNi4KKworICAgICBFeGFtcGxlOiBzY2NwYXJhbSAvZGV2L3NjYzAgdHhkIDIwCisKK3BlcnNpc3Q6CisgICAgIFRoaXMgaXMgdGhlIHByb2JhYmlsaXR5IHRoYXQgdGhlIHRyYW5zbWl0dGVyIHdpbGwgYmUga2V5ZWQgCisgICAgIHdoZW4gdGhlIGNoYW5uZWwgaXMgZm91bmQgdG8gYmUgZnJlZS4gIEl0IGlzIGEgdmFsdWUgZnJvbSAwIAorICAgICB0byAyNTUsIGFuZCB0aGUgcHJvYmFiaWxpdHkgaXMgKHZhbHVlKzEpLzI1Ni4gIFRoZSB2YWx1ZSAKKyAgICAgc2hvdWxkIGJlIHNvbWV3aGVyZSBuZWFyIDUwLTYwLCBhbmQgc2hvdWxkIGJlIGxvd2VyZWQgd2hlbiAKKyAgICAgdGhlIGNoYW5uZWwgaXMgdXNlZCBtb3JlIGhlYXZpbHkuCisKKyAgICAgRXhhbXBsZTogc2NjcGFyYW0gL2Rldi9zY2MyIHBlcnNpc3QgMjAKKworc2xvdHRpbWU6CisgICAgIFRoaXMgaXMgdGhlIHRpbWUgYmV0d2VlbiBzYW1wbGVzIG9mIHRoZSBjaGFubmVsLiBJdCBpcyAKKyAgICAgZXhwcmVzc2VkIGluIHVuaXRzIG9mIDEwIG1zLiAgQWJvdXQgMjAwLTMwMCBtcyAodmFsdWUgMjAtMzApIAorICAgICBzZWVtcyB0byBiZSBhIGdvb2QgdmFsdWUuCisKKyAgICAgRXhhbXBsZTogc2NjcGFyYW0gL2Rldi9zY2MwIHNsb3QgMjAKKwordGFpbDoKKyAgICAgVGhlIHRpbWUgdGhlIHRyYW5zbWl0dGVyIHdpbGwgcmVtYWluIGtleWVkIGFmdGVyIHRoZSBsYXN0IAorICAgICBieXRlIG9mIGEgcGFja2V0IGhhcyBiZWVuIHRyYW5zZmVycmVkIHRvIHRoZSBTQ0MuIFRoaXMgaXMgCisgICAgIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBDUkMgYW5kIGEgZmxhZyBzdGlsbCBoYXZlIHRvIGxlYXZlIHRoZSAKKyAgICAgU0NDIGJlZm9yZSB0aGUgdHJhbnNtaXR0ZXIgaXMga2V5ZWQgZG93bi4gVGhlIHZhbHVlIGRlcGVuZHMgCisgICAgIG9uIHRoZSBiYXVkcmF0ZSBzZWxlY3RlZC4gIEEgZmV3IGNoYXJhY3RlciB0aW1lcyBzaG91bGQgYmUgCisgICAgIHN1ZmZpY2llbnQsIGUuZy4gNDBtcyBhdCAxMjAwIGJhdWQuICh2YWx1ZSA0KQorICAgICBUaGUgdmFsdWUgb2YgdGhpcyBwYXJhbWV0ZXIgaXMgaW4gMTAgbXMgdW5pdHMuCisKKyAgICAgRXhhbXBsZTogc2NjcGFyYW0gL2Rldi9zY2MyIDQKKworZnVsbDoKKyAgICAgVGhlIGZ1bGwtZHVwbGV4IG1vZGUgc3dpdGNoLiBUaGlzIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyAKKyAgICAgdmFsdWVzOgorCisgICAgIDA6ICAgVGhlIGludGVyZmFjZSB3aWxsIG9wZXJhdGUgaW4gQ1NNQSBtb2RlICh0aGUgbm9ybWFsIAorICAgICAgICAgIGhhbGYtZHVwbGV4IHBhY2tldCByYWRpbyBvcGVyYXRpb24pCisgICAgIDE6ICAgRnVsbGR1cGxleCBtb2RlLCBpLmUuIHRoZSB0cmFuc21pdHRlciB3aWxsIGJlIGtleWVkIGF0IAorICAgICAgICAgIGFueSB0aW1lLCB3aXRob3V0IGNoZWNraW5nIHRoZSByZWNlaXZlZCBjYXJyaWVyLiAgSXQgCisgICAgICAgICAgd2lsbCBiZSB1bmtleWVkIHdoZW4gdGhlcmUgYXJlIG5vIHBhY2tldHMgdG8gYmUgc2VudC4KKyAgICAgMjogICBMaWtlIDEsIGJ1dCB0aGUgdHJhbnNtaXR0ZXIgd2lsbCByZW1haW4ga2V5ZWQsIGFsc28gCisgICAgICAgICAgd2hlbiB0aGVyZSBhcmUgbm8gcGFja2V0cyB0byBiZSBzZW50LiAgRmxhZ3Mgd2lsbCBiZSAKKyAgICAgICAgICBzZW50IGluIHRoYXQgY2FzZSwgdW50aWwgYSB0aW1lb3V0IChwYXJhbWV0ZXIgMTApIAorICAgICAgICAgIG9jY3Vycy4KKworICAgICBFeGFtcGxlOiBzY2NwYXJhbSAvZGV2L3NjYzAgZnVsbGR1cCBvZmYKKword2FpdDoKKyAgICAgVGhlIGluaXRpYWwgd2FpdHRpbWUgYmVmb3JlIGFueSB0cmFuc21pdCBhdHRlbXB0LCBhZnRlciB0aGUgCisgICAgIGZyYW1lIGhhcyBiZWVuIHF1ZXVlIGZvciB0cmFuc21pdC4gIFRoaXMgaXMgdGhlIGxlbmd0aCBvZiAKKyAgICAgdGhlIGZpcnN0IHNsb3QgaW4gQ1NNQSBtb2RlLiAgSW4gZnVsbCBkdXBsZXggbW9kZXMgaXQgaXMKKyAgICAgc2V0IHRvIDAgZm9yIG1heGltdW0gcGVyZm9ybWFuY2UuCisgICAgIFRoZSB2YWx1ZSBvZiB0aGlzIHBhcmFtZXRlciBpcyBpbiAxMCBtcyB1bml0cy4gCisKKyAgICAgRXhhbXBsZTogc2NjcGFyYW0gL2Rldi9zY2MxIHdhaXQgNAorCittYXhrZXk6CisgICAgIFRoZSBtYXhpbWFsIHRpbWUgdGhlIHRyYW5zbWl0dGVyIHdpbGwgYmUga2V5ZWQgdG8gc2VuZCAKKyAgICAgcGFja2V0cywgaW4gc2Vjb25kcy4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBvbiBidXN5IENTTUEgCisgICAgIGNoYW5uZWxzLCB0byBhdm9pZCAiZ2V0dGluZyBhIGJhZCByZXB1dGF0aW9uIiB3aGVuIHlvdSBhcmUgCisgICAgIGdlbmVyYXRpbmcgYSBsb3Qgb2YgdHJhZmZpYy4gIEFmdGVyIHRoZSBzcGVjaWZpZWQgdGltZSBoYXMgCisgICAgIGVsYXBzZWQsIG5vIG5ldyBmcmFtZSB3aWxsIGJlIHN0YXJ0ZWQuIEluc3RlYWQsIHRoZSB0cmFucy0KKyAgICAgbWl0dGVyIHdpbGwgYmUgc3dpdGNoZWQgb2ZmIGZvciBhIHNwZWNpZmllZCB0aW1lIChwYXJhbWV0ZXIgCisgICAgIG1pbiksIGFuZCB0aGVuIHRoZSBzZWxlY3RlZCBhbGdvcml0aG0gZm9yIGtleXVwIHdpbGwgYmUgCisgICAgIHN0YXJ0ZWQgYWdhaW4uCisgICAgIFRoZSB2YWx1ZSAwIGFzIHdlbGwgYXMgIm9mZiIgd2lsbCBkaXNhYmxlIHRoaXMgZmVhdHVyZSwgCisgICAgIGFuZCBhbGxvdyBpbmZpbml0ZSB0cmFuc21pc3Npb24gdGltZS4gCisKKyAgICAgRXhhbXBsZTogc2NjcGFyYW0gL2Rldi9zY2MwIG1heGsgMjAKKworbWluOgorICAgICBUaGlzIGlzIHRoZSB0aW1lIHRoZSB0cmFuc21pdHRlciB3aWxsIGJlIHN3aXRjaGVkIG9mZiB3aGVuIAorICAgICB0aGUgbWF4aW11bSB0cmFuc21pc3Npb24gdGltZSBpcyBleGNlZWRlZC4KKworICAgICBFeGFtcGxlOiBzY2NwYXJhbSAvZGV2L3NjYzMgbWluIDEwCisKK2lkbGUKKyAgICAgVGhpcyBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIGlkbGUgdGltZSBpbiBmdWxsIGR1cGxleCAKKyAgICAgMiBtb2RlLCBpbiBzZWNvbmRzLiAgV2hlbiBubyBmcmFtZXMgaGF2ZSBiZWVuIHNlbnQgZm9yIHRoaXMgCisgICAgIHRpbWUsIHRoZSB0cmFuc21pdHRlciB3aWxsIGJlIGtleWVkIGRvd24uICBBIHZhbHVlIG9mIDAgaXMKKyAgICAgaGFzIHNhbWUgcmVzdWx0IGFzIHRoZSBmdWxsZHVwbGV4IG1vZGUgMS4gVGhpcyBwYXJhbWV0ZXIKKyAgICAgY2FuIGJlIGRpc2FibGVkLgorCisgICAgIEV4YW1wbGU6IHNjY3BhcmFtIC9kZXYvc2NjMiBpZGxlIG9mZgkjIHRyYW5zbWl0IGZvcmV2ZXIKKworbWF4ZGVmZXIKKyAgICAgVGhpcyBpcyB0aGUgbWF4aW11bSB0aW1lIChpbiBzZWNvbmRzKSB0byB3YWl0IGZvciBhIGZyZWUgY2hhbm5lbAorICAgICB0byBzZW5kLiBXaGVuIHRoaXMgdGltZXIgZXhwaXJlcyB0aGUgdHJhbnNtaXR0ZXIgd2lsbCBiZSBrZXllZCAKKyAgICAgSU1NRURJQVRFTFkuIElmIHlvdSBsb3ZlIHRvIGdldCB0cm91YmxlIHdpdGggb3RoZXIgdXNlcnMgeW91CisgICAgIHNob3VsZCBzZXQgdGhpcyB0byBhIHZlcnkgbG93IHZhbHVlIDstKQorCisgICAgIEV4YW1wbGU6IHNjY3BhcmFtIC9kZXYvc2NjMCBtYXhkZWZlciAyNDAJIyAyIG1pbnV0ZXMKKworCit0eG9mZjoKKyAgICAgV2hlbiB0aGlzIHBhcmFtZXRlciBoYXMgdGhlIHZhbHVlIDAsIHRoZSB0cmFuc21pc3Npb24gb2YgcGFja2V0cworICAgICBpcyBlbmFibGUuIE90aGVyd2lzZSBpdCBpcyBkaXNhYmxlZC4KKworICAgICBFeGFtcGxlOiBzY2NwYXJhbSAvZGV2L3NjYzIgdHhvZmYgb24KKworZ3JvdXA6CisgICAgIEl0IGlzIHBvc3NpYmxlIHRvIGJ1aWxkIHNwZWNpYWwgcmFkaW8gZXF1aXBtZW50IHRvIHVzZSBtb3JlIHRoYW4gCisgICAgIG9uZSBmcmVxdWVuY3kgb24gdGhlIHNhbWUgYmFuZCwgZS5nLiB1c2luZyBzZXZlcmFsIHJlY2VpdmVycyBhbmQgCisgICAgIG9ubHkgb25lIHRyYW5zbWl0dGVyIHRoYXQgY2FuIGJlIHN3aXRjaGVkIGJldHdlZW4gZnJlcXVlbmNpZXMuCisgICAgIEFsc28sIHlvdSBjYW4gY29ubmVjdCBzZXZlcmFsIHJhZGlvcyB0aGF0IGFyZSBhY3RpdmUgb24gdGhlIHNhbWUgCisgICAgIGJhbmQuICBJbiB0aGVzZSBjYXNlcywgaXQgaXMgbm90IHBvc3NpYmxlLCBvciBub3QgYSBnb29kIGlkZWEsIHRvIAorICAgICB0cmFuc21pdCBvbiBtb3JlIHRoYW4gb25lIGZyZXF1ZW5jeS4gIFRoZSBTQ0MgZHJpdmVyIHByb3ZpZGVzIGEgCisgICAgIG1ldGhvZCB0byBsb2NrIHRyYW5zbWl0dGVycyBvbiBkaWZmZXJlbnQgaW50ZXJmYWNlcywgdXNpbmcgdGhlIAorICAgICAicGFyYW0gPGludGVyZmFjZT4gZ3JvdXAgPHg+IiBjb21tYW5kLiAgVGhpcyB3aWxsIG9ubHkgd29yayB3aGVuIAorICAgICB5b3UgYXJlIHVzaW5nIENTTUEgbW9kZSAocGFyYW1ldGVyIGZ1bGwgPSAwKS4KKyAgICAgVGhlIG51bWJlciA8eD4gbXVzdCBiZSAwIGlmIHlvdSB3YW50IG5vIGdyb3VwIHJlc3RyaWN0aW9ucywgYW5kIAorICAgICBjYW4gYmUgY29tcHV0ZWQgYXMgZm9sbG93cyB0byBjcmVhdGUgcmVzdHJpY3RlZCBncm91cHM6CisgICAgIDx4PiBpcyB0aGUgc3VtIG9mIHNvbWUgT0NUQUwgbnVtYmVyczoKKworICAgICAyMDAgIFRoaXMgdHJhbnNtaXR0ZXIgd2lsbCBvbmx5IGJlIGtleWVkIHdoZW4gYWxsIG90aGVyIAorICAgICAgICAgIHRyYW5zbWl0dGVycyBpbiB0aGUgZ3JvdXAgYXJlIG9mZi4KKyAgICAgMTAwICBUaGlzIHRyYW5zbWl0dGVyIHdpbGwgb25seSBiZSBrZXllZCB3aGVuIHRoZSBjYXJyaWVyIAorICAgICAgICAgIGRldGVjdCBvZiBhbGwgb3RoZXIgaW50ZXJmYWNlcyBpbiB0aGUgZ3JvdXAgaXMgb2ZmLgorICAgICAweHggIEEgYnl0ZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGRlZmluZSBkaWZmZXJlbnQgZ3JvdXBzLiAgCisgICAgICAgICAgSW50ZXJmYWNlcyBhcmUgaW4gdGhlIHNhbWUgZ3JvdXAsIHdoZW4gdGhlIGxvZ2ljYWwgQU5EIAorICAgICAgICAgIGJldHdlZW4gdGhlaXIgeHggdmFsdWVzIGlzIG5vbnplcm8uCisKKyAgICAgRXhhbXBsZXM6CisgICAgIFdoZW4gMiBpbnRlcmZhY2VzIHVzZSBncm91cCAyMDEsIHRoZWlyIHRyYW5zbWl0dGVycyB3aWxsIG5ldmVyIGJlIAorICAgICBrZXllZCBhdCB0aGUgc2FtZSB0aW1lLgorICAgICBXaGVuIDIgaW50ZXJmYWNlcyB1c2UgZ3JvdXAgMTAxLCB0aGUgdHJhbnNtaXR0ZXJzIHdpbGwgb25seSBrZXkgCisgICAgIHdoZW4gYm90aCBjaGFubmVscyBhcmUgY2xlYXIgYXQgdGhlIHNhbWUgdGltZS4gIFdoZW4gZ3JvdXAgMzAxLCAKKyAgICAgdGhlIHRyYW5zbWl0dGVycyB3aWxsIG5vdCBiZSBrZXllZCBhdCB0aGUgc2FtZSB0aW1lLgorCisgICAgIERvbid0IGZvcmdldCB0byBjb252ZXJ0IHRoZSBvY3RhbCBudW1iZXJzIGludG8gZGVjaW1hbCBiZWZvcmUKKyAgICAgeW91IHNldCB0aGUgcGFyYW1ldGVyLgorCisgICAgIEV4YW1wbGU6ICh0byBiZSB3cml0dGVuKQorCitzb2Z0ZGNkOgorICAgICB1c2UgYSBzb2Z0d2FyZSBkY2QgaW5zdGVhZCBvZiB0aGUgcmVhbCBvbmUuLi4gVXNlZnVsIGZvciBhIHZlcnkKKyAgICAgc2xvdyBzcXVlbGNoLgorCisgICAgIEV4YW1wbGU6IHNjY3BhcmFtIC9kZXYvc2NjMCBzb2Z0IG9uCisKKworNC4gUHJvYmxlbXMgCis9PT09PT09PT09PQorCitJZiB5b3UgaGF2ZSB0eC1wcm9ibGVtcyB3aXRoIHlvdXIgQmF5Q29tIFVTQ0MgY2FyZCBwbGVhc2UgY2hlY2sKK3RoZSBtYW51ZmFjdHVyZXIgb2YgdGhlIDg1MzAuIFNHUyBjaGlwcyBoYXZlIGEgc2xpZ2h0bHkKK2RpZmZlcmVudCB0aW1pbmcuIFRyeSBaaWxvZy4uLiAgQSBzb2x1dGlvbiBpcyB0byB3cml0ZSB0byByZWdpc3RlciA4IAoraW5zdGVhZCB0byB0aGUgZGF0YSBwb3J0LCBidXQgdGhpcyB3b24ndCB3b3JrIHdpdGggdGhlIEVTQ0MgY2hpcHMuIAorKlNJR0ghKgorCitBIHZlcnkgY29tbW9uIHByb2JsZW0gaXMgdGhhdCB0aGUgUFRUIGxvY2tzIHVudGlsIHRoZSBtYXhrZXl1cCB0aW1lcgorZXhwaXJlcywgYWx0aG91Z2ggaW50ZXJydXB0cyBhbmQgY2xvY2sgc291cmNlIGFyZSBjb3JyZWN0LiBJbiBtb3N0CitjYXNlcyBjb21waWxpbmcgdGhlIGRyaXZlciB3aXRoIENPTkZJR19TQ0NfREVMQVkgKHNldCB3aXRoCittYWtlIGNvbmZpZykgc29sdmVzIHRoZSBwcm9ibGVtcy4gRm9yIG1vcmUgaGludHMgcmVhZCB0aGUgKHBzZXVkbykgRkFRIAorYW5kIHRoZSBkb2N1bWVudGF0aW9uIGNvbWluZyB3aXRoIHo4NTMwZHJ2LXV0aWxzLgorCitJIGdvdCByZXBvcnRzIHRoYXQgdGhlIGRyaXZlciBoYXMgcHJvYmxlbXMgb24gc29tZSAzODYtYmFzZWQgc3lzdGVtcy4KKyhpLmUuIEFtc3RyYWQpIFRob3NlIHN5c3RlbXMgaGF2ZSBhIGJvZ3VzIEFUIGJ1cyB0aW1pbmcgd2hpY2ggd2lsbAorbGVhZCB0byBkZWxheWVkIGFuc3dlcnMgb24gaW50ZXJydXB0cy4gWW91IGNhbiByZWNvZ25pemUgdGhlc2UKK3Byb2JsZW1zIGJ5IGxvb2tpbmcgYXQgdGhlIG91dHB1dCBvZiBTY2NzdGF0IGZvciB0aGUgc3VzcGVjdGVkCitwb3J0LiBJZiBpdCBzaG93cyB1bmRlci0gYW5kIG92ZXJydW5zIHlvdSBvd24gc3VjaCBhIHN5c3RlbS4KKworRGVsYXllZCBwcm9jZXNzaW5nIG9mIHJlY2VpdmVkIGRhdGE6IFRoaXMgZGVwZW5kcyBvbgorCistIHRoZSBrZXJuZWwgdmVyc2lvbgorCistIGtlcm5lbCBwcm9maWxpbmcgY29tcGlsZWQgb3Igbm90CisKKy0gYSBoaWdoIGludGVycnVwdCBsb2FkCisKKy0gYSBoaWdoIGxvYWQgb2YgdGhlIG1hY2hpbmUgLS0tIHJ1bm5pbmcgWCwgWG1vcnBoLCBYViBhbmQgUG92cmF5LAorICB3aGlsZSBjb21waWxpbmcgdGhlIGtlcm5lbC4uLiBobW0gLi4uIGV2ZW4gd2l0aCAzMiBNQiBSQU0gLi4uICA7LSkKKyAgT3IgcnVubmluZyBhIG5hbWVkIGZvciB0aGUgd2hvbGUgLmFtcHIub3JnIGRvbWFpbiBvbiBhbiA4IE1CCisgIGJveC4uLgorCistIHVzaW5nIGluZm9ybWF0aW9uIGZyb20gcnhlY2hvIG9yIGtpc3NicmlkZ2UuCisKK0tlcm5lbCBwYW5pY3M6IHBsZWFzZSByZWFkIC9saW51eC9SRUFETUUgYW5kIGZpbmQgb3V0IGlmIGl0CityZWFsbHkgb2NjdXJyZWQgd2l0aGluIHRoZSBzY2MgZHJpdmVyLgorCitJZiB5b3UgY2Fubm90IHNvbHZlIGEgcHJvYmxlbSwgc2VuZCBtZQorCistIGEgZGVzY3JpcHRpb24gb2YgdGhlIHByb2JsZW0sCistIGluZm9ybWF0aW9uIG9uIHlvdXIgaGFyZHdhcmUgKGNvbXB1dGVyIHN5c3RlbSwgc2NjIGJvYXJkLCBtb2RlbSkKKy0geW91ciBrZXJuZWwgdmVyc2lvbgorLSB0aGUgb3V0cHV0IG9mIGNhdCAvcHJvYy9uZXQvejg1MzAKKworNC4gVGhvciBSTEMxMDAKKz09PT09PT09PT09PT09CisKK015c3RlcmlvdXNseSB0aGlzIGJvYXJkIHNlZW1zIG5vdCB0byB3b3JrIHdpdGggdGhlIGRyaXZlci4gQW55b25lCitnb3QgaXQgdXAtYW5kLXJ1bm5pbmc/CisKKworTWFueSB0aGFua3MgdG8gTGludXMgVG9ydmFsZHMgYW5kIEFsYW4gQ294IGZvciBpbmNsdWRpbmcgdGhlIGRyaXZlcgoraW4gdGhlIExpbnV4IHN0YW5kYXJkIGRpc3RyaWJ1dGlvbiBhbmQgdGhlaXIgc3VwcG9ydC4KKworSm9lcmcgUmV1dGVyCWFtcHItbmV0OiBkbDFia2VAZGIwcHJhLmFtcHIub3JnCisJCUFYLTI1ICAgOiBETDFCS0UgQCBEQjBBQkguI0JBWS5ERVUuRVUKKwkJSW50ZXJuZXQ6IGpyZXV0ZXJAeWFpbmEuZGUKKwkJV1dXICAgICA6IGh0dHA6Ly95YWluYS5kZS9qcmV1dGVyCg==